7.3 操作系统的组成
现代操作系统至少有以下功能:
存储管理,进程管理,设备管理,文件管理
还有一个用户界面,负责操作系统与外界通信。
7.3.1 用户界面
每个操作系统都有用户界面,即是用来接收用户的输入,并向操作系统解释这些请求的程序。
用户界面在一些操作系统(Unix,Linux)中称为命令解释程序(Shell)。在另一些操作系统(Windows)中,被称为窗口。
7.3.2 内存管理
内存管理是操作系统的重要职责。
操作系统按照内存管理方式分为两类:
- 单道程序:大多数内存装载单一的程序,一部分装载操作系统。
- 多道程序:同一时刻可以装入多个程序,并且能够同时被执行,CPU轮流为其服务。

虚拟内存
操作系统使用磁盘上的文件或者分区,和物理内存一起,共同构成内存系统。磁盘上的文件或者分区作为虚拟内存使用。虚拟内存的大小一般为物理内存的1-2倍。
在需要时,虚拟内存的数据被加载到内存中,以备CPU使用,同时把一部分数据从内存中移动到虚拟内存中。所以虚拟内存文件也称为交换文件。
7.3.3 进程管理
基本术语
程序(program):是由程序员编写的一组稳定的指令,存在磁盘上,它可能会也可能不会成为作业。
作业(job):从一个程序被选中执行,到其运行结束并再次成为一个程序的这段过程中,该程序称为作业。
进程(process):是一个运行中的程序,该程序开始运行但还未结束。进程是驻留在内存中运行的作业。
线程(thread):是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。
每个作业都是程序,但不是所有程序都是作业。
每个进程都是作业,但不是所有作业都是进程。分时:资源可以被不同的作业分享,每个作业可以分到一段时间来使用资源。
调度:给不同的程序分配资源并决定哪一个程序什么时候使用哪一种资源。
程序状态分界图
说明:
一个程序当被操作系统选中时就成为作业,并且成为保持状态。
当内存整体或部分地载入这个程序时,作业成为进程,并且转成就绪状态。
当CPU运行它时,程序转成运行状态。
运行状态的三种结果:
- 进程运行直到它需要I/O资源,则进入等待状态,直到I/O结束,回到就绪状态。
- 进程耗尽所分配的时间片,则进入就绪状态。
- 进程终止,则退出内存,成为作业,进入终止状态。
调度器
进程管理使用两个调度器,实现将作业或进程从一个状态改变为另一个状态。
- 作业调度器:将一个作业从保持状态转入就绪状态,或是从运行状态转入终止状态。

- 进程调度器:进程调度器将一个进程在就绪,运行和等待的状态间转换。
队列
操作系统在运行中,会有很多的作业和进程相互竞争计算机资源。
为了处理多个进程和作业,进程管理器使用队列进行协调。并根据一定策略选择下一个作业或进程来执行。
进程同步
所有的进程管理思想都是让拥有不同资源的不同进程同步。
因为只要资源可以被多个用户(进程)同时使用,那么它就有可能产生两种有问题的状态:死锁和饿死。
死锁
死锁发生在操作系统允许一个进程运行,而不检查它所必需的资源是否全部准备好,是否允许这个进程占有资源直到它不需要为止。
操作系统没有对进程的资源进行限制时将会发生死锁。
另一个死锁的例子:在桥上的死锁
死锁发生需要4个必要条件:
互斥:一个资源只能被一个进程占有。 资源占有:一个进程占有一个资源,即使在获取其他资源之前无法使用它。 抢先:操作系统不能临时对资源重新分配。 循环等待:所有的进程和资源包含在一个循环里。饿死
饿死是一种与死锁相反的情况。发生在当操作系统对进程分配资源有太多限制的时候。

另一个饿死的例子:哲学家就餐问题(要同时使用两根筷子)

7.3.4 设备管理器
设备管理器负责访问输入/输出设备。
基本功能:
设备管理器不停地监视所有的输入/输出设备,以保证他们能够正常运行,还要指导哪个设备已经就绪,可以为下一个进程服务。
设备管理器为输入/输出设备维护一个或多个队列。
设备管理器控制用于访问输入/输出设备的不同策略。
7.3.5 文件管理器
文件管理器用来控制对文件的访问。
基本功能:
文件管理器控制文件的访问,只有那些获得允许的应用程序才能够访问,访问方式也可以不同。
文件管理器管理文件的命名、创建、删除和修改。
文件管理器管理文件怎样存储,存在哪里。
文件管理器负责归档和备份。