Solaris10基础:UNIX/Linux基本结构

网络整理 - 06-30

    UNIX/Linux基本结构

  图绘出了UNIX系统的高层次的体系结构图中心的硬件部分向操作系统提供基本服务操作系统直接与硬件交互向程序提供公共服务并使它们同硬件特性隔离当我们把整个系统看成层的集合时通常将操作系统称为系统内核或简称内核此时强调的是它同用户程序的隔离因为程序是不依赖于其下面的硬件的所以如果程序对硬件没做什么假定的话就容易把它们在不同硬件上运行的UNIX系统之间迁移比如那些假定了机器字长的程序就比没假定机器字长的程序更难以搬到其他机器上外层的程序诸如shell及编辑程序(vi)是通过引用一组明确定义的系统调用而与内核交互的这些系统调用通知内核为调用程序做各种操作并在内核与调用程序之间交换数据图中出现的一些程序属于标准的系统配置就是大家所知道的命令但是由名为aout的程序所指示的用户自有程序也可以存在于这一层此处的aout是被C编译程序产生的可执行文件的标准名字其他应用程序能在较低的程序层次之上构筑而成因此它们存在于图的最外层比如标准的C编译程序cc就处在图的最外层它引用C预处理程序两次编译程序汇编程序及装入程序(称为连接编译程序)这些都是彼此分开的底层程序虽然图对应用程序只描绘了两个级别的层次但用户能够对层次进行扩充直到级别的数目适合于自己的需要确实为UNIX系统所偏爱的程序设计风格鼓励把现存程序组合起来去完成一个任务

  一大批提供了对系统的高层次看法的应用子程序及应用程序诸如shell编辑程序SCCS(Source Code Control System)及文档准备程序包等都逐渐变成了UNIX系统这一名称的同义语然而它们最终都使用由内核提供的底层服务并通过系统调用(System Call)的集合利用这些服务系统调用的集合及其实现系统调用的内部算法形成了内核的主体简言之内核提供了UNIX/Linux系统全部应用程序所依赖的服务并且内核定义了这些服务下面我们将进一步介绍内核对内核的体系结构提出一个总的看法勾画出它的基本概念和结构这将帮助读者更好地学习以后的内容

  图给出了内核的框图显示出了各种模块及它们之间的相互关系它特别指出了内核的两个主要成分左边的文件子系统和右边的进程控制子系统虽然实际上由于某些模块同其他模块的内部操作进行交互而使内核偏离该模型但该图仍可以作为观察内核的一个有用的逻辑观点在图中我们看到了三个层次用户内核及硬件系统调用与库接口体现了图中描绘的用户程序与内核间的边界系统调用看起来像C程序中普通的函数调用而库把这些函数调用映射成进入操作系统所需要的源语然而汇编语言程序可以不经过系统调用库而直接引用系统调用程序常常使用像标准I/O库这样一些其他的库程序以提供对系统调用的更高级的使用由于在编译期间把这些库连接到程序上因此以这里的观点来说这些库是用户程序的一部分
 

  

  图  UNIX系统的高层次的体系结构
 

  
 图  UNIX系统内核结构

  图把系统调用的集合分成与文件子系统交互作用的部分及与进程控制子系统交互作用的部分文件子系统管理文件其中包括分配文件空间管理空闲空间控制对文件的存取以及为用户检索数据进程通过一个特定的系统调用集合比如通过系统调用openclosereadwritestatchown及chmod等与文件子系统交互文件子系统使用一个缓冲机制存取文件数据缓冲机制调节在核心与二级存储 target=_blank>存储设备之间的数据流缓冲机制同块I/O设备驱动程序交互作用以便启动往核心去的数据传送及从核心来的数据传送设备驱动程序是用来控制外围设备操作的核心模块块I/O设备是随机存取存储设备或者说它们的设备驱动程序使得它们对于系统的其他部分来说好像是随机存取存储设备

  例如一个磁带驱动程序可以允许核心把一个磁带装置作为一个随机存取存储设备看待文件子系统可以在没有缓冲机制干预的情况下直接与原始I/O设备驱动程序交互作用原始设备有时也被称为字符设备包括所有非块设备进程控制子系统负责进程同步进程间通信存储管理及进程调度当要执行一个文件而把该文件装入存储器中时文件子系统与进程控制子系统交互进程子系统在执行可执行文件之前把它们读到内存中输入/输出存储管理模块控制存储分配

  在任何时刻只要系统没有足够的物理存储供所有进程使用核心就在内存与二级存储之间对进程进行交换以便所有的进程都得到公平的执行机会调度程序模块把CPU分配给进程该模块调度各进程依次运行直到它们因等待资源而自愿放弃CPU或者知道它们最近一次的运行时间超出一个时间量从而核心抢占它们于是调度程序选择最高优先权的合格进程投入运行当原来的进程成为最高优先权的合格进程时还会再次投入运行进程间通信有几种形式从时间的异步软中断信号到进程间消息的同步传输等