操作系统考试课程重点 中国海洋大学.docx
《操作系统考试课程重点 中国海洋大学.docx》由会员分享,可在线阅读,更多相关《操作系统考试课程重点 中国海洋大学.docx(10页珍藏版)》请在冰豆网上搜索。
操作系统考试课程重点中国海洋大学
1.进程的同步与应用(第二章):
生产者——消费者问题
in:
=(in+1)modn;输入指针加1;(in+1)modn=out;缓冲池满;
out:
=(out+1)modn;输出指针加1;in=out;缓冲池空;
count=0,生产者向缓冲池中投放一个产品count+1,反之消费者从缓冲池中取走有一个产品则count-1;
Varmutex,empty,full:
semaphore:
=1,n,0;
buffer:
array[0,…,n-1]ofitem;
in,out:
integer:
=0,0;
begin
parbegin
proceducer:
begin
repeat…
produceranitemnextp;…
wait(empty);
wait(mutex);
buffer(in):
=nextp;
in:
=(in+1)modn;
signal(mutex);
signal(full);
untilfalse;
end
consumer:
begin
repeat
wait(full);
wait(mutex);
nextc:
=buffer(out);
out:
=(out+1)modn;
signal(mutex);
signal(empty);
consumertheiteminnextc;untilfalse;end
parend
end
思路2
利用AND信号量解决
可避免因为wait顺序书写错误,引发的死锁问题
方法
生产者:
…
Swait(empty,mutex);
buffer[in]:
=nextp;
in:
=(in+1)modn;
Ssignal(mutex,full);
消费者:
Swait(full,mutex);
nextc:
=buffer[out];
out:
=(out+1)modn;
Ssignal(mutex,empty);
…
哲学家问题:
思路1
利用记录型信号量
方法
varchopstick:
array[0,…,4]ofsemaphore;
所有信号量初始值为1;
repeat//第i个哲学家的活动
wait(chopstick[i]);//拿左筷子
wait(chopstick[(i+1)mod5]);//拿右筷子
吃饭;
signal(chopstick[i]);//放左筷子
signal(chopstick[(i+1)mod5]);//放右筷子
思考;
untilfalse;
思路2
利用AND型信号量
方法
varchopstick:
array[0,…,4]ofsemaphore;
所有信号量全部初始化为1;
repeat
Swait(chopstick[i],chopstick[(i+1)mod5]);
吃饭;
Ssignal(chopstick[(i+1)mod5],chopstick[i]);
思考;
untilfalse;
读者——写者问题:
rmutex,wmutex:
semaphore:
=1,1;
readcount:
integer:
=0;
读者进程:
begin
repeat
wait(rmutex);
ifreadcount=0then
wait(wmutex);
readcount:
=readcount+1;
signal(rmutex);
读操作;
wait(rmutex);
readcount:
=readcount–1;
ifreadcount=0then
signal(wmutex);
signal(rmutex);
untilfalse;
end;
写者进程:
begin
repeat
wait(wmutex);
写操作;
signal(wmutex);
untilfalse;
End;
利用信号量集解决
VarL,mx:
semaphore:
=RN,1;
读者进程:
begin
repeat
swait(L,1,1);
swait(mx,1,0);
读操作;
ssignal(L,1);
untilfalse;
end;
写者进程:
begin
repeat
swait(mx,1,1,L,RN,0);
写操作;
ssignal(mx,1);
untilfalse;
end;
2.进程互斥与同步(第二章):
1.进程间的同步关系是必然的,而进程间的互斥关系是偶然的。
在一般情况下,互斥的进程并不知道对方的存在,而同步的进程不仅知道其他进程的存在,还要通过与其他进程的通信来达到相互的协调。
2.互斥的各个进程在各自单独执行是时都可以得到正确的结果,但是当他们在临街区内交叉执行时就可能出现问题。
而同步的各个进程,如果各自单独执行将不会完成作业的特定任务,只有当他们互相配合、相互协调推进是才能得到正确的结果
3.互斥的进程只要求她们不能同时进入临界区,而至于哪个先进入则不会产生运行的错误。
但同步进程的协调关系是建立在它们之间执行时序的基础上的,所以各个进程必须按照严格的先后次序执行
4.互斥是一种特殊的同步。
3.银行家算法(第三章):
Available:
系统中现有资源;Max:
进程所需最大资源;
Allocation:
进程已得到资源;Need:
进程还需要的资源
Request:
进程需要资源数(进程发出的请求)
(1)Request<=Need则判断如果
(2)Request<=Available
则(3)Available[j]:
=Available[j]-Request[j];
Allocation[i,j]:
=Allocation[i,j]+Request[j];
Need[i,j]:
=Need[i,j]-Request[j];
否则等待
(4)安全性检查,如果安全的正式分配资源,不安全就作废资源分配状态,让进程等待:
Work:
=Available系统中现有各类资源的数目
Finish[i]:
=false初始状态;
Finish[i]:
=true判断系统有足够的资源给进程;
安全性检查:
2从进程合集中找到进程
(1)Finish[i]:
=false
(2)Need[i,j]<=Work[j];找到则3Work[j]:
=Work[j]+Allocation[i,j];
Finish[i]:
=true
Gotothestep2;否则4如果所有进程的Finish[i]:
=true都满足,则系统安全;否则不安全。
4.连续内存分配各种算法(第四章):
单一连续分配P121
把内存分为系统区和用户区两部分
系统区:
仅提供给OS使用
用户区:
除系统区以外的全部内存空间,供用户使用
单一连续分配的特点
把整个用户区分配给一个程序使用
实际上,用户区又被分为“使用区”和“空闲区”
由于任何时刻用户区中只有一个程序运行,因此只适用于
单道OS
单一连续分配的缺点
由于每次只能有一个程序进入内存,故整个系统的工作效
率不高,资源利用率低
若程序比用户区大,那么它就无法运行。
即大任务无法在
小内存上运行
固定分区分配P122
把用户区划分成若干个大小固定的分区
每个分区只放一个进程
因此,有几个分区就允许几个进程并发
当一个分区空闲时,可选择一个新的进程进入那里运行
由于这些区域是在系统启动时划定的,在进程运行过程中,所获得的区域是不能改变的
划分固定分区的方法
分区大小相等
方法:
所有的分区都大小相等
缺点:
缺乏灵活性,程序太小时,内存浪费;太大时,又无法装入
应用:
控制多个相同的对象(如工业控制机床、锅炉等),因为它们所需的内存空间是大小相等的
分区大小不等
目的:
克服“分区大小相等”的缺点
方法:
把内存划分成多个较小分区、适量中等分区和少量大分区
动态分区分配P123
首次适应算法(FF)
以地址递增次序链接空闲分区
从链首开始查找,找到第一个满足请求大小的分区,从中划出请求大小的空间,余下的仍留在链中(一般从低地址开始划分)
循环首次适应算法
由FF算法演变而成
从上次找到的空闲分区的下一个空闲分区查找
需设置起始查找指针,以指示下次从哪开始查找
最佳适应算法
找能满足分配的最小空闲分区
这要求分区按容量递增顺序排列
动态重定位分配P127
5.分页系统与地址转换(第四章):
分页:
P130
地址转换:
P132
逻辑地址0=>页号0
偏移量0
物理地址=对应块号*页大小
+偏移量
=2*4K+0
=8K
=8*1024
=8192
6.页面淘汰算法(第四章):
P149
最佳置换算法:
从内存中移出永远不再需要的页面;如无这样的页面存在,则应选择最长时间不需要访问的页面
先进先出置换算法(FIFO):
总是选择进程中驻留时间最长的一页淘汰。
即:
先进入内存的页面先淘汰出内存
最近最久未使用(LRU)置换算法:
选择最近一段时间内最久不用的页面进行淘汰。
实现这种技术,是利用页表项的“页面访问位”来记录一个页面自上次访问以来所经历的时间t,并淘汰t最大的页
7.快表(第四章):
P132
具有快表的地址变换机构
因为页表存储在内存中,这使得每次访问一个数据,必须访问两次内存:
一次是访问页表:
确定数据所在的物理地址
另一次才是访问真正的数据
这使得访问内存的次数加倍,导致系统总的处理速度明显下降
解决的方法
增设一个具有并行查寻能力的特殊高速缓冲寄存器,用于存放当前访问的那些表项
这个高速缓存在IBM系统中取名为快表(TLB),又称为联想存储器
8.SPOOLing技术(第五章):
P189-P191
SPOOLing技术
脱机输入/输出技术是利用专门的外围控制机,将低速I/O设备上的数据传送到高速磁盘上;或者相反。
SPOOLing技术的实质是模拟脱机输入/输出
基本方法
用一个进程将设备输入的数据暂存到磁盘上,用另一个进程把暂存在磁盘上的数据传送到设备上;这样,便可在主机的直接控制下,实现脱机输入/输出功能.此时的外围操作与CPU对数据的处理同时进行,这种在联机情况下实现的同时外围操作称为SPOOLing,或称为假脱机操作
SPOOLing系统的组成
SPOOLing系统必须建立在具有多道程序功能的OS上
而且应有高速随机外存的支持,这通常是采用磁盘存储技术来实现。
SPOOLing系统主要有以下三部分:
输入井、输出井
磁盘上的两块大存储区,用于暂存输入、输出的数据
输入缓冲区、输出缓冲区
位于内存中,作用是缓和CPU、设备之间的速度差异
输入进程、输出进程
输入进程:
利用输入缓冲区为中介,把输入设备的数据存入输入井
输出进程:
将用户数据存入输出井,设备空闲时,再将输出井中的数据利用输出缓冲区送入设备
利用SPOOLing技术实现共享打印机
SPOOLing系统的特点
提高了I/O的速度
将独占设备改造为共享设备
实现了虚拟设备功能
9.磁盘调度算法(第五章):
P191-P196
平均寻道长度=移动距离之和/寻道次数
先来先服务(FCFS)
一种最简单的磁盘调度算法。
它根据进程请求访问磁盘的先后次序进行调度。
优点:
公平、简单,且每个进程的请求都能依次地得到处理,不会出现某一进程的请求长期得不到满足的情况。
缺点:
由于未对寻道进行优化,致使平均寻道时间可能较长。
该算法仅适用于请求磁盘I/O的进程数目较少的场合。
最短寻道时间优先(SSTF,ShortestSeekTimeFirst)
该算法首先满足“要求访问的磁道与当前所在磁道之间距离最短”的进程,以使每次的寻道时间最短。
总是优先访问离当前磁头最近的磁道
SSTF算法的平均磁头移动距离明显低于FCFS,因而SSTF较之FCFS有更好的寻道性能,故过去曾一度被广泛采用。
但这种算法不能保证平均寻道时间最短。
进程“饥饿”现象
扫描(SCAN)算法
它是对SSTF算法的改进,以防止老进程出现“饥饿”现象。
该算法不仅考虑到要访问的磁道与当前磁道之间的距离,更优先考虑的是磁头当前的移动方向。
例如,当磁头正在自里向外移动时,SCAN算法所考虑的下一个访问对象,应是要访问的磁道既在当前磁道之外,又是距离最近的。
这样自里向外地访问,直至再无更外的磁道需要访问时,才将磁头换向为自外向里移动。
由于该算法的磁头移动规律颇似电梯的运行,因而又常称之为“电梯调度算法”。
循环扫描(CSCAN)算法
减少SCAN算法造成的这种延迟,CSCAN算法规定磁头只做单向移动。
例如,总是自里向外移动,当磁头移到最外的磁道并访问完后,磁头立即返回到最里的要访问磁道,亦即将最小磁道号紧接着最大磁道号构成循环,进行循环扫描