操作系统复习大纲.docx
《操作系统复习大纲.docx》由会员分享,可在线阅读,更多相关《操作系统复习大纲.docx(17页珍藏版)》请在冰豆网上搜索。
操作系统复习大纲
操作系统复习大纲
1.设备无关性(独立性)
设备独立性是指操作系统把所有外部设备统一当作文件来看待,只要安装它们的驱动程序,任何用户都可以像使用文件一样,操纵、使用这些设备,而不必知道它们的具体存在形式。
2.进程与程序的区别
①进程是程序的一次执行,属于动态概念,而程序是一组有序的指令,是一种静态概念。
但进程离开了程序也就失去了存在的意义。
②一个进程可以执行一个或几个程序。
反之,同一程序可能由几个进程同时执行。
③程序可作为软件资源长期保留,而进程是程序的一次执行过程,是暂时的。
进程具有生命期。
④进程具有并发性,能与其它进程并发运行。
而程序不具备这种特征。
⑤进程是一个独立的运行单位,也是系统进行资源分配和调度的一个独立单位。
因此,进程具有独立性,但有时进程间又具有相互制约性。
3.局部性原理
时间局部性:
如果一个信息项正在被访问,那么在近期它很可能还会被再次访问。
(程序循环、堆栈等是产生时间局部性的原因)
空间局部性:
在最近的将来将用到的信息很可能与现状正在使用的信息在空间地址上是临近的。
4.抖动的处理(抖动的原因)。
抖动:
在虚存中,页面在内存与外存之间的频繁调度,以至于调度页面所需时间比进程实际运行的时间还多(在页面置换中,刚被淘汰出的页马上又要用到,如此反复),此时系统效率急剧下降,甚至导致系统崩溃,这种现象叫做抖动。
抖动的原因:
页架数过少,频繁造成缺页中断;
页面置换算法的不合理,不合理的算法可能将不久要用到的页面淘汰出去;
程序结构,滥用转移指令。
5.死锁的必要条件。
(1)资源独占性:
资源被各进程互斥使用,即一个资源每次只能被一个进程所占用;
(2)资源不可抢夺性:
一个资源被一个进程占用后,除非该进程用完自行释放,不能被别的进程强行抢占;
(3)资源的部分分配:
一个进程占有了一些分配给他的资源后,仍要求占用其他的资源。
(4)循环等待资源:
系统中若干进程之间对资源使用形成了一种循环等待的状况,即第一个进程占用了第二个进程所需资源,第二个占用第三个的,最后一个又占用第一个的。
6.分页式、分段式,两者的主要区别。
段页式,为何要分页分段?
为何要分页:
分页管理是解决碎片问题的一种有效办法,它允许程序的存储空间是不连续的,用户程序的地址空间被划分为若干个固定大小的区域。
分页存储管理:
将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面。
为何要分段:
满足用户程序员
(1)方便编程,
(2)信息共享,(3)信息保护,(4)动态增长,(5)动态链接的需要。
P136
分段存储管理:
将程序分成若干逻辑段,并对这些段分别分配存储空间。
两者的主要区别:
(1)页是信息的物理单位,分页是为了便于系统管理,而段是信息的,逻辑单位,分段是为了满足用户的需要。
(2)分页式存储管理的作业地址空间是一维的,而分段式存储管理作业地址空间是二维的。
(3)页的长度由系统确定,是等长的,而段的长度由具有相对完整意义的信息长度确定,是不固定的。
为何有段页式:
分页存储管理能有效提高内存的利用率,分段存储管理能很好地满足用户的需要,段页式存储管理则是分页和分段两种存储管理方式的结合,它同时具备了两者的优点。
段页式存储管理:
先将用户程序分成若干个段,再把每个段分成若干个页,并为每一个段赋予一个段名。
7.进程与线程的关系。
线程是进程的一个组成部分,没各进程创建时通常只有一个线程,需要时可创建其它线程;进程的多线程都在进程的地址空间活动;资源是分给进程的,不是分给线程的,线程执行中需要资源时,可从进程资源中划分;处理机调度的基本单位是线程,线程之间竞争处理机,真正在CPU运行的是线程,线程在执行时需要同步。
线程:
进程
描述
1:
1
每个线程的执行就是一个进程
n:
1
每个进程定义一个地址空间并动态拥有资源
1:
n
一个线程可以在多个进程间转移,同一进程可产生多个线程并运行
n:
n
包含1:
n和n:
1的性质
8.什么是死锁、饥饿。
死锁与饿死的区别。
死锁:
由于进程间相互竞争系统资源或通信而引起的一种阻塞现象。
饥饿:
当等待时间给进程推进和响应带来明显影响时,称为进程饥饿。
当饥饿到一定程度的进程所赋予的任务即使完成也不再具有实际意义时称进程饿死。
死锁与饿死的区别:
(1)从进程状态看,死锁进程都出于等待状态,忙是等待(处于运行或就绪状态)的进程并非处于等待状态,但却可能被饿死。
(2)死锁进程等待永远不会被释放的资源,饿死进程等待会被释放但却不会分配给自己的资源,其等待时限没有上界。
(3)死锁一定发生了循环等待,而饿死则不然。
这也表明通过资源分配图可以检测死锁存在与否,却不能检测是否有进程饿死。
(4)死锁一定涉及多个进程,而饥饿或被饿死的进程可能只有一个。
饥饿和饿死与资源分配策略有关,因而防止饥饿与饿死可以从公平性考虑,确保所有进程不被忽略。
9.安全性检测算法(已知流程图,写代码)。
数据结构:
Available:
array[1..m]ofinteger;//系统可用资源
Claim:
array[1..n,1..m]ofinteger;//进程最大需求
Allocation:
array[1..n,1..m]ofinteger;//当前分配
Need:
array[1..n,1..m]ofinteger;//尚需资源
Request:
array[1..n,1..m]ofinteger;//当前请求
intWork[m];工作变量,记录可用资源.
intFinish[n];工作变量,记录进程是否可进行完.
1.Work=Available;Finish=false;
2.寻找满足如下条件的i:
(1)Finish[i]==false;
(2)Need[i]≤Work[i];
如果不存在,则转步骤4;
3.Work=Work+Allocation[i];Finish[i]=true;
转步骤2
4.如果对于所有i,Finish[i]=true,则系统处于安全状态,否则处于不安全状态.
10.进程的特征。
进程的特征:
(1)并发性:
可以与其他进程一起向前推进
(2)动态性:
动态产生、消亡,生存期内状态动态变化
(3)独立性:
一个进程是可以调度的基本单位
(4)交往性:
同时运行的进程可能发生相互作用
(5)异步性:
进程以各自独立,不可预知的速度向前推进
(6)结构性:
每个进程由一个PCB。
11.进程的状态及其转移。
运行:
进程当前处于运行状态。
就绪;进程已准备好运行。
阻塞;进程等待某些事件发生(如I/O操作)后才能运行。
创建:
进程刚产生,但还未被操作系统提交到可运行进程池中。
消失:
进程被操作系统从可运行进程池中释放。
带有挂起状态的进程状态图:
12.最佳页面尺寸算法例:
在一个分页系统中,设计算机的内存大小为M,作业平均尺寸为J,一个页表项占x个存储单位,问最佳页面尺寸P是多少?
每个进程需要的页数:
J/P
占用x·J/P个存储单位
每个进程的内部碎片平均为:
P/2
由页表和内部碎片带来的总开销:
x·J/P+P/2=M
对P求导,令其等于0,得到方程:
由此得到最佳页面尺寸公式
13.扔球问题。
(1)有一个充分大的池子,两个人分别向池中扔球,甲扔红球,乙扔蓝球,一次扔一个,开始时池中有红、蓝球各一个,要求池中球满足条件:
1<=红球数/蓝球数<=2,用PV操作描述两个进程
信号量初值:
r=1;b=0
扔红扔蓝
P(r)P(b)
扔一个红扔一个蓝
V(b)V(r)
V(r)
(2)一个充分大的池子,甲乙丙三人扔球,甲扔红,乙扔蓝,丙扔绿。
开始时池子中又红绿蓝球各一个。
要求:
池中球满足要求:
1<=红/蓝<=2,且蓝<=绿<=红+蓝
信号量初值:
r,b1,g=1;b2=0
扔红扔蓝扔绿
P(r)P(b1)P(g)
扔一个红P(b2)扔一个绿
V(b1)扔一个蓝V(b2)
V(g)V(r)
V(r)
V(g)
14.设有一个T型路口,其中A、B、C、D处各可容纳一辆车,车行方向如下图所示,试找出死锁并用有序分配法消除之。
要求资源编号合理。
解:
(1)E方向两台车分别位于A和B;S方向一台车位于C;W方向一台车位于D。
(2)S方向两台车分别位于B和C;E方向一台车位于A;W方向一台车位于D。
设位置资源C、B、A、D的编号从低到高依次为1、2、3、4,管理四个位置的信号量分别为s1,s2,s3,s4,信号量的初值均为1。
车辆活动如下:
semaphores1=1,s2=1,s3=1,s4=1;
W:
直行
P(s1);//按序申请
P(s4);驶入D;
驶入C;
V(s4);
驶出C;
V(s1);
E:
左转
P(s2);
驶入B;
P(s3);
驶入A;
V(S2)
P(s4);
驶入D;
V(s3);
驶出D;
V(s4);
S:
左转
P(s1);
驶入C;
P(s2);
驶入B;
V(S1)
P(s3);
驶入A;
V(s2);
驶出A;
V(s3);
15.银行家算法(死锁检测,有流程图,写代码)。
1.如果Request[i]≤Need[i],则转步骤2;否则进程申请资源量超过所申明最大资源需求量,带错返回.
2.如果Request[i]≤Available[i],则转步骤3;否则本次申请当前无法满足,进程pi必须等待.
3.系统假设分配资源,将相应的数据结构修改为:
Available=Available-Request[i];
Allocation=Allocation+Request[i];
Need[i]=Need[i]-Request[i];
4.如果上述分配所导致的新状态是安全的,则转步骤5;否则取消分配:
Available=Available+Request[i];
Allocation=Allocation-Request[i];
Need[i]=Need[i]+Request[i];
进程pi等待.
5.确认分配,进程pi继续.
16.临界区。
人们把每个进程中访问临界资源的那段代码成为临界区。
17.读着优先、写者优先(代码)。
读者优先
如果有读者来时,
无读者和写者,新读者可以读;
如有写者等待,但有其他读者正在读,则新读者可以读;
有写者写,新读者则等待
Varwsem:
semaphore;(initialvalue:
1)
Writer:
while
(1){
P(wsem);
V(wsem);
}
intreadCount=0;
semaphorewsem=1;
semaphoremutex=1;
reader():
while
(1){
P(mutex);
readCount=readCount+1;
if(readCount==1)
P(wsem);
V(mutex);
P(mutex);
readCount=readCount-1;
if(readCount==0)
V(wsem);
V(mutex);
}
写者优先
如果有写者来时,
无读者,新写者可以写;
如有读者正在读,则新读者等待;
有其他写者正在写,新写者则等待。
intwriteCount=0;
semaphorewsem,rsem=1;
semaphoremutexY=1;
writer():
while
(1){
P(mutexY);
writeCount=writeCount+1;
if(writeCount==1)
P(rsem);
V(mutexY);
P(wsem);
V(wsem);
P(mutexY);
writeCount=writeCount-1;
if(writeCount==0)
V(rsem);
V(mutex);
}
intreadCount=0;
semaphorewsem,rsem=1;
semaphoremutexX,mutex=1;
reader():
while
(1){
P(mutex);
P(rsem);
P(mutexX);
readCount=readCount+1;
if(readCount==1)
P(wsem);
V(mutexX);
V(rsem);
V(mutex);
P(mutexX);
readCount=readCount-1;
if(readCount==0)
V(wsem);
V(mutexX);
}
变量wsem用来保证读者与写者之间的互斥,以及写者与写者之间的互斥;变量writeCount用来记录写者的数目;变量mutexY用来实现读者对于变量writeCount访问的互斥;变量readCount用来记录读者的数目;变量mutexX用来实现读者对于变量readCount访问的互斥;mutex用来实现rsem上不要有长的排队等待。
18.资源分配图的化简。
可以通过对资源分配图的约简,来判断系统是否处于死锁状态.
资源分配图中的约简方法如下:
(1)寻找一个非孤立且没有请求边的进程结点pi,若无算法结束;
(2)去除所有pi的分配边使pi成为一个孤立结点;
(3)寻找所有请求边均可满足的进程pj,将pj的请求边全部改为分配边;
(4)转步骤
(1).
若算法结束时,所有结点均为孤点,则称资源分配图是可以完全约简的,否则称为不可完全约简的.文献已经证明,系统处于死锁状态的充分必要条件是资源分配图不可完全约简.这一结论称为死锁定理.
定理:
S为死锁状态的充分必要条件是S的资源分配图不可完全约简.
对于问题1,假设进程p3申请资源类r2中的一个实例,由于没有空闲的资源实例,将增加一条申请边(p3,r2),形成图5-2.此时,出现了两个环路:
p1r1p2r3p3r2p1和p2r3p3r2p2.进一步分析可以验证,此时系统已经发生死锁,且进程p1、p2和p3都参与了死锁.
对于问题2,此图中亦有一个环路:
p1r2p4r1p1
然而并不存在死锁.注意观察p2可能会释放资源类r1中的一个资源实例,该资源实例可分配给进程p3,从而使环路断开.
综合上述分析可以看出,如果资源分配图中不存在环路,则系统中不存在死锁;反之,如果资源分配图中存在环路,则系统中可能存在死锁,也可能不存在死锁.
19.在非抢占调度算法中,SPN具有最小平均等待时间。
假如有4道作业,它们的提交时间及运行时间如下表所示:
作业号
提交时刻
运行时间(分钟)
1
8:
00
120
2
8:
30
30
3
9:
00
6
4
9:
30
12
采用单道运行,试问下述调度算法下,它们的调度顺序,并分别计算各调度算法下三个作业的平均周转时间T和平均带权周转时间W。
T=1/N(∑Ti),Ti=结束时刻-提交时刻;W=1/N(∑Wi),Wi=Ti/作业i实际执行时间
SPN(SJF):
调度顺序为1342
作业号
到达时刻
要求运行时间(分钟)
结束时刻
周转时间Ti(分钟)
带权周转时间Wi
1
8:
00
120
10:
00
120
1
3
9:
00
6
10:
06
66
11
4
9:
30
12
10:
18
48
4
2
8:
30
30
10:
48
138
4.6
T=1/4(120+66+48+138)=93分钟
W=1/4(1+11+4+4.6)=5.15
以下证明是本人拙劣作品,证明过程还存在不严谨之处,请注重思路,细节上的东西因为时间问题暂不想追究。
设有n个作业,将作业根据运行时间从小到大排序为(即由SPN算法得出的工作序列)A1A2…An,其对应的运行时间为t1t2…tn,等待时间为a1a2…an,总等待时间为Wa
现任取两个作业i与j互换位置(i则两种序列的等待时间及总等待时间为: