基本结构
图中⼼的硬件部分向操作系统提供
基本服务
。操作系统直接与硬件交互
,向程序提供公共服务
,并使他们同硬件特性隔离;
- 当我们把整个系统看成层的集合时,通常将操作系统成为
系统内核
,或简称内核。- 程序不依赖于其下⾯的硬件的,若程序对硬件没做什么假定的话,就容易把它们在不同硬件上运⾏的UNIX 系统之间迁移。⽐如,那些假定了机器字⻓的程序⽐起没假定机器字⻓的程序来就较难于搬到其它机器上。
- 外层的程序,是通过引⽤⼀组
明确定义的系统调⽤
⽽与内核交互
的。这些系统调⽤通知内核为调⽤程序做各种操作,并在内核与调⽤程序之间交换数据。其它应⽤程序
能在较低的程序层次之上构筑⽽成,因此它们存在于本图的最外层。⽐如,标准的 C 编译程序gcc 就处在本图的最外层;它引⽤C 预处理程序
、两次编译程序
、汇编程序
及装⼊程序
(称为连接—编译程序
),这些都是彼此分开的低层程序。- 虽然该图对应⽤程序只描绘了两个级别的层次,但⽤户能够对层次进⾏扩从,直到级别的数⽬适合于⾃⼰的需要。
- 系统调⽤类似C程序中普通的
函数调⽤
,⽽库把这些函数调⽤映射成进⼊操作系统所需要的源语
;- 然⽽,
汇编语⾔程序
可以不经过系统调⽤库
⽽直接引⽤系统调⽤
;- 程序常常使⽤像标准I/O库这样⼀些其它的
库程序
以提供对系统调⽤
的更⾼级的使⽤;- 由于在编译期间把这些库连接到程序上,库是⽤户程序的⼀部分;
内核主要成分:文件子系统、进程控制子系统
三个层次:用户、内核、硬件;
文件子系统
- 管理:分配⽂件空间,管理空闲空间,控制对⽂件的存取,以及为⽤户检索数据;
- 使用一个
文件缓冲机制
存储文件数据,缓冲机制调节在核⼼
与⼆级存储设备
之间的数据流;- 缓冲机制
同块 I/O 设备驱动程序交互作⽤
,以便启动往核⼼去的数据传送
及从核⼼的来的数据传送;
设备驱动
- 设备驱动程序是⽤来
控制外围设备
操作的核⼼模块;块 I/O 设备
是随机存取存储设备,或者说,它们的设备驱动程序似的它们的设备驱动程序使得它们对于系统的其它部分来说好像是随机存取存储设备。例如,⼀个磁带驱动程序可以允许核⼼把⼀个磁带装置
作为⼀个随机存取存储设备
看待。⽂件⼦系统
和可以在没有缓冲机制⼲预
的情况下直接与“ 原始” I/O 设备驱动程序交互作⽤。- 原始设备,有时也被成为字符设备,包括所有
⾮块设备
的设备;
进程控制子系统
- 负责
进程同步
、进程间通讯
,存储管理
及进程调度
;- 当要执⾏⼀个⽂件⽽把该
⽂件装⼊存储器
中时,⽂件⼦系统
与进程控制⼦系统
交互;
- 进程⼦系统在执⾏可执⾏⽂件之前,把它们
读到内存
中。输⼊输出存储管理模块控制存储分配
。在任何时刻,只要系统没有⾜够的屋⾥存储供所有进程使⽤,核⼼就在内存与⼆级存储之间对进程进⾏交换
,以便所有的进程都得到公平的执⾏机会;
调度程序
- 调度程序模块把
CPU 分配给进程
。该模块调度进程依次运⾏
,直到它们因等待资源⽽⾃愿放弃 CPU
,或者知道它们最近⼀次的运⾏时间超出⼀个时间量
,从⽽核⼼抢占它们。于是调度程序选择最⾼优先权
的合格进程投⼊运⾏;当原来的进程成为最⾼优先权的合格进程时,还会再次投⼊运⾏。- 进程间通信有⼏种形式,从时间的
异步软中断信号
到进程间消息的同步传输
,等等。本书中主要的讲的⽹络通信
,也是进程间通信的⼀种;
硬件控制
- 硬件控制负责处理
中断
及其与机器通信。类似磁盘
或终端
这样的设备可以在⼀个进程正在执⾏时中断 CPU。如果出现这种情况,在对中断服务完毕之后核⼼可以恢复被中断了的进程的执⾏。中断不是由特殊的进程服务的,⽽是由核⼼中的特殊函数服务
的。这些特殊函数是在当前运⾏的进程上下⽂
中被调⽤的。