嵌入式Linux操作系统_第1页
嵌入式Linux操作系统_第2页
嵌入式Linux操作系统_第3页
嵌入式Linux操作系统_第4页
嵌入式Linux操作系统_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第3章嵌入式Linux操作系统,3.1 Linux及其应用,3.1.1 Linux与Unix和GNU 1Linux的历史 可以说Linux完全是一个互联网时代的产物,是在互联网上产生、发展和不断壮大起来的。1990年的秋天,芬兰学生Linus Benedict Torvalds正在赫尔辛基大学自行开发了一套保护模式下的操作系统,这就是Linux的原型。 Linux第一次问世是在1991年10月5日,为002版。该版本首先发布在赫尔辛基大学的一台FTP服务器上,该服务器的管理员认为这个系统是Linus的Minix,于是将两个名字混起来当作存放该系统的目录名,就是Linux。 1993年,Linu

2、x的第一个正式版本10版发布,并遵从GPL(GNU General PubIic License)版权协议。 1994年3月14日,Linux的第一个正式商业版本10版发布。 1996年,美国国家标准技术局的计算机系统实验室确认Linux版本1213(由Open Linux公司打包)符合POSIX标准。 1998年后,Linux迅速在国内科研、教学机构流行开来。1999年相继出现了红旗Linux、Turbo Linux等简体中文版Linux系统。,2Linux与Unix系统,Linux的源头要追溯到最早的Unix。1969年,Bell实验室,在Ken Thompson,Dennis Ritch

3、ie共同努力下,诞生了最早的Unix。早期的Unix是用汇编语言编写的,但第三个版本用C重新设计。 Unix系统正式发表于1974年,1975年成为真正的多用户分时系统。1980年,Bell实验室公布了VAXll780系统平台的32位操作系统Unix32V。在Unix32V的基础上,Unix系统走上以AT&T和加州Berkeley分校为主的发展道路。1980年,Berkeley先后公布了Unix BSD 40和Unix BSD 41,1983年公布Unix BSD 42,而ATT在1982年、1983年发布了Unix system和Unix systemV。 几年之后,美国IEEE的POSIx

4、委员会统一了Unix系统标准。经过多年发展,Unix从实验室走出来并成为了操作系统的主流,几乎每个主要的计算机厂商都有其自有版本的unix。直到今天,unix系统以其稳定、高效的性能在服务器高端市场中依然占有绝对优势。 Unix是一个简单却非常优秀的操作系统模型。Linux系统最初以unix为原型,以实现POSIX标准作为其目标。Linux从unix的各个流派中不断吸取成功经验,接受unix的优点,抛弃unix的缺点,成为操作系统发展的热点。基于这个核心构建的Linux操作系统,也被Microsoft公司视为最强有力的竞争对手。,3Linux与自由软件运动,Linux只是自由软件家族中的一员,

5、是其中最具影响的成员之一。自由软件最早由美国麻省理工学院(MIT)的Richard stallman提出,自由软件的源代码应该拥有属于全人类的公共知识产权,应该在编写和使用程序的人员之间自由地传播,而不应该是商人谋求利益的手段。由此可见,自由软件不仅仅是个免费使用的问题,而主要是个版权的问题。,4Linux的发行版本,当提到Linux时,一般是指Kernel,即内核,它是所有Linux操作系统的“心脏”。但仅Linux并不能成为一个可用的操作系统,还需要许多软件包、编译器、程序库文件、x Widow系统等。 当Linux走向成熟时,一些人开始建立软件包来简化新用户安装和使用Linux的方法。这

6、些软件包称为Linux发布或Linux发行版本(Distributions)。任何人都可以将Linux内核和操作系统的其他组成部分组合在一起进行发布。Linux操作系统在市场上有多种发行版本,它们并不都一样。所有的发行版本具有一样的Linux内核,内核包含着所有核心的操作系统功能以及网络协议栈。另外,它们都提供标准的工具、一系列的应用程序、一些打印的文档以及有限的技术支持。每种发行版都带有x window系统以及一个图形用户界面、Web Server、Email Server以及FTP Server。真正不同的地方在于其安装、配置、支持以及第三方应用。,(1)Red Hat Linux Red

7、 Hat Linux已经成为Linux市场中最重要的一员,主要是因为它提供了最优秀的安装程序以及先进的包管理程序。如果是第一次使用Linux,Red Hat是最好的选择。 Red Hat因其包管理程序(RPM)而闻名,这是一个开放源码的程序,在其他许多发行版中也广泛应用。RPM使安装和反安装应用变得安全,避免了程序冲突,甚至可以对内核本身进行升级而无须重装整个系统。 相关资源站点:wwwredhatcom,ftpredhattompub。,(2)Debian GNULinux,Debian GNULinux在主要的发行版中是惟一仍由一群志愿的程序员开发的。该版本许多强有力的特性,成为黑客中流行

8、的选择。 Debian被认为是最难安装的发行版。当完成安装后,Debian包含的X Window可以使工作稍微容易一些。该发行版最大的卖点在于包括一个可选的包管理Debian Package anagement System,它可以在安装之前对新的应用程序进行扫描,并且检查系统现有的配置情况,以决定所需安装的包,以免发生冲突。Debian由Linux Press发行。 相关资源站点:www 1inuxpresscorn,ftp debian org。 目前,Red Hat发行版本的安装更容易,应用软件更多,已成为最流行的Linux发行版本。中文化的Linux发行版本也有很多,国内自主建立的如B

