2.1 操作系统概述
1)操作系统的作用:操作系统能有效的组织和管理系统中的各种软、硬件资源,合理地组织计算机系统工作流程,控制程序的执行,并且向用户提供一个良好的工作环境和友好的接口。两个主要作用是通过资源管理器提高计算机系统的效率,改善人机界面为用户提供友好的工作环境。
2)操作系统的4个特征:并发性、共享性、虚拟性和不确定性。功能:处理机管理,采用多通道程序等技术将CPU的时间合理地分配给每个任务。主要包括进程控制、进程同步、进程通信和进程调度;文件管理,包括文件存储空间管理、目录管理、文件的读写管理和存取控制;存储管理;设备管理和作业管理。
3)操作系统的类型:批处理操作系统、分时操作系统、实时操作系统、网络操作系统、分布式操作系统、微机操作系统和嵌入式操作系统等。
2.2 处理机管理
处理机管理也称为进程管理,其核心是如何合理的分配处理机的时间,提高系统效率。
1) 基本概念
程序顺序执行时的主要特征:(1)顺序性。(2)封闭性。(3)可再现性。
2)进程的组成
进程是程序的一次执行。进程通常由程序、数据和进程控制块(PCB)组成。其中程序部分描述了进程需要完成的功能。数据部分包括程序执行时所需要的数据及工作区,这部分只能为一个进程所专用,是进程的可修改部分。进程控制块是进程存在的唯一标志。
3)进程的状态及其状态间的切换
(1)三态模型
进程一般有三种基本状态:运行、就绪和阻塞。
运行:当一个进程在处理机上运行时,称该进程处于运行状态。
就绪:一个进程获得了除处理机外的一切资源,一旦得到处理机即可运行,则称该进程处于就绪状态。
阻塞:也称等待或睡眠状态,一个进程正在等待某一事件发生而暂时停止运行,这时即使把处理机分配给该进程,它也无法运行,故称该进程处于阻塞状态。
(2)五态模型
引入新建态和终止态。新建态对应于进程刚刚被创建且没有被提交的状态,并等待系统完成创建进程的所有必要信息。因为创建进程分为两个阶段,第一个阶段为一个新进程创建必要的管理信息,第二个阶段让该进程进入就绪状态。由于有了新建态,操作系统可以根据系统的性能和内存容量的限制推迟新建态进程的提交。类似地,进程的终止也可分为两个阶段,第一个阶段等待操作系统进行善后处理,第二个阶段释放内存。
4)进程的控制
进程控制是指对系统中所有进程从创建到消亡的全过程实施有效的控制。其主要功能包括创建一个新进程,撤销一个已经运行完的进程,改变进程的状态,实现进程间的通信。进程控制是由操作系统内核中的原语实现的。
原语是指由若干条机器指令组成的、用于完成特定功能的程序段。特点是在执行时不能被分割,即原子操作要么都做,要么都不做。内核中包含的原语主要有进程控制原语、进程通信原语、资源管理原语以及其他原语。属于进程控制原语有进程创建原语、进程撤销原语、进程挂起原语、进程激活原语、进程阻塞原语以及进程唤醒原语等。
5)进程通信
(1) 同步与互斥
a)进程间的同步:指进程间完成一项任务时直接发生互相作用的关系。
b)进程间的互斥:在多道程序系统中,各进程可以共享各类资源,但有一些资源一次只能供一个进程使用,称为临界资源。进程间的互斥是指系统中各进程互斥使用临界资源。
c)临界区管理原则:有空即进,当无进程处于临界区时,允许进程进入临界区,并且只能在临界区运行有限的时间。无空则等,当有一个进程在临界区时,其他需要进入临界区的进程必须等待,以保证进程互斥的访问临界资源。有限等待,对要求访问临界资源的进程,应保证进程等待有限时间后进入临界区,以免陷入”饥饿“状态。让权等待,当进程不能进入自己的临界区时,应立即释放处理机,以免陷入”忙等“状态。
(2)信号量机制
信号量机制是一种有效的进程同步与互斥工具。主要有整型信号量、记录型信号量。
1)整型信号量与PV操作
信号量是一个整型变量,根据控制对象的不同被赋予不同的值。分为两类:
公有信号量。实现进程间的互斥,初值为1或资源的数目。
私有信号量。实现进程间的同步,初值为0或某个正数。
信号量S的物理意义:若S大于等于0,表示某资源的可用数;若S<0,则其绝对值表示阻塞队列中等待该资源的进程数。
PV操作是实现进程同步与互斥的常用方法。P操作和V操作是低级通信原语,在执行期间不可分割。其中,P操作表示申请一个资源,V操作表示释放一个资源。
P操作的定义:S:=S-1,若S大于等于0,则执行P操作的进程继续执行;若S<0,则置该进程为阻塞状态,并将其插入阻塞队列。P操作可表示如下,其中Semaphore表示所定义的变量是信号量:
1: Produre P(Var S:Semaphore);
2: Begin
3: S:=S-1;
4: If S < 0 then W(S) // 执行P操作的进程插入等待队列
5: End;
V操作的定义:S:=S+1,若S>0,则执行V操作的进程继续执行;若S小于等于0,则从阻塞状态唤醒一个进程,并将其插入就绪队列,然后执行V操作的进程继续。表示如下:
1: Procedure C(Var S:Semaphore);
2: Begin
3: S:=S+1;
4: If S <= 0 then R(S) // 从阻塞队列唤醒一个进程
5: End;
2)利用PV操作实现进程的互斥
令信号量mutex的初值为1,进入临界区时执行P操作,推出临界区时执行V操作,这样,进入临界区的代码段如下:
1: P(mutex)
2: 临界区
3: V(mutex)
一个例子:两个并发执行的程序段完成交通流量的统计,其中P1识别通过的车辆数,P2定时将计数值清0.用PV操作实现的交通流量统计程序如下:
1: P1
2: f 有车通过 then
3: begin
4: P(mutex)
5: COUNT := COUNT + 1; // 临界区
6: V(mutex);
7: end
8: GOTO L1;
1: P2
2: begin
3: P(mutex)
4: PRINT COUNT; // 临界区
5: COUNT := 0;
6: V(mutex);
7: end
8: GOTO L2;
3)利用PV操作实现进程的同步
进程的同步是由于进程间的合作而引起的相互制约问题。实现进程同步的一种方法是将一个信号量与消息相联系,当信号量的值为0时表示希望的消息未产生,否则表示希望的消息已经到来。
例:生产者进程P1不断的生产产品送入缓冲去,消费者进程P2不断的从缓冲区中取出产品消费。为了实现进程P1与P2之间的同步问题,需要设置一个信号量S1,表示缓存区是否空闲,初值为1,表示可以将产品送入缓冲区;设置另一个信号量S2,表示缓冲区有无产品,初值为0,P1和P2的同步过程如下:
进程P1
L1: 生产一个产品
P(S1)
产品送缓冲区
V(S2)
GOTO:L1
进程P2
L2: 生产一个产品
P(S2)
从缓冲区取一个产品
V(S1)
消费
GOTO:L2
(3) 高级通信