1.1操作系统的目标和作用
1. OS的目标
方便性:用户无需了解底层硬件,无需用0、1机器语言操作。(可以说不用手,用工具,进入石器时代了。)
有效性:CPU、I/O、存储等的管理专门、合理地被组织管理起来,提高资源的利用率。
可扩充性:扩充应用软件;适应硬件和体系结构发展,扩充底层管理功能模块等。
开放性:网络环境,遵循开放互联标准。
2.OS的作用
1) 作为用户与计算机硬件系统之间的接口
2)OS作为计算机系统资源的管理者
3)OS用作扩充机器
3. 单道批处理系统(Simple Batch Processing System)
特征:单道性、顺序性、自动性
优点:
l 一定程度解决人机矛盾,CPU与I/O速度矛盾;
l 提高了资源利用率和系统吞吐量;
l 算做OS的前身,但还不是现在所理解的OS;
4. 多道批处理系统
1)多道批处理系统的特征:
多道性
无序性:作业入内存由算法决定,不按提交顺序。入内存后顺序执行。
调度性:包括作业调度、进程调度
2)多道批处理系统的优缺点:
优点:
资源利用率高:CPU和内存利用率较高;
系统吞吐量大:单位时间内完成的工作总量大;
缺点:
平均周转时间长:短作业的周转时间显著增长;
无交互能力:整个作业完成后或中间出错时,才与用户交互,不利于调试和修改;
5.操作系统定义
操作系统是:一组控制和管理计算机硬件和软件资源,合理地对各类作业进行调度(多道),方便用户使用的程序的集合。
6.分时系统
分时系统的特征:
多路、独立、及时、交互
多路性:多个用户同时使用一台计算机,共享CPU和其他资源,充分利用系统资源
宏观上:是多个人同时使用一个CPU
微观上:多个人在不同时刻轮流使用CPU
独立性:用户感觉不到计算机为其他人服务,各用户独立操作,互不干扰。
及时性:通过时间片技术和轮转调度算法保证及时响应。
交互性:系统及时响应用户的请求,显著提高调试和修改程序的效率:缩短了周转时间。
7. 实时系统(Real-Time System)
实时系统是指:系统能及时(或即时)响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致地运行。
8.三大系统比较
1.3操作系统的基本特性
并发、共享 、虚拟、异步
1.4操作系统的主要功能
处理机管理功能(作业管理)
存储器管理功能
设备管理功能
文件管理功能
用户接口
2.1 进程的基本概念
1.
1)引入前趋图
描述进程执行前后关系的图
有向无循环图(DAG)
lPi结点:描述一个程序段、进程、或一条语句。
l有向边“→”:结点之间的偏序或前序关系
lPi→Pk,则Pi是Pk的直接前趋,Pk是Pi的直接后继。
2)程序顺序执行时的特征
(1) 顺序性
处理机的操作严格按程序规定顺序执行
(2) 封闭性
程序一旦开始执行,其计算结果不受外界因素影响。
(3) 可再现性
程序执行只要初始条件一样,不论如何停顿,重复执行多少次结果都一样。
4)并发程序执行时的特征
间断性、失去封闭性、结果不可再现性
2. 进程
1)进程的定义
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
2)进程的特征
①结构性特征,进程的根本——PCB
②动态性
l进程实质上是进程实体的一次有生命期的执行过程。程序只是静态的一组有序指令。
l进程最基本特征
③并发性
l多个进程实体同存于内存中,在一段时间内同时运行。
l有PCB的程序才能并发。
④独立性
⑤异步性
!区别进程与程序
¡动与静:
l进程是动态的,程序是静态的:程序是有序代码的集合;进程是程序的执行。
¡永久与暂时:
l进程是暂时的,程序是永久的:进程是一个状态变化的过程,程序可长久保存。
¡结构:
l进程的组成包括程序、数据和进程控制块(进程各种控制信息)。
¡进程与程序的对应关系:
l都可1对n。通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。
3)进程的基本状态
(1)就绪状态(Ready)
进程获得除CPU之外的所有必需资源,一旦得到CPU控制权,可立即运行。
(2)运行状态(Running)
进程已获得所有运行必需的资源,正在处理机上执行。
(3)阻塞状态(Blocked)
正在执行的进程由于发生某事件(请求I/O、申请缓冲、时间片到)而暂时无法执行时,便放弃CPU后暂停
3. 进程控制块PCB
进程实体:代码段+数据段+PCB
进程控制块定义
Process Control Block
存放进程的管理和控制信息的数据结构称为进程控制块。
PCB的组织方式
¡链接方式
l同一状态的PCB,依靠链接指针链接成队列。就绪队列;若干个阻塞队列;空白队列(PCB区的空PCB块)
¡索引方式
l同状态的PCB同样集中记录,但以索引表的方式记录PCB的地址。用专门的单元记录各索引表的首地址。
2.2进程控制
进程控制的基本过程:
进程的创建
进程的终止
进程的阻塞与唤醒
进程的挂起和激活
1)进程创建过程
(1) 申请空白PCB
(2) 为新进程分配资源
主要是内存资源的处理
(3) 初始化进程控制块
标识符(包括父进程的)、程序计数器指向程序入口地址,就绪态、优先级等信息的填写。
(4) 将新进程插入就绪队列
注意!
原语是由若干指令构成的原子操作过程,作为整体实现功能,不可被打断。
2)阻塞和唤醒过程
由进程调用阻塞原语阻塞自己,是主动行为:
(1)将PCB中的状态改为阻塞
(2)该PCB加入到阻塞队列中
(3)转进程调度,将处理机分配给另一进程
(4)进行进程切换,即根据两切换进程的PCB,保护与重新设置处理机状态。
3)挂起和激活
(1)检查被挂起进程的状态,活动就绪则改为静止就绪,活动阻塞则改为静止阻塞
(2)将该PCB复制到内存(方便检查)/外存(对换)指定区域
(3)*若挂起的进程是执行态,则需重新进行进程调度。
2.3进程同步
1)进程同步的主要任务:
使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。
2)临界资源
¡一次仅允许一个进程使用的资源。
理解同步
互斥:在操作系统中,当一个进程进入临界区使用临界资源时,另一个进程必须等待,直到占用临界资源的进程退出临界区,我们称进程之间的这种相互制约关系为“互斥”。
同步:多个相互合作的进程,在一些关键点上可能需要互相等待或互相交换信息,这种相互制约关系称为进程同步关系。可理解为“有序”。
如:生产和消费的“有序”关系靠对counter的正确判断达到,而对counter的修改必须“互斥”修改。
3)临界区
每个进程中访问临界资源的那段代码叫临界区。为了正确同步,对临界区的代码要增加控制
4)同步机制应遵循的规则
实现互斥的方法应符合如下每条原则
空闲让进:资源使用最基本原则
忙则等待:保证互斥
有限等待:合适时被唤醒防止死等
让权等待:能主动释放CPU防止忙等
2.4信号量机制
1) 整型信号量
信号量定义为一个整型量; 根据初始情况赋相应的值; 仅能通过两个原子操作来访问。
P操作 wait(S): While S<=0 do no-op; S:=S-1;
V操作 signal(S): S:=S+1;
2)记录型信号量
整型信号量符合“有限等待”原则 signal释放资源后,当CPU被分配给等待进程后,等待进程仍可继续执行,可以符合“有限等待”。
但整型信号量不符合“让权等待”原则 整型信号量的wait操作,当s ≤0时,当前进程会占着CPU不断测试; 信号量原语不能被打断,这个占有CPU的进程会一直不断的占据CPU循环下去,陷入忙等。
3)信号量的基本应用
实现进程互斥
S.value = S.value - 1;
if S.value < 0 then block(S,L)
critical section操作共享资源R
S.value = S.value + 1;
if S.value <= 0 then wakeup(S,L)
remainder section
实现进程间的前趋关系(有序)
P1 : C1 ;signal(S);
P2 : wait(S);C2 ;
4)AND型信号量
出现原因:一些应用往往需要两个或多个共享资源,而不是前述的一个资源。进程同时要求的共享资源越多,发生死锁可能性越大。
解决思想: 一次性分配给进程所需资源,用完一起释放。Wait操作时对它所有需要的资源都要判断,有AND条件,故称“AND同步”、“同时wait”。
5)信号量集
引入原因:
每次只能获得或释放一个单位的资源,低效;
某些时候资源分配有下限的限制;
修改:
在大于可分配设置的下界值t前提下,每次可分配d个。
*信号量题目做题一般方法:
分析问题,找出同步、互斥关系
根据资源设置信号量变量
写出代码过程,并注意P、V操作的位置
检查代码,模拟机器运行,体验信号量的变化和程序运行过程是否正确。
2.4 经典进程同步问题
生产者—消费者问题 互斥、同步
哲学家就餐问题 互斥
读者——写者问题 有条件的互斥
1. 生产者—消费者问题
无论生产者、消费者使用缓冲池时应保证互斥使用(互斥信号量mutex )
生产者和消费者间交叉有序: 有序的控制最根源在产品数量上。 设置两个信号量:分别针对生产者、消费者设置不同的信号量,empty和full分别表示缓冲池中空缓冲池和满缓冲池(即产品)的数量。
empty、full两者有天然的数量关系,在PV控制下值不断变化,但在值等于0的点上是控制顺序的关键。
1)两个生产者同时的情况 假设的时间片轮转顺序如下
produce;
produce;
wait(e);
wait(m);
buffer(in):=nexp;
wait(e);
wait(m);
buffer(in):=nexp;
in:=(in+1)mod n;
signal(m);
signal(f);
in:=(in+1)mod n;
signal(m);
signal(f);
2)生产者等待消费者情况
假设的时间片轮转顺序如下 produce;
wait(e);
wait(m);
buffer(in):=nexp;
wait(f);
wait(m);
nextc:=buffer(out);
in:=(in+1)mod n;
signal(m);
signal(f);
out:=(out+1) mod n;
signal(m);
signal(e);
consume;
2. 哲学家进餐问题
五个哲学家共用一张圆桌,分别坐在周围的五张椅子上,在桌子上有五只碗和五只筷子,他们的生活方式是交替地进行思考和进餐。平时,一个哲学家进行思考,饥饿时便试图取用其左右最靠近他的筷子,只有在他拿到两只筷子时才能进餐。进餐毕,放下筷子继续思考。
repeat
wait(chopstick[ i ]);
wait(chopstick[ ( i +1) mod 5] );
…
eat;
…
signal(chopstick[ i ]);
signal(chopstick[ ( i +1) mod 5] );
…
think;
until false;
2)就餐死锁问题
假如五位哲学家同时饥饿而各自拿起左边的筷子时,就会使五个信号量chopstick均为0,当他们再试图去拿右边的筷子时,都将因无筷子可拿而无限等待。
解决方法:
数量控制:
至多只允许有四位哲学家同时去拿左边的筷子,最终能保证至少有一位哲学家能够进餐,并在用毕后释放出他用过的两只筷子,从而使更多的哲学家能够进餐。---限制并发执行的进程数
3. 读者——写者问题
一个数据文件被多个进程共享。Reader进程只要求读文件,Writer进程要求写入内容。 合理的同步关系是: 多个读进程可同时读; Writer进程与任何其他进程(包括Reader进程或其他Writer进程)不允许同时访问文件。
Reader : repeat wait(wmutex); 读文件; signal(wmutex); until false;
Writer : repeat wait(wmutex); 写入文件; signal(wmutex); until false;
读者Reader :
begin repeat
wait(rmutex);
if Readcount=0 then
Readcount :=Readcount +1;
signal(rmutex);
…
perform read operation;
wait(rmutex);
…
Readcount :=Readcount -1;
if Readcount=0 then signal(wmutex);
signal(rmutex);
until false;
end
4.黑白棋子问题
两个人下棋,一方执黑棋,一方执白棋。要求双方轮流下子。给出两种情况的解决办法: 1)执黑子一方先下 2)双方都可以先下,谁先抢到棋盘谁先下。然后开始轮流下子。
1)执黑子一方先下 信号量:b=1,w=0
黑: while(没结束){ wait(b); 下一黑棋; signal(w); }
白: while(没结束){ wait(w); 下一白棋; signal(b); }
2)先抢到棋盘者先下,然后轮流下子
Semaphore m=1; turn=0;
黑 while(没结束){ p(m); if (turn<>2) 下一黑子; turn=2; v(m) }
白: while(没结束){ p(m); if (turn<>1) 下一白子; turn=1; v(m) }
5.嗜睡的理发师问题
一个理发店有N个沙发,1个理发椅; 理发师: 持续睡觉,理发,收钱的动作 顾客: 若有沙发,进入等待;否则离开。 理发椅空,一顾客放弃沙发,去唤醒它理发; 理发后付费,付费完毕离开理发椅,离店。
顾客 Repeat
…
顾客坐上椅子
singal(full)(叫理发师)
wait(cutok)(享受理发中)
付费
signal(payment)
wait(receipt)
离开椅子
离开店
Until false
顾客间对椅子、沙发使用导致的相互关系
顾客 Repeat
if count>N then
离开店
else
count=count+1
if count=1 then
wait(empty)等椅子
else
wait(sofa)
坐入沙发
wait(empty)等椅子
离开沙发
signal(sofa)
end if
end if
Until false
顾客坐上椅子
…
(与理发师的关系)
离开椅子
离开店
6.生产与销售问题
设一无限大仓库。就1个门,不允许同时入库,也不允许边入库边出库。 1)两个生产者A,B生产各自的产品入库;但要求满足关系Sa-Sb在限定的[-n,m]差值范围内。 2)一个销售者取产品销售,但对两种产品的卖出进度要把握在Ma-Mb也在[-n,m]范围内。
同步关系分析
互斥:三人在对仓库的使用上必须互斥(mutex=1)
顺序关系:
1)生产者AB之间:因为假设仓库无限大,不需考虑空的限制。控制其能否生产的关键是再生产一个能否满足Sa-Sb在限定的[-n,m]范围内。 A、B关心的都是各自的生产指标数量,即A关心x=A-B这个变量的值,同样B关心y=B-A。 初值:初始若无产品,A最多可生产m个,B最多可生产n个。自己生产一个必然使对方可以多生产一个。
2)生产与消费之间 关心卖出的A、B间的差值
1)生产者间关系 定义资源信号量Sab,Sba表示A、B各自允许生产的数量 初始:Sab=m,Sba=n(注意Sab,Sba之间的关系,和始终是m+n。)
生产者A: Repeat wait(Sab) 生产A signal(Sba) wait(mutex) 入库 signal(mutex)Until false
生产者B: Repeat wait(Sab) 生产A signal(Sba) wait(mutex) 入库 signal(mutex)Until false
2)生产与销售的关系
销售要做的: 是否有商品?
设置总商品数S,每次wait(S)
有商品,是A还是B?
设置A,B商品计数的信号量SA,SB。对某种商品执行取就wait(SA)
是否可以取?
取操作要满足销售产品的关系。所以 wait(SA/SB)前面需要判断控制---判断差值difference ,
销售与生产间有什么关系?
生产者A: Repeat wait(Sab) 生产A signal(Sba) wait(mutex) 入库 signal(mutex)Signal(SA) Signal(S)Until false
生产者B: Repeat wait(Sba) 生产A signal(Sab) wait(mutex) 入库 signal(mutex)Signal(SB) Signal(S)Until false