9、lue Point Linux、Flag Linux、Xterm Linux以美国的XLinux、Turbo Linux等。这些发行版本大多对安装及使用界面进行了部分汉化。 每种发行版本都有其各自的优点和弱点,但它们都提供相对完整的应用软件及帮助文档,都使用相同的内核和开发工具,都使用同一个名称Linux系统。,3.1.2 Linux的特点,Linux是Unix操作系统的克隆,可以免费使用,遵循GPL声明,可以自由修改和传播。可以说,与Windows等商业操作系统不同,Linux完全是一个自由的操作系统。Linux包含了人们希望操作系统拥有的所有功能特性,这些功能包括真正的多任务、虚拟内存、世

10、界上最快的TCPIP驱动程序、 共享库和多用户支持。 Linux是类Unix操作系统。按照层次结构的观点,在同一种硬件平台上,Linux可以提供与Unix相同的服务,即相同的用户级和程序员级接口。同时,Linux绝不是简化自Unix,相反,它是强有力和具有创新意义的Unix操作系统。它不仅继承了Unix的特征,而且在许多方面超过了Unix。Linux兼容POSIXl0031标准,具有下列特点: 多任务支持。 多用户支持。 多处理器支持。 跨平台支持。Linux可在几乎所有常见的硬件体系结构上运行,从PC机到Alpha工作站。 按需调入执行。只有实际执行中需要的程序块才会被装入到内存中。,分页机

11、制。Linux将一个不常使用的4KB大小内存页面中的数据置换到外存上,并将需要的数据页面由外存调入内存中。 动态外存缓存。在内存中保留一块空间作为外存操作的缓存。Linux中可以动态地调整缓存的大小。 共享库支持。 开放性。Linux遵循IEEE POSIX标准。Linux自从1.2版本起就开始完全支持POSIXl003.1。与国际标准接轨使得Linux在界面上具有很强的通用性。 设备独立性。设备独立性是指操作系统把所有外部设备统一当作文件来看待,只要安装它们的驱动程序,任何用户都可以像使用文件一样,操纵、使用这些设备,而不必知 道其具体存在形式。,多种不同格式可执行文件支持。 可靠的系统安全

12、。Linux采取了许多安全技术措施,包括对读写进行权限控制、带保 护的子系统、审计跟踪、核心授权等。 支持不同种类的文件系统。在Linux中最常使用的是其系统自带的ext2ext3文件系统。此外,MSDOS、VFAT、NTFS、AFF、HPFS。 丰富的网络功能。完善的内置网络是Linux的一大特点。 *支持Internet是其网络功能之一。Linux免费提供了大量支持Internet的软件。 *文件传输是其网络功能之二。用户能通过一些Linux命令完成内部信息或文件的传输。 *远程访问是其网络功能之三。 对于网络上的嵌入式系统(有网络支持的嵌入式系统),Linux支持NFS(Network

13、File Systerm)。这在软件开发过程中是很重要的。举例来说,工程师可以在本地编辑程序,交叉编译后,不需要烧录到嵌入式Linux系统中即可通过NFS直接运行。,良好的用户界面。Linux向用户提供了两种界面:用户界面和系统调用。Linux的传统用户界面是基于文本的命令行界面,即Shell,它既可以联机使用,又可存在文件上脱 机使用。Shell有很强的程序设计能力,用户可方便地用它编制程序,从而为用户扩充系统功能提供了更高级的手段。可编程Shell是指将多条命令组合在一起,形成一个Shell程序。这个程序可以单独运行,也可以与其他程序同时运行。 系统调用给用户提供编程时使用的界面。用户可以

14、在编程时直接使用系统提供的系统调用命令。系统通过这个界面为用户程序提供低级、高效率的服务。 Linux还为用户提供了图形用户界面。它利用鼠标、菜单、窗口、滚动条等功能,给用户呈现一个直观、易操作、交互性强的图形化界面。 健壮性。Linux系统已经在真实世界中被广泛地运用和执行,时间证明它是一种可靠性和健壮性非常高的系统。,它的Bug总是可以很快被发现,然后很快被解决。而对于许多源代码不公开的商业操作系统,即使发现了Bug也只能忍受漫长的等待修正Bug的时间。Bug的出现,往往是对操作系统(包括Linux)的错误理解和使用,而不是操作系统本身的纯代码Bug或基本设计错误。Linux的优点就在于其

15、源码是公开的,并有很好的注释和完整的文档说明,从而也就拥了控制与解决一切问题的能力基础。 当然,嵌入式Linux也有它的不足。例如,它很占内存,尽管不比一些商业竞争者的情况坏。一般可以通过削减一些不必要的功能来改善。但这样做也有可能得不偿失,因为很可能会产生比较严重的Bug。 缺乏商业级的调试工具,如WindRiver公司的Tornado IDE开发环境。调试仍然是以打印语句printk()为主;低等级、内核级的调试工具仍然不是很好用;内核调试器kgdb会使人感到很不适应,而常要重新启动等等。,大量的高级程序设计语言已移植到Linux系统上,Linux还有许多独到之处: 它的源代码几乎全部都是

