1、如果没有文件这个实体,就必须指明数据存放的具体物理位置,即位于哪个柱面、哪个磁道、哪个扇区。其次,数据转移过程是复杂的i/o操作,一般用户无法关注这些具体的细节。最后,这个命令的执行还涉及其他复杂的操作,但 是,因为有了操作系统,用户只需要知道文件名,其他繁琐的事务完全由操作系统去处理。 如果用户在图形界面下操作,上述处理就更加容易。实际上,图形界面的本质也是执行各种命令,例如,如果复制一个文件,那么就要调用cp命令,而具体的复制操作最终还是由操作系统去完成。 因此,不管是敲击键盘或者单击鼠标,这些简单的操作在指挥着计算机完成复杂的处理过程。正是操作系统把繁琐留给自己,把简单留给用户。 1.1
2、.2 从程序开发者角度 从程序开发者的角度看,不必关心如何在内存存放变量、数据,如何从外存存取数据,如何把数据在输出设备上显示出来,等等。例如,cp命令的c语言实现片段如下: inf=open(/floppy/test,o_rdonly,0); out=open(/mydir/test,o_wronly,0600); do l=read(inf,buf,4096); write(outf,buf,l); while(l); close(outf); close(inf); 在这段程序中,用到四个函数open(),close(),write()和read(),它们都是c语言函数库中的函数。进一步
3、研究可知,这些函数都要涉及i/o操作,因此,它们的实现必须调用操作系统所提供的接口,也就是说,打开文件、关闭文件、读写文件的真正操作是由操作系统完成的。这些操作非常繁琐,对于不同的操作系统其具体实现也可能不同,程序开发者不必关心这些具体操作。 1.1.3 从操作系统在整个计算机系统中所处位置 如果把操作系统放在整个计算机系统中考虑,则如图1.1所示。内核 图1.1 计算机系统层次结构示意图 因为操作系统这个术语越来越大众化,因此许多用户把他们在屏幕上看到的东西理所当然地认为是操作系统,例如windows中的图形界面、ie浏览器、系统工具集等,这些都是操作系统的一部分。但是,本书讨论的操作系统是
4、指内核(kernel)。用户界面是操作系统的外在表象,而内核是操作系统的内在核心,由它真正完成用户程序所要求的操作。 从图1.1可以看出,一方面操作系统是上层软件与硬件相联系的窗口和桥梁,另一方面操作系统是其他所有用户程序运行的基础。 下面以一个程序的执行过程为例,看一下操作系统具体起什么样的作用。一个简单的c程序如下所示,其名为test.c。 #includestdio.h main() printf(hello worldn); 用户对上述程序编译、连接后,生成一个可执行的二进制文件,其机器执行过程简述如下: (1)用户告诉操作系统执行test程序。 (2)操作系统通过文件名找到该程序。
5、(3)检查其类型,检查程序首部,找出代码和数据存放的位置。 (4)文件系统找到第一个磁盘块。 (5)操作系统建立程序的执行环境。 (6)操作系统把程序从磁盘装入内存,并跳到程序开始处开始执行。 (7)操作系统检查字符串的位置是否正确。 (8)操作系统找到字符串被送往的设备。 (9)操作系统将字符串送往该设备。窗口系统确定这是一个合法的操作,然后将字符串转换成像素。 (10)窗口系统将像素写入存储映像区。(11)视频硬件将像素表示转换成一组模拟信号,用于控制显示器(重画屏幕)。 (12)显示器发射电子束,在屏幕上显示“hello world”。 从这个简单的例子可以看出,任何一个程序的运行只有借
6、助于操作系统才能得以顺利完成,因此,从本质上说,操作系统是应用程序运行的基础设施。 1.1.4 从操作系统设计者的角度 操作系统是一个庞大、复杂的系统软件,其设计目标有两个,一是尽可能地方便用户使用计算机,二是让各种软件资源和硬件资源高效、协调地运转。 笼统地说,计算机的硬件资源包括cpu、存储器和各种外设。其中外设种类繁多,如磁盘、鼠标、网络接口、打印机等。操作系统对外设的操作是通过i/o接口进行的。软件资源主要指存放在存储介质上的文件。 假设在一台计算机上有三道程序同时运行,并试图在一台打印机上输出运算结果,这意味着必须考虑以下问题:三道程序在内存中如何存放?什么时候让某个程序占用cpu?
7、怎样有序地输出各个程序的运算结果?这些问题的解决都必须求助于操作系统,也就是说,操作系统必须对内存、cpu进行管理,当然也包括对外设的管理。 因此,从操作系统设计者的角度考虑,一个操作系统必须包含以下几部分: 操作系统接口 cpu管理 内存管理 设备管理 文件管理 综上所述,操作系统是计算机系统中的一个系统软件,是一些程序模块的集合它们能以尽量有效、合理的方式组织和管理计算机的软、硬件资源,合理的组织计算机的工作流程,控制程序的执行,并向用户提供各种服务功能,使得用户能够灵活、方便、有效地使用计算机,使整个计算机系统能高效、顺畅地运行。 1.2 操作系统的发展 操作系统的发展过程是一个从无到有
8、、从简单到复杂的过程。为了进一步理清思路,下面从操作系统的演变、硬件和软件的各自发展的角度来加深了解。 1.2.1 操作系统的演变 在计算机诞生的初期,硬件价格昂贵,没有操作系统。每一个用户都要自行编写涉及到硬件的源代码。程序通过卡片输入计算机,一次只能完成一个功能(计算、i/o、用户思考/反应),工作效率非常低。 最早出现的操作系统是简单的单道批处理系统,它能串行执行预先组织好的一组任务。这种系统避免了此前系统一次只能运行一个任务,每个任务必须先装入系统,执行完之后才能装入下一个任务而浪费了装入时间的现象,提高了系统效率。 但是,程序运行到i/o操作期间,cpu总是需要停下来等待数据传输完成
9、,而i/o操作时间比cpu处理数据时间要高出数倍(往往是20倍以上),因此无形中浪费了大量宝贵的cpu时间,也使得任务组中后续程序的执行被延迟,那么,如何避免数据传输等待所带来的时间浪费?能否在传输期间解放cpu,使其可以去执行别的任务?为解决这个问题,单道批处理系统发展成为多道批处理系统。所谓多道,就是指处理器(指单处理器系统)可以交错运行多个程序,在某个任务挂起时运行另一个程序。这样就解决了cpu等待数据传输所浪费的时间,进一步提高了系统效率。 当计算机所处理的任务不再仅仅局限于科学计算,而是越来越多地涉及办公和日常活动时,程序在执行过程中常常需要和用户不断交互,任务执行结果随时都会因为用
10、户的选择而改变,而且往往需要多个用户同时使用系统。由于这种交互模式和共享模式需要任务响应时间尽可能短(如果超过20秒,人的思维就容易被打断或变得不耐烦),为了让多数用户满意,操作系统开始采用分时技术,将处理器的运行时间分成数片,平均或依照一定权重分发给系统中的各用户使用。这种使处理器虚拟地由多个用户共同使用的方法,不但可以满足快速响应要求,也可以使得所有用户产生计算机完全是在为自己服务的感觉。 上面给出了操作系统发展的几个主要阶段:单道批处理多道批处理分时系统。除此以外,现在还出现了分布式操作系统、嵌入式系统,不过总体技术思路仍然脱离不了多道、分时等概念。 1.2.2 硬件的发展轨迹 操作系统
11、理论是在计算机的应用中诞生并成长的,它的发展与计算机硬件的发展是密不可分的。表1.1是从硬件角度看操作系统的发展轨迹。 表1.1 从硬件角度看操作系统发展轨迹【篇二:嵌入式linux操作系统原理与应用】. 1 1.1嵌入式系统概述 . 1 1.1.1嵌入式系统基本概念 . 1 1.1.2嵌入式系统的应用领域 . 1 1.1.3嵌入式系统组成 . 2 1.1.4嵌入式系统的特点 . 3 1.1.5嵌入式系统的发展趋势 . 4 1.2嵌入式操作系统 . 6 1.2.1操作系统的基本功能 . 6 1.2.2嵌入式操作系统 . 7 1.2.3嵌入式操作系统体系结构 . 8 1.2.4嵌入式操作系统的选
12、择 . 11 1.2.5几种代表性嵌入式操作系统比较 . 12 1.3嵌入式linux基础 . 13 1.3.1 linux简介 . 13 1.3.2 嵌入式linux . 17 1.3.3linux的安装基础 . 18 1.3.4 基于虚拟机的linux的安装 . 20 1.3.5linux虚拟机的设置 . 25 1.4 linux目录结构及文件 . 29 1.4.1 linux文件系统 . 29 1.4.2linux目录结构 . 31 1.4.3文件类型及文件属性 . 33 1.5 linux常用操作命令 . 36 1.5.1 shell命令基础 . 36 1.5.2文件与目录相关命令 .
13、 37 1.5.3磁盘管理与维护命令 . 45 1.5.4系统管理与设置命令 . 47 1.5.5网络相关命令 . 49 1.5.6压缩备份命令 . 51 习 题 一 . 53 第2章 linux编程基础 . 54 2.1linux下的c语言编程 . 54 2.1.1 linux下的c语言编程概述 . 54 2.1.2 linux下c语言开发流程 . 55 2.2 vim编辑器 . 58 2.2.1 vim的模式 . 58 2.2.2 vim常用操作 . 60 2.3 gcc编译器 . 64 2.3.1 gcc编译器简介 . 64 2.3.2 gcc编译流程 . 65 2.3.3 gcc常用编
14、译选项 . 67 2.3.4库依赖 . 69 2.4 gdb 调试器 . 702.4.1 gdb概述 . 70 2.4.2 gdb使用流程 . 70 2.4.3 gdb基本命令 . 75 2.4.4 gdbserver远程调试 . 79 2.5 make工程管理器 . 80 2.5.1make工程管理器概述 . 80 2.5.2 makefile基本结构 . 81 2.5.3 makefile变量 . 85 2.5.4 makefile规则 . 88 2.5.5 使用自动生成工具生成makefile . 89 2.6 linux下的集成开发环境 . 92 2.6.1 eclipse集成开发环境
15、简介 . 92 2.6.2 eclipse的开发流程 . 95 2.6.3 使用cvs进行版本管理 . 97 2.7 文件i/o编程 . 102 2.7.1 文件i/o编程基础 . 102 2.7.2基本i/o操作 . 103 2.7.3标准i/o操作 . 106 2.8 进程控制编程 . 109 2.8.1 linux下的进程概述 . 109 2.8.2 linux进程编程 . 111 2.8.3 zombie进程 . 120 2.9进程间的通信和同步 . 121 2.9.1 linux下进程间通信概述 . 121 2.9.2管道通信 . 122 2.9.3共享内存通信 . 130 2.9.
16、4 其他方式通信 . 133 2.10 多线程编程 . 133 2.10.1线程的基本概念 . 133 2.10.2线程的实现 . 134 2.10.3修改线程属性 . 136 2.10.4多线程访问控制 . 138 习 题 二 . 140 第3章 基于linux的嵌入式软件开发 . 141 3.1嵌入式软件结构 . 141 3.1.1 嵌入式软件体系结构 . 141 3.1.2基于linux的嵌入式软件 . 143 3.2嵌入式软件开发流程 . 144 3.2.1 嵌入式linux设计概述 . 144 3.2.2 基于开发板的二次开发 . 145 3.2.3 基于linux的嵌入式软件开发流程 . 146 3.3 嵌入式linux开发环境 . 147 3.3.1 arm处理器硬件开发平台 . 147 3.3.2 建立嵌入式交叉编译环境 . 1483.3.3 配置开发环境 . 149 3.4 嵌入式系统引导代码 . 158 3.4.1 bootloader简介 . 158 3.4.2 常用的bootloader . 159 3.4.3 bootloader基本原理 . 160 3.4.4 bootloader移植实例一:u_boot . 164 3.4.5 bootloader移植实例二:vivi . 167 3.5 linux内核结构及移植 .
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2