UNIX操作系统第二章

来源:互联网 发布:阿里云ecs快照服务 编辑:程序博客网 时间:2024/06/06 18:14

这一章主要描述了UNIX内核的体系结构。它的主要成分有两个:文件子系统和进程子系统。其中文件子系统是用来控制用户文件中数据的存储与索引的。进程子系统主要是负责进程同步、进程间通信、存储管理及进程调度。

UNIX操作系统的体系结构
文件和进程这两类实体是UNIX系统模型中的两个中心概念。图1给出了内核框架,给出了各模块及它们之间的相互关系。
这里写图片描述
图1

从内核框架图中,可以看出系统调用部分分别与文件子系统和进程控制子系统进行交互。其中,文件子系统管理文件,这包括分配文件空间,管理空闲空间,控制对文件存取以及为用户索引数据。而进程子控制系统主要负责进程同步、进程间通信、存储管理及进程调度。文件子系统与进程控制子系统有时需要进行交互,例如进程子系统在执行可执行文件之前,需要先把它们读到主存中。

文件子系统
一个文件的内部表示是由一个索引节点(inode)给出,索引节点描述了文件数据在磁盘上的布局,并且包含诸如文件所有者、存取许可权及存取时间等其他信息。每个文件都有一个索引节点,但是它可以有几个名字,且这几个名字都映射到该索引节点上。当进程使用名字访问文件时,内核每次分析文件名中的一个分量,检查该进程是否有权搜索路径中的目录,并且最终检索到该文件所对应的索引节点。

内核使用三张表:文件表、用户描述符表以及索引节点表来实现对文件存取,如图2。其中,文件表是一个全局核心结构,保存着文件中的字节偏移量以及存取权限。用户文件描述符表,内核为每个进程分配一个,它主要是标识着一个进程的所有打开文件。
这里写图片描述
图2

内核在逻辑级上只涉及文件系统,而不涉及磁盘,把每个文件系统都当作由一个逻辑设备号标识的逻辑设备。然后由磁盘驱动程序实现逻辑设备地址与物理设备地址之间的转换。一个文件系统由一个逻辑块序列组成,每个块都是由一定数目的连续字节组成。在一个文件系统中,每个逻辑块大小都是完全相同的,但是在不同的文件系统中,就有可能不一样。逻辑块大小对系统的性能是有影响的,大的逻辑块可以增加在磁盘与主存间的有效数据传送率,因为内核在每次磁盘操作中能传送较多的数据。但是这有可能导致存储空间的浪费。

一个文件系统的结构如图3所示。其中,引导块占据了文件系统的开头,包含了引导或初启操作系统作用的引导代码。虽然每个文件系统都有一个引导块,但是实际上只需要为引导系统提供一个引导块就行了。超级块主要描述了文件系统的状态。
这里写图片描述
图3

进程子系统

一个进程是一个程序的执行,它是由一系列有格式字节组成的,这些有格式字节被解释成正文、数据和栈区。在UNIX系统中,进程是被系统调用fork所创建的实体。除了0进程外,每个进程都是被另一个进程执行系统调用fork时创建的。0进程是在系统引导时被创建的,当它创建一个子进程之后就变成了对换进程。

在UNIX系统中,每个进程在内核进程表中都有一个表项,并且每个进程都分配一个u区,它包含仅被内核操纵的私有数据,如图4所示。其中每个进程表项指向一个本进程区表,本进程区表项又指向区表的表项。一个区是进程地址空间中连续的区域,如正文区、数据区及栈区等等。每个区表项描述了区的属性。内核通过这三个表可以实现不同进程对区的共享。例如,当一个进程加载一个可执行文件时,内核在释放该进程一直在使用的区之后,就为它重新分配新的区。或者当一个进程创建新子进程时,内核需要拷贝父进程的地址空间,这时可以允许父子进程对区进行共享,只有当必要时,才建立一个物理拷贝。
这里写图片描述
图4

相比与程序来说,进程是一个动态概念,随着进程的执行,进程的状态是不断改变的,各状态之间关系如图5所示。
这里写图片描述
图5