16、开放的。 它可以运行在许多硬件平台上。 它不仅可以运行许多自由发布的应用软件,还可以运行许多商品化的应用软件。目前有越来越多的应用程序厂商(如Oracle、Infomix、Sybase、IBM等)专持Linux。 强大的网络功能。Linux诞生、成长于网络,自身的网络功能相当强大,具有内置的TCPIP协议栈,可以提供FTP、Telnet、WWW等服务。 Linux系统能充分发挥硬件的功能,因而它比其他操作系统的运行效率更高,非常适用于嵌入式系统。因此,Linux以其特有的性能、功能和可用性有着广泛的应用前景。,3. 1. 3 Linux的应用及发展,1.开发模式 软件工程的发展,实现了软件的工

17、程化生产在经过详细的需求分析之后,进入设计阶段,然后是实现、测试等等,整个过程有严格的工作流程、时问限制和质量控制。这样的开发模式强调的是统一规划,集中管理。 自由软件的开发过程完全是另一种情形。一大批广泛分布于世界各地的软件爱好者,以互联网为纽带,同时参与一个软件开发项目。一个初步工作的软件雏形首先发布出来,然后大家同时开始工作,分别结合自己的实际经验和需要,寻找软件中的漏洞,提出改进意见,发布在互联网上,很快,发现了漏洞,提出改进方案,给出补丁。经过分头修整,这个软件好像滚雪球一样,以很快的速度不断完善。在这样的开发模式中,程序员是独立的实体,他们大多是用业余时间来为自由软件服务的,没有工

18、作任务的压力,创作性工作带来的成就感是他们最大的动力。这样的开发模式称为“巴扎(Bazaar)”模式。同样,这种开发模式下,软件以并行排错、分头发展的方式快速演进,比传统的模式更能调动程序员的工作热情,软件的开发速度以及软件的质量都有可靠的保证。,自由软件的出现,改变了传统的以公司为主体的封闭的软件开发模式。采用了开放和协作的开发模式,无偿提供源代码,容许任何人取得、修改和重新发布自由软件的源代码。这种发模式激发了世界各地的软件开发人员的积极性和创造热情,大量软件开发人员投入到了自由软件的开发中。软件开发人员的集体智慧得到充分发挥,大大减少了不必要的重复劳动,并使自由软件的漏洞能得到及时发现和

19、克服。任何一家公司都不可能投入如此强大的人力去开发和检验商品化软件。这种开发模式使自由软件具有强大的生命力。,2内核版本,为了确保看似无序的市集开发过程能够有序地进行,自由软件一般都必须采取强有力的版本控制措施。 Linux内核采用的是双树系统。一棵树是稳定树,主要用于发行;另一棵树是非稳定树或者开发树,用于产品开发、改进。 源代码版本序号的形式为x.yy.zz。对于稳定树来说,yy是偶数,表示是一个相对稳定、已经发行的版本;对于开发树来说,YY是比相应稳定树大1的奇数,表示还在开发中,目前还不太稳定或者在运行中可能出现比较大的问题的版本。其中x介于0到9之间,而yy、zz则介于0到99之间。

20、通常数字愈高便说明版本愈新。一些版本号后面有时会见到pNN的字样,NN是020之间的数字。它代表对某一版的内核“打补丁”或修订的次数。如099p15,代表这是对版本099的内核的第15次修订。,Linux的内核基本上只有一种来源,那就是由Linus主持开发和维护的内核版本。但是有很多公司在发行Linux操作系统不同的发行版(Distribution),如Red Hat等等。虽然不同的发行版本中所采用的内核在版本上有所不同,但其来源基本一致。各发行版的不同之处一般表现在安装程序、安装界面、软件包的多少、软件包的安装和管理方式等方面,在特殊情况下也有对内核代码稍作修改的(如汉化)。不同的发行版由不

21、同的发行商提供服务。 Linus正在率领分布在世界各地的Linux内核开发队伍完善他们的作品。Linux内核2.x版本充分显示了Linux开发队伍非凡的创造力和市集开发模式的价值。Linux核心开发者的名单记录在文件usrsrclinuxCREDITS中。这些人都是精于开发的高手。此外,还有许多志愿参加测试工作并发现系统问题的人,有时他们甚至给出了正确的代码,但是这些志愿者没有包括在CREDITS中。正是这些人,保证了Linux具有稳定可靠的性能。 事实上,Unix开始发展时,也采用了类似的开发模式。这种开发模式使得Unix的安全漏洞比其他操作系统解决得更彻底。从充分发挥开发人员的集体智慧这一

22、点看,采用这种开发模式无疑是一大进步。,3Linux应用,(1)Linux在大型服务器上的应用 Linux在企业化平台上的应用至少包括:电子商务、网络以及相关服务、企业内部管理协调应用、信息数据库应用。这些应用的共同特点就是需要高性能的大型高端服务器,并具有高性能的网络设施。而操作系统所担任的职责是在保证系统运行绝对安全可靠的情况下,充分发挥出大型服务器的潜能。 Linux最初出现在台式个人机上,并不是为大型服务器所设计。所以Linux设计时没有考虑到大型服务器的硬件结构特点。 (2) Linux在桌面端的应用 Linux在桌面端的应用至少包括:网络客户端、个人机、手提笔记本电脑。这些应用的特

23、点是计算量比较小,网络要求不高,但要求功能多样化,使用简单方便,界面美观,且程序加载方便。这样,对操作系统的要求就是功能多样,节省资源,界面方便美观,并且程序轻便,容易安装和卸载。 Linux在桌面端的应用一直是广大Linux爱好者、支持者最为关心的话题。让Linux在桌面端超越Windows几乎是每个Linux爱好者的梦想。,(3) Linux在嵌入式环境的应用,嵌入式技术具有广阔的应用前景,它可以渗透于人们生活和工作中的诸多领域。 嵌入式应用对操作系统的要求主要是:功能专一高效,高度节约资源,启动速度快,有些系统需要实时性。Linux的特点使得它天生就是一个适合于嵌入式开发和应用的操作系统

