走进Linux 操作系统


坚力量是软件工程师,因此多以实用性和效率为出发点,很多地方还考虑了工业规范和兼容性等因素,因此不同于教学性操作系统追求理论上的最先进性,linux系统内核最注重的问题是实用和效率。  下面我们简要归纳一下linux内核的特色。  第一,linux内核被设计成单巨内核(monolithic?)结构(相对微内核而言,微内核是一种功能更贴近硬件的核心软件,它一般仅仅包括初等内存管理、同步原语、程间通讯机制、i/o操作和中断管理,这样做有利于扩展性和移植性。但是微内核与诸如文件管理、设备驱动、虚拟内存管理、进程管理等其它上层模块之间需要有较高的通讯开销,所以目前多集中在理论教学领域,对工业应用效率难以保证。),因此效率高,紧凑性强。    第二, 2.6版本前linux内核是单线程结构——所谓但线程结构是说同一时间只有一个执行线程(内核中的执行程序)允许在内核中运行,不会被调度程序打断运行其它任务,这种内核被成为非抢占的,它的好处在于内核中没有并发任务(单处理器而言),因此避免了许多复杂的同步问题,但其不利影响是非抢占特性延迟了系统响应速度,新任务必须等待当前任务在内核执行退出才能获得运行机会。工业控制领域需要高响应速度,因此2.6版本后由于robert love等人的贡献,将抢占技术引入了linux内核,使得其变为内核抢占系统,当然付出的代价是同步操作进一步复杂化了。    第三,为了保证能方便地支持新设备、新功能,又不会无限扩大内核规模,linux系统对设备驱动或新文件系统等采用了模块化方式,用户在需要时可以现场动态加载,使用完毕可以动态卸载。同时对内核,用户也可以定制,选择适合自己的功能,将不需要的部分剔除出内核。这两种技术都保证了内核的紧凑性和扩展性。    第四,linux内核纯粹是一种被动调用服务对象,所谓被动是因为它为用户服务的唯一方式是用户通过系统调用来请求在内核空间运行某个函数。内核本身是一种函数和数据结构的集合,不存在运行的内核进程为用户服务(虽然linux的确存在一种被称为内核线程的进程,但它并不是用来服务于用户的,仅仅作为系统自身的服务目的)。    第五, linux内核的采用虚拟内存技术使得内存空间虚拟扩展到了4gb之多,其中0-3g属于用户空间,称为用户段,3g-4g属于用户空间,称为内核段。这样使得用户编写程序可以使用远远大于实际内存的存储空间。    第六, linux的文件系统最大特点是实现了一种抽象文件模型——vfs(虚拟文件系统),该文件系统属于unix风格。使用虚拟文件系统屏蔽了各种不同文件系统的内在差别,使得用户可以使用同样的方式访问各种不同格式的文件系统,可以毫无区别地在不同介质不同格式的文件系统之间使用vfs提供的统一接口交换数据。这种抽象为linux带来了无限活力。  第七, linux提供了一套很有效的延迟执行机制——下半部分,软中断,tasklet和2.6新引入的工作列队等,这些技术保证了系统可以针对任务的轻重缓急,更细粒度的选择执行时机。保证了系统运行时尽量在安全时间(不关中断)。    linux除了以上提到的特色外,还有许多其它突出特点,我们将在以后各期的介绍中有序地介绍。如果对上述特色有疑问的话,请别着急,后面的学习将为你解答。  linux 操作系统内核结构  linux内核虽然实现和unix系统有很大不同,但是其结构还基本保持和unix雷同,其中功能也和我们前面提到的操作系统内核要求大体一致。  请见下图    下面我们简要说明一下个模块之间的联系。    用户空间的任何程序如果需要使用内核提供的服务,都必须经过系统调用,因此系统调用层和内核中大多数模块都留有接口,它们或是用来控制系统服务属性(如sys_fnctl设置文件操作属性;sys_nice设置进程时间片),或是从内核提取数据(如sys_time获得由时间中断维护的系统计时),或请求内核分配资源(brk扩展进程堆内存)。  文件系统包含vfs和各种实际文件系统。vfs为实际文件系统抽象了统一接口,而实际文件系统提供自身具体实例操作方法。另外在linux中和unix一样设备被巧妙的归属为特殊文件,受文件系统抽象和管理,因此其操作方式和文件系统一致。文件系统将对设备的操作递交给实际的设备驱动处理。  linux中设备管理将设备被区分为块设备——可以随机访问,如磁盘——和字符设备——只能顺序访问,如键盘。字符设备结构简单,文件系统可将请求直接提交给字符设备驱动处理,但是对于块设备,由于频繁的随机访问需要反复进行磁盘寻址操作,这样会对系统载核的带来沉重负担,因此内核对块设备的请求必须加以整合,比如对请求排队、合并、然后有选择地派发给物理设备;另外读取设备时还需要在内存中进行缓冲磁盘块。因此在请求被提交给块设备前必须经过i/o层处理进行预处理,在磁盘块被读取后必须由i/o层进行块缓冲处理。  中断管理系统负责为设备服务,它相比轮询等方式节约了cpu周期,另外时钟中断还要负责更新系统时间,触发进程调度。  内存是系统中的核心资源之一,是数据存储和传递的必被条件,因此管理系统不但系统调用需要使用,而且几乎系统中所有模块都多多少少地需要使用内存管理系统的函数。文件系统、i/o系统用来缓冲数据都需要分配内存,进程管理中的进程数据存储,地址影射都需要内存,堆的增长也需要动态请求内存;还有就是进程通讯中的一个有效方法就是利用共享内存来实现的。  进程管理除了和内存管理和进程通讯有关外,也和文件系统有重要关联,因为进程资源中文件毫无疑问属于最重要的部分之一,因此进程管理系统也必须和文件系统交互。  其中个个模块不是孤立的,而是联系万千,对于其中奥秘,希望读者仔细咀嚼。

                                                                    linux 操作系统的文件构成     内核虽说是linux操作系统的精华所在,是其它程序赖以运行的基础,但是如果一个实用的操作系统仅仅只有内核,而在其上没有丰富、强大的系统程序和应用程序供用户使用,就好比大厦建好了,也通了电,但却没有电梯、电话和办公设备,用户仍然无法入住使用。因此linux操作系统的发行版除了带有内核以外,还带有大量的系统程序和应用程序,比如最新红帽子系统的发行版本句需要2-3张光盘,其中绝大部分是应用程序。     要想深入学习linux内核,首先需要能熟练使用linux操作系统,了解整个系统文件构成——正所谓,刨丁解牛,始见无非全牛者——由外至内的学习linux,再从内向外推敲;从感性深入理性,再由理性返回感性,才会获得最深刻的认识。内核的众多特点最终还是要反映到用户应用上的,所以先熟悉应用无疑会对内核学习有很大裨益。而且学习内核结构的一个重要目的就是推动我们更有效的使用linux操作系统,无论是从系统管理角度来说或是从程序开发角度上说,掌握内核级别的系统调用、资源分配、中断控制或进程调度等技术都是不凡的价值,可以帮助你有效开发和驾驭系统。     这节我们先在这里简要介绍一下linux系统的文件构成,将linux操作系统的外在全貌展现给大家。我们在系统启动后,进入系统所能观察到的就是一系列目录(使用ls或dir),认识这些目录构成是学习使用linux系统的第一步,下面我们就罗列出主要目录并简要描述各自内容。linux系统根目录/下包含包含:bin:该目录存放最常用的基本命令,比如拷贝命令cp、编辑命令vi、删除命令rm等。boot:该目录包含了系统启动需要的配置文件、内核(vmliuxz)和系统镜像(initrd….img)等。dev:该目录下存放的是linux中使用或未使用的外部设备文件(fd代表软盘,hd代表硬盘等),使用这些设备文件可以用操作文件的方式操作设备。     etc:该目录下包含了所有系统服务和系统管理使用的配置文件;比如系统日志服务的配置文件syslog.conf,系统用户密码文件passwd等     home:该目录下包含了除系统管理员外的所有用户的主目录,用户主目录一般以用户登陆帐号命名。     lib:该目录下包含了系统使用的动态连接库(*.so)和内核模块(在modules下)。     host+found:该目录包含了磁盘扫描检测到的文件碎片,如果你非法关机,那么下次启动时系统会进行磁盘扫描,将损坏的碎片存到该目录下。     mnt:该目录下包含用户动态挂载的文件系统。如果要使用光盘,u盘都一般应该将它们安装到该目录下的特定位置。     proc:该目录属于内存影射的一个虚拟目录,其中包含了许多系统现场数据,比如进程序数,中断情况,cpu信息等等,它其中的信息都是动态生成的,不在磁盘中存储。     root:该目录是系统管理员(root用户)的主目录。     sbin:该目录下包含系统管理员使用的系统管理命令,比如防火墙设置命令iptable,系统停机命令halt等   tmp:该目录下包含一些临时文件。   usr:该目录下一般来说包含系统发布时自带的程序(但具体放什么东西,并没有明确的要求),其中最值得说明的有三个子目录     /usr/src :linux内核源代码就存在这个目录     /usr/man :linux中命令的帮助文件     /usr/local : 新安装的应用软件一般默认在该目录下   var:该目录中存放着在不断扩充着的信息,比如日志文件。     以上就是linux文件系统的原始构成,熟悉它们是应用linux操作系统的前提,希望大家亲自打开各目录看看。搭建linux试验系统实例  进入后续章节讨论的内核前,我们先与读者一同从头构架一个试验操作系统。这样既有助大家熟悉linux操作系统的组成结构,也会在构建过程中学习介绍一些linux命令和使用技巧,加深理解linux操作系统的运作方式。  实验系统将在保证实用价值的基础上,尽量小巧。希望大家通过亲手构建系统的过程中,能消除对linux的恐惧感,更希望读者自己能使用裁减的系统,给自己带来成就感和学习热情。必备的基础知识   对于第一次接触linux的朋友,仅仅看下面的内容显然不能指望学会linux的操作方法和系统行为,建议你去找本系统一点的linux系统教程慢慢咀嚼吧。对于像系统管理员这种大牛,跳过下面内容吧,再高的就去看看新浪体育新闻什么的,别在这瞎转了:)。  搭建系统过程中将离不开敲击各种各样的命令,离不开执行大大小小的shell脚本。而最整个过程中重要的是理解系统的运行思路,一切活动的指导思想都要围绕系统运

COPYRIGHT(C) 2011 厦门永宏亚得机电科技有限公司版权所有(闽ICP备05025945号) ALL RIGHTS RESERVED?

电话: 0592-5190891 传真: 0592-5190720 E-Mail: E-mail:yade8895@163.com
地址: 厦门市海沧区兴港六里17号2607室 邮编:361009 联系人:翟先生