24、。 *Linux的内核精简而高效。与微软公司的Windows操作系统或者普通的Unix系统不同,Linux内核的核心部分小到一张软盘就可以装下。再加上对不需要功能的裁剪,Linux内核完全可以小到100 KB以下。 *Linux具有非常好的网络性能。 *Linux的可修改性强。由于Linux是一个代码完全公开的操作系统,任何人都可以对其代码进行修改;并且Linux的模块性比较强,也便于开发人员进行删减和修改。 *Linux支持多种体系结构。在Linux代码中,能看到汇编部分具有若干个版本。其中,每个版本适合一种相应的体系结构。在实时性方面,Linux虽然本身不具有实时性,但出现了一些基于Lin

25、ux进行修改的实时操作系统,其中最著名的是RTLinux。,(4) 国内应用状况,Linux在国内的推广比国外晚了几年,近年来有更多的软件爱好者开始了Linux的学习、应用和研究开发;同时,许多大学还把它作为操作系统课程实验的内容,这些都为Linux在中国的推广使用奠定了基础。 目前国内较有影响的推广项目是1997年6月17日在国家经济信息中心网上建立的自由软件协会站点,其网址是 国内也出现了多家Linux发行商,推出多种汉化的Linux版本,如BluePoint LinuxXterm Linux、Flag Linux等等,同时也提供系统集成、技术支持等服务。 总的来讲,国内Linux发展还处

26、于一个比较低的层次,初级入门用户很多,实际应用用户少,而从事自由软件开发的人就更少了。国内自由软件项目的发展情况可以参看Linux源代码学习小组的网站()和Skyeye开源项目网站()。,4发展方向,Linux内核本身的发展方向主要是硬件支持、嵌入式系统和分布式系统三个方面。 提供更多高性能的硬件驱动程序,让更新、更好的硬件迅速在Linux系统下工作,是Linux普及和广泛应用的基础。 随着以计算技术、通信技术为主体的信息技术的快速发展和Internet的广泛应用,嵌入式软件成为软件业的新热点。同时,近年来Internet发展迅速,嵌入式设备有了上网需求。 分布式系

27、统是当前操作系统发展的另一个重要领域。以Linux内核为基础,按照自由软件开发模式,发展高性能的自由分布式操作系统,是操作系统发展的必然趋势。 此外,Linux上的桌面系统、应用软件,尤其是软件开发工具也是Linux发展的重要方面。桌面系统直接关系到Linux界面的友好性、易用性。应用软件关系到系统的可用性,而在自由软件开发模式当中引入软件工程新技术和成功经验,有助于快速开发Linux平台上的应用软件。,3. 2 Linux的内核,内核(Kernel)是操作系统的内部核心程序,它向外部提供了对计算机设备的核心管理调用。操作系统的代码分为以下两部分: 内核所在的地址空间称做内核空间。 外部管理程

28、序与用户进程所占据的地址空间称为外部空间。 通常,一个程序会跨越两个空间。当执行到内核空间的一段代码时,称程序处于内核态而当程序执行到外部空间代码时,称程序处于用户态。 单一内核操作系统中所有的系统相关功能都被封装在内核中。程序只有通过一套称做系统调用(System Call)的界面访问内核结构。近些年来,微内核(Micro Kernel)结构逐渐流行起来,成为操作系统的主要潮流。 在微内核结构中,操作系统的内核只需要提供最基本、最核心的一部分操作(例如创建和删除任务、内存管理、中断管理等)即可,而其他管理程序(如文件系统、网络协议栈等)则可能放在内核以外。这些外部程序可以独立运行,并对外部用

29、户程序提供操作系统服务,服务之间使用进程问通信机制(IPC)进行交互。,微内核结构使操作系统具有良好的灵活性,它有许多优点: *内核本身小而且简单,易于理解,易于维护。 * 各种特殊的模块(如文件系统等)、设备驱动乃至中断处理程序,都可以作为独立的进程开发,既简单又容易调试,并且容易在其他环境下模拟。这样,就为整个系统的开发提供了一条渐进的开发途径。 *系统的配置也变得更方便灵活。从商业的角度,还可以把内核和各种服务进程模块或动态链接库分别销售,让用户根据具体需要选购;也有利于软件开发商们开发和提供各种第三方软件包。可裁减性(Scalability)较好。 *微内核天生就是可抢占的。由于微内核

30、很小,所以CPU在内核中运行的时间十分短暂。这样,基本上就不存在因为CPU在内核中运行而不可抢占的问题了。可以说许多嵌入式操作系统之所以能宣称“可抢占”,就是因为采用了微内核结构。,Linux系统恰恰使用了单一内核结构。这是由于Linux是一个实用主义的操作系统。比起结构的清晰,开发者更加注重功能的强大和高效率的代码。于是,他们将大量的精力花在优化代码上,而这样的全局性优化必然以损失结构精炼作为代价,导致Linux中的每个部件都不能被轻易拆出,否则必然破坏整体效率。单一内核结构和微内核结构之间的区别如图3l所示。,内核空间,用户空间,虽然Linux是一个单一内核操作系统,但它可以动态装入和卸载

31、内核中的部分代码。Linux中将这样的代码段称为模块(ModuIe) 。 Linux并不支持用户态线程。 Linux的内核为非抢占式的(Nonpreemptive)。Linux并不是一个“硬”实时操作系统。 从Linux 2.0版起,其内核就对多处理器结构进行支持。但是,Linux中并没有针对SMP结构进行优化,就是说虽然有多个处理器,但所有内核代码还是顺序执行的,不可能并发运行。 在Linux中,内核包括进程管理、定时器、中断管理、内存管理、模块管理、虚拟文件系统接口、文件系统、设备驱动程序、进程间通信、网络管理、系统启动等程序。 Linux操作系统的内核稳定而高效,以独占的方式执行最地层任

32、务,保证其他程序的正常运行。它是整个操作系统的核心,具有独特的性质。,1.接口特色,在程序级,Linux系统提供标准的Unix函数库,一个在Linux下开发的应用程序,可以几乎不经过任何改动就可以在其他Unix系统下编译执行,完成同样的功能。 Linux系统对用户同时提供图形和文本界面,文本界面是shell接口,图形界面是X Window系统。在Linux下,Unix下的基本命令功能和使用方式都完全相同。 在X Window系统基础上,自由软件开发者为Linux开发了不少种类的桌面系统。在这样的环境下,用户几乎可以不再需要传统的文本用户界面,所有的操作系统都可以通过鼠标来完成,这样的 系统有方

33、便快捷的KDE(K Desktop Enviroment),基于CORBA组件技术,具有图形功能的GNOME(GNUs Network Object Model Enviroment)等。它们都遵循GPL,都处在告诉发展阶段,功能会更加完善。 桌面系统的发展,基于桌面系统的办公、家用软件的发展,将会使Linux操作系统的用户界面更加友好,Linux系统针对办公用户及普通家庭的普及工作也将具有更明显的竞争力和更美好的前景。,2.功能特色,Linux系统可以支持多种硬件设备。Linux系统下的驱动程序开发与windows系统相比要简单得多。最初的硬件设备驱动程序,都是由自由软件开发者们提供的,随着

34、linux系统的普及,越来越多的硬件厂商也开始提供设备驱动,这对于广大使用者无疑是又一个好消息。 Linux自身使用的专用的文件系统为Ext2,可以提供方便有效的文件共享及保护机制。同时,它可以通过虚拟文件系统的技术,支持包括微软公司操作系统所使用的FATl6、FAT32和NTFS等文件系统在内的几十种现有的文件系统。 Linux系统具有内置的TCPIP协议栈,可以提供各种高效的网络功能,包括基本的进程间通信、网络文件服务等。,3结构特征,Linux内核基本采用模块结构,单内核模式,这使得系统具有很高的运行效率,但系统的可扩展性及可移植性受到一定的影响。为了解决这个问题,Linux使用了附加模

35、块(Modules,也称为模组)技术。 引入动态的模块技术,使系统内核具有良好的动态可裁减性,但是,内核模块的引入也带来了对系统性能、内存利用和系统稳定性的一些影响,可动态装卸的模块需要系统增加额外的资源来记录、管理,而装入的内核模块与其他内核部分一样,具有相同的访问权限,差的内核模块会导致系统不稳定甚至崩溃,特别是一些恶意的内核模块可能对系统安全造成极大的威胁。 总的来讲,Linux内核基本采用模块式结构构造,同时加入动态的模块技术,在追求系统整体效率的同时,实现了内核的动态可裁减性。这样的结构,给系统移植带来一定的负面影响。,3.2.2进程管理,1进程的特性 一般来说,Linux系统中的进

36、程都具备下列要素: *有一段程序供其执行,就好像一场戏要有剧本一样。这段程序不一定是进程所专有,可以与其他进程共用,就好像不同剧团的许多场演出可以共用一个剧本一样。 *有起码的“私有财产”,这就是进程专用的系统堆栈空间。 *有“户口”,这就是在内核中的一个“进程控制块”。有了这个数据结构,进程才能成为内核调度的一个基本单位来接受内核的调度。同时,这个结构又是进程的“财产登记卡”,记录着进程所占用的各项资源。 *有独立的存储空间,意味着拥有专有的用户空间;进一步,还意味着除上述的系统空间堆栈外还有其专用的用户空间堆栈。系统空间是不能独立的,任何进程都不可能直接(不通过系统调用)改变系统空间的内容

37、。 这4条都是必要条件,缺少其中任何一条都不能称其为“进程”。如果只具备了前面3条而缺第4条,则称为“线程”。特别地,如果完全没有用户空间,就称为“内核线程”(kernelThread);而如果共享用户空间,则称为“用户线程”。,进程具有的3个重要特性:,*独立性。进程是系统中独立存在的实体,它可以拥有自己独立的资源。在未经过进程本身允许的情况下,其他进程不能访问这些资源。这一点上与线程有很大不同。线程是共享资源的程序实体,创建一个线程所花费的系统开销要比创建一个进程小得多。 *动态性。进程与程序的区别在于,程序只是一个静态的指令集合,而进程是一个正在系统中活动的指令集合。在进程中加入了时间的

38、概念。进程具有自己的生命周期和各种不同的状态,这些概念在程序中都是不具备的。 *并发性。若干个进程可以在单处理器状态上并发执行。注意并发性(Concurrency)和多处理器并行(Parallel)是两个不同的概念。,2 进程的组成,在Linux中,进程以进程号PID(Process ID)作为标识。任何对进程进行的操作都要给予其相应的PID号。每个进程都属于一个用户,进程要配备其所属的用户编号UID。此外,每个进程都属于多个用户组,所以进程还要配备其归属的用户组编号GID的数组。 进程运行的环境称为进程上下文。Linux中进程的上下文由进程控制块PCB(ProcessControl Bloc

39、k)、正文段、数据段以及用户堆栈组成。其中,正文段存放该进程的可执代码,数据段存放进程中静态产生的数据结构,而PCB包括进程的编号、状态、优先级以及正文段和数据段中数据分布的大概情况。 一个称做进程表(Process Table)的链表结构将系统中所有的PCB块联系起来,如图3-2所示P68。,3 进程的状态和调度,进程是一个动态的实体,所以它是有生命的。从创建到消亡,是一个进程的整个生命周期。在这个周期中,进程可能会经历各种不同的状态。一般来说,所有进程都要经历以下3种状态: *就绪态。指进程已经获得所有所需的其他资源,并正在申请处理器资源,准备开始运行。这种情况下,称进程处于就绪态。 *阻

40、塞态。指进程因为需要等待所需资源而放弃处理器,或者进程本不拥有处理器,且其他资源也没有满足,从而即使得到处理器资源也不能开始运行。这种情况下,称进程处于阻塞态。阻塞状态又称休眠状态或者等待状态。 *运行态。进程得到了处理器,并不需要等待其他任何资源,正在执行的状态,称之为运行态。只有在运行态时,进程才可以使用所申请到的资源。,Linux将各种状态进行了重新组织,Linux进程的几个状态: *RUNNING:正在运行或者在就绪队列中等待运行的进程。也就是上面提到的运行态和就绪态进程的综合。一个进程处于RUNNING状态,并不代表它一定在被执行。由于在多任务系统中,各个就绪进程需要并发执行,所以在

41、某个特定时刻,这些处于RUNNING状态的进程之中,只有一个能够得到处理器,而其他进程必须在一个就绪队列中等待。 *UNINTERRUPTABLE:不可中断阻塞状态。处于这种状态的进程正在等待队列中,当资源有效时,可由操作系统进行唤醒;否则,将一直处于等待状态。 *INTERRUPTABLE:可中断阻塞状态。与不可中断阻塞状态一样,处于这种状态的进程在等待队列中,当资源有效时,可以由操作系统进行唤醒。与不可中断阻塞状态有所不同的是,处于此状态中的进程亦可被其他进程的信号唤醒。 *STOPPED:挂起状态。进程被暂停,需要通过其他进程的信号才能被唤醒。导致这种状态的原因有两种。其一是受到了相关信

42、号(SIGSOP、SIGSTP、SIGTTIN或SIGTTOU)的反应;其二是受到父进程ptrace调用的控制,而暂时将处理器交给控制进程 *ZOMBIE:僵尸状态。表示进程结束但尚未消亡的一种状态。此时进程已经结束运行并释放大部分资源,但尚未释放进程控制块。,调度程序用来实现进程状态之间的转换。用户进程由fork()系统调用实现。获得处理器而正在运行的进程若申请不到某个资源,则调用sleep()进行休眠。进程执行系统调用exit()或收到外部的杀死进程信号SIG_KILL时,进程状态变为ZOMBIE,释放所申请资源。同时启动schedule()把处理器分配给就绪队列中其他进程。,在多进程的操

43、作系统中,进程调度是一个全局性、关键性的问题,它对系统的总体设计、系统的实现、功能设置以及各方面的性能都有决定性的影响。根据调度结果所作的进程切换的速度,也是衡量一个操作系统性能的重要指标。 进程调度算法可采用先进先出算法(FIFO)或轮转法(Round Robin),分实时和非实时两种形式。实际上,未经改造的linux很难实现“实时”。若采用Linux的轮转法,当时间片到时(10ms的整数倍),由时钟中断触发,引起新一轮调度,把当前进程挂到就绪队列队尾。在schedule()中有一个goodness()函数,可以用来保证实时的进程可以得到优先调用。然而这只是调用上优先,事实上在内核态下,实时

44、进程并不能对普通进程进行抢占。所以linux中实时并不是真正意义上的实时。,4 进程间的关系,如图所示:父进程PCB中的指针p_cptr指向最近创建的一个子进程的PCB块,而每个子进程PCB中的指针p_pptr都指向其父进程的PCB块。每个子进程PCB块中的p_osptr指针都指向其父进程创建的上一个子进程PCB;反之,除了最新的子进程外,每个子进程PCB块中的p_ysptr都指向其父进程所创建的后一个子进程PCB。这样,同一个父进程的子进程们就按年龄”顺序构成了一个双向链表,而父进程则可以通过其p_cptr指针,从最新创建的子进程开始,依次访问到其每一个子进程。 系统启动时,自行创建了0号进

45、程,其所运行的代码是init_task()函数。该进程的作用是作为一切其他进程的父进程。 linux为了创建进程运行新的程序,提供了execve()系统调用。,5 中断处理与定时器,中断是现代操作系统中的重要功能模块之一。中断与硬件系统结合紧密,同时又对上层提供了良好的界面,是控制硬件相关操作的重要手段。所以,在现代所有操作系统的编写中,都大量使用了中断处理机制。 linux将中断执行一分为二:Top half(前半部分)和Bottom half(后半部分)。其中,Top half为一些重要的、与硬件设备紧密相关的程序,这些程序一定要关中断执行;而Bottom half中为其余的一些处理程序,

46、这些程序都是对内存进行操作,不怕被打断。当系统进入中断处理状态时,首先关中断执行Top half。Top half的程序一般都是从硬件获取数据,并不处理,而是直接写入内存缓冲区中。这样,Top half的执行速度很快。在Top half结束后,将中断打开,继续执行Bottom half中的处理程序。 前半部分是必须立即执行,一般是在关中断条件下执行的,并且必须是对每次请求都单独执行的。而后半部分,是可以稍后在开中断条件下执行的,并且往往可以将若干次中断服务中剩下来的部分合并起来执行。,6 系统调用,系统调用(system call)是Linux中从用户态进入内核态的惟一途径。Linux使用了中

47、断的方法来实现系统调用。 在Linux中,当进程需要进行系统凋用时,必须以c语言函数的形式写一句系统调用命令。 Linux中,处于用户态的程序称作进程,而处于内核态的指令称为任务(Task)。进程具有并发性,而任务不具有并发性,所以说Linux具有一个非抢占式的内核。,7 进程间互斥,在并发的情况下,要对这些资源进行必要的保护,防止多个进程对资源进行非串行性操作,导致数据的损坏。 原子操作指一系列基本操作组成的操作序列,其中不可被打断执行。 可串行性是数据库中广泛使用的一种正确标准。当事务交叉执行其操作,产生的结果与它们串行执行的结果一致时,这些事务便称为可串行性的。 在单处理器情况下,用关中

48、断的方法可以实现原子操作。然而在多处理器SMP的情下,关中断的方法就无法对临界区进行保护了。于是,Linux中引入自旋锁的机制。 自旋锁(Spinlock)就是在一个密封的循环中坚持反复尝试夺取一个资源(一把锁),直到成功为止。,8 进程间通信,用户态进程间处于并发状态。为了协调进程的运行,需要实现进程之间通信的机制。在Linux中,进程间通信有以下几种方法: *管道机制。该机制最适用于解决生产者消费者问题。管道是一种在进程之间单向流动数据的结构。 *先进先出(FIFO)机制。管道机制的最大缺点是不能由多个进程共享,除非此管道为这些进程共同的祖先所创建。为了解决这个问题,Linux中引入了FI

49、FO机制(又称为命名管道)。FIFO指一个文件,它可以被所有进程所共享。但是FIFO与一般文件不同,它还使用了内核中的缓冲区,所以在效率上要比一般共享文件快得多。 *IPC机制。IPC是Inter Process Communication的缩写形式。它包含一系列系统调用,允许用户态进程通过信号量进行同步,向其他进程发消息,并且可以与其他程共享一块内存空间。IPC资源包括信号量、消息队列和共享内存几种。,3.2.3存储管理,计算机CPU的速度越来越快,性能越来越高。但内存速度方面的增长却远落于CPU的发展,成为计算机速度和性能进一步提高的瓶颈。 1存储管理的任务 存储管理是Linux中负责管理

50、内存的模块。存储管理的任务有以下几点: 屏蔽各种硬件的内存结构,并向上层返回统一的访问界面。 解决多进程状态下内存不足的问题,按需调页。随着硬件的发展,内存的增大,软件也相应地向着大规模方向发展。 阻止进程肆意访问其他进程的地址空间和内核地址空间。 为进程中通信所需要的共享内存提供必要的基础。,2虚拟内存 虚拟内存是现代操作系统的重要特征。对于一个多进程的操作系统来说,每个进程都要占据自己惟一的内存地址空间。虚拟内存的基本原理是将内存中一部分近期不需要的内容移出到外存上,从而让出一块内存空间,以供其他需要的进程使用。当要访问到那些已经被调出到外存的数据时(称为访问失效),存储管理需要将内存中一

51、部分不常被访问的数据调出,让出一块空间以供需要的数据调入内存。 3页面模式 页面(Page)为存储管理中调入调出的基本单位。在存储管理中,将内存划分为长度相等的页面。Linux将每个用户进程4GB长度的虚拟内存划分成固定大小的页面。其中,03GB是用户态空间,由各进程独占;34GB是内核态空间,由所有进程共享;但只有内核态的进程才能访问。,4按需调页 当进程访问到某个虚存地址,却发现该地址所对应的物理页面已经被换出内存时,系统将会自动产生一个硬件中断,即缺页中断。在中断产生后,系统会自动调用相应中断处理程序,来将所需的页面从外存调人,或干脆新建一个空白页面。这个过程就叫做按需调页。 5对 换

52、对于虚拟内存页面来说,总是要将其改动过的内容写回到外存中,才能够将其丢弃。一个被更改过的内存页面,但还没有将其内容写到外存中,就称之为“脏页面”(Dirty Page)。在换入页面时,首先考虑的肯定是将那些“干净的”页面直接丢弃,然后将外存数据写进来,因为这样并不会破坏数据的完整性。然而这是一个矛盾,内存的调用者希望尽可能少地进行外存的刷新,这样使得内存中“脏”页面不断增加,而换入程序又希望尽可能多一些“干净”页面,以便它们可以很方便地将数据调入。于是,收拾垃圾的工作就由一个称作“对换”(Swap)的程序来完成。,3.2.4 文件系统管理,支持多种不同类型的文件系统是Linux操作系统的一大特

53、色。目前支持的有ext、ext2、cramfs、is09660、ntfs、msdos、vfat、proc、romfs、nfs等。每一种文件系统都有自己的组织结构和文件操作函数,相互之间差别很大。Linux对上述文件系统的支持是通过虚拟文件系统VFS的引入而实现的。 1文件系统 Linux操作系统支持的文件系统类型须由文件系统类型的注册链表描述。注册文件系统有两种途径,一种是在编译核心系统时确定,并在系统初始化时通过内嵌的函数调用向注册表登记;另一种则利用Linux的模块特征,把某个文件系统当作一个模块。,2虚拟文件系统 VFS是物理文件系统与服务之间的一个接口层,对用户程序隐去各种不同文件系统

54、的实现细节,为用户程序提供一个统一、抽象、虚拟的文件系统界面。严格的说,VFS并不是一种实际的文件系统。它只存在于内存中,不存在于任何外存空间。VFS在系统启动时产生,在系统关闭时注销。VFS的作用就是屏蔽各类文件系统的差异,给用户、应用程序甚至Linux其他管理模块提供一个统一的界面。管理VFS数据结构的组成部分主要包括超级块和inode。 VFS使Linux同时安装、支持许多不同类型的文件系统成为可能。 VFS的功能包括: *记录可用的文件系统的类型; *将设备同对应的文件系统联系起来; *处理一些面向文件的通用操作。,3.嵌入式系统的存储 在嵌入式系统中,各种特殊的应用目的对存储设备提出

55、了各种各样的要求。Flash存储器以其安全性高、存储密度大、体积小、价格相对便宜等优点,成为首选存储器。 (1)直接访问Flash 自己编写Flash的驱动程序(即基本操作函数)。 (2)Flashdisk 有一些Flash存储设备上附带了控制电路,并且提供了IDE的接口。这些设备通常都是模拟了PC中的IDE之类设备的接口。大多数的嵌入式环境中都可以支持对这种接口的存储设备进行访问。 (3)专用于Flash的文件系统 例如JFFS等文件系统,目前已经比较成熟,并有了成功的应用。主要的思想就是根据Flash存储设备的特点,在设计文件系统的过程中就考虑了Flash的读、写特性。这样,就可以获得针对

56、Flash设备进行优化过的一个文件系统。,4文件系统类型 (1)ext2文件系统 这是专门为Linux设计的文件系统类型。每个文件系统由逻辑块的序列组成,一个逻辑盘空间一般划分为几个用途各不相同的部分,即引导块、超级块、inode区以及数据区。(2)cramfs文件系统 在嵌入式的环境之下,内存和外存资源都需要节约使用。如果用ramdisk方式使用文件系统,那么在系统开始运行之后,首先要把外存(Flash)上的映像文件解压缩到内存中,构造起 RAMDISK环境,才可以开始运行程序。 cramfs是一个压缩式的文件系统,它并不需要一次性地将文件系统中的所有内容都解压缩到内存中,而只是在系统需要访

57、问某个位置的数据时,马上计算出该数据在cramfs中的位置,将其实时地解压缩到内存之中,然后通过对内存的访问来获取文件系统中需要读取的数据。,(3)romfs文件系统 romfs是一种只读文件系统,占用系统资源也比较小。起初,设计它的目的是在启动盘等场合下,提供一个比普通文件系统更加节省空间的文件系统。 romfs中的文件组织方式比较有特色,非常简单。只需要采用mount命令将这个文件挂接到任何一个目录下,即可对这个romfs中的文件按照正常方式进行访问。 (4)日志文件系统 文件系统既然是用来管理和保存数据的,那么就必须尽量保证其中数据的完整性。在实际的工作环境中,可能会遇到相当多的意外情况

58、。 日志文件系统相对于普通文件系统,最主要的改变是增加了日志记录。有几种日志文件系统,如ext3、eiserFS、xfs、JFFS等。其中JFFS是专为Flash设备开发的日志文件系统,其他几种则没有专门的针对性。,(5)JFFS与JFFS2文件系统 2000年,Axis公司发布了其开发的日志式Flash文件系统(Journaling Flash File Sysrem,JFFS)。JFFS文件系统是开放源代码的文件系统,可以说是专门用于嵌入式Linux的。 2001年初,RedHat公司在此基础上推出了JFFS2文件系统。JFFS2也是针对嵌入式系统中的Flash存储器进行设计的。 缺陷:J

59、FFS并没有进行太多优化。它按照顺序,从第一个数据块开始腾出空间。如果第一块写满了有效数据,它会将这些数据后移,腾出第一块来作为空闲块。在极端情况下,效率会非常低。当然,这种方式也保证了Flash的每一块都可以得到相同的擦写次数,有利于提高整个Flash设备的使用寿命。,5.文件系统的目录结构,在嵌入式环境下的资源是非常有限的,所以目录树中的所有文件都应该是系统提供的功能所必需的文件。romfs文件系统目录结构基本上与普通Linux目录相同: bin和sbin目录存放的是可执行程序; dev目录存放的是设备文件; etc目录存放的是配置文件和启动脚本; 1ib目录下存放的是库文件; proc目录下面是系统信息; tmp、usr和var目录的功能也与Linux下的对应目录没有什么差别。,3.2.5 设备管理,Linux操作系统之所以能够被广大用户所接受,其原因之一是由于它对几乎所有市面上的设备都有良好的支持。 Linux下的驱动程序仅仅是为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论