知识点:
* 信号量机制主要有整形信号量、记录性信号量、信号量集机制。
* 信号量是一个整形变量,根据控制对象的不同赋不同的值。
* 信号量可分为公用信号量和私用信号量两类。
* 公用信号量:实现进程间的互斥,初值=1或资源的数目
* 私用信号量:实现进程间的同步,初值=0或某个整数
* 信号量S的物理意义:S>=0时表示某资源的可用数,s<0时其绝对值表示阻塞队列中等待该资源的进程数。P、V操作是实现进程同步与互斥的常用方法。
* P操作表示申请一个资源, V操作表示释放一个资源。
* P操作的定义:S=S-1,若S>=0,则执行P操作的进程继续执行;若S<0,则置该进程为阻塞状态,并将其插入阻塞队列。
* V操作定义:S=S+1,若S>0则执行V操作的进程继续执行;若S<0,则从阻塞状态唤醒一个进程,并将其插入就绪队列,执行V操作的进程继续执行。
习题详解:
1. 第一题 对应着信号量的物理意义,s<0时,其绝对值表示阻塞队列等待该资源的进程数。
2. 第二题 资源的的当前可用数等于资源当前值,也就是1。或者理解为初值减去已经使用的资源数。
等待该资源的进程数为0,因为当前信号量的值大于0。
3. 信号量的初始值设为1。因为互斥使用临界资源,是指在同一时间只允许一个进程使用此资源,所以互斥信号量的初值都为1。
4. 一个等待进程。信号量当前值是-1,所以绝对值就是阻塞的等待进程数。
磁盘寻道
知识点
* 寻道算法主要有四种:
+ 先到先服务算法(FCFS)。
+ 最短寻道时间优先算法(SSTF)。
+ 扫描算法(SCAN)。
+ 循环扫描算法(CSCAN)。
磁盘分:盘面-磁道-扇区。盘面上有很多磁道,盘面也分成若干个扇区,整体结构就是这样的。寻道就是磁头寻找对应的磁道。它们都是磁盘使用要调度的。
读写一次磁盘信息所需的时间可分解为:寻道时间、延迟时间、传输时间。
(一)先来先服务算法(FCFS)
1、算法思想:按访问请求到达的先后次序服务。
2、优点:简单,公平。
3、缺点:效率不高,相邻两次请求可能会造成最内到最外的柱面寻道,使磁头反复移动,增加了服务时间,对机械也不利。
4、例子:
假设磁盘访问序列:98,183,37,122,14,124,65,67。读写头起始位置:53。求:磁头服务序列和磁头移动总距离(道数)。
由题意和先来先服务算法的思想,得到下图所示的磁头移动轨迹。由此:下面补充。
磁头服务序列为:98,183,37,122,14,124,65,67
磁头移动总距离=(98-53)+(183-98)+|37-183|+(122-37)+|14-122|+(124-14)+|65-124|+(67-65)=640(磁道)
(二)最短寻道时间优先算法(SSTF)
1、算法思想:优先选择距当前磁头最近的访
问请求进行服务,主要考虑寻道优先。
2、优点:改善了磁盘平均服务时间。
3、缺点:造成某些访问请求长期等待得不到服务。
4、例子:对上例的磁盘访问序列,可得磁头
移动的轨迹如下图
(三) 扫描算法(电梯算法)(SCAN)
1、算法思想:当设备无访问请求时,磁头不动;当有访问请求时,磁头按一个方向移动,在移动过程中对遇到的访问
请求进行服务,然后判断该方向上是否还有访问请求,如果有则继续扫描;否则改变移动方向,并为经过的访问请求服务,如此反复。如下图所示:下面补充。
2、优点:克服了最短寻道优先的缺点,既考虑了距离,同时又考虑了方向。
3、 例子:
4、循环扫描算法(CSCAN)
循环扫描算法是对扫描算法的改进。如果对磁道的访问请求是均匀分布的,当磁头到达磁盘的一端,并反向运动时落在磁头之后的访问请求相对较少。
这是由于这些磁道刚被处理,而磁盘另一端的请求密度相当高,且这些访问请求等待的时间较长,为了解决这种情况,循环扫描算法规定磁头单向移动。
例如,只自里向外移动,当磁头移到最外的被访问磁道时,磁头立即返回到最里的欲访磁道,即将最小磁道号紧接着最大磁道号构成循环,进行扫描。
先到先服务
最短寻道时间
扫描算法
习题详解:
5. 采用寻道时间最短时间优先算法。按照磁道序号的大小排序,然后找到磁头的位置,然后寻找距离磁头最近的磁道,
然后计算他的移动磁道数,同理计算,最后得到结果就是答案。162道。(理解为磁道差的绝对值)
页面淘汰算法
知识点
地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。
当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。
而用来选择淘汰哪一页的规则叫做页面置换算法。
常用算法有:
1.最佳置换算法(OPT)(理想置换算法)。
从主存中移出永远不再需要的页面;如无这样的页面存在,则选择最长时间不需要访问的页面。
于所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。
2.先进先出置换算法(FIFO)。
是最简单的页面置换算法。这种算法的基本思想是:当需要淘汰一个页面时,总是选择驻留主存时间
最长的页面进行淘汰,即先进入主存的页面先淘汰。其理由是:最早调入主存的页面不再被使用的可能性最大。
3.最近最久未使用(LRU)算法。
这种算法的基本思想是:利用局部性原理,根据一个作业在执行过程中过去的页面访问历史来推测未来的行为。
它认为过去一段时间里不曾被访问过的页面,在最近的将来可能也不会再被访问。所以,这种算法的实质是:当需要淘汰一个页面时,
总是选择在最近一段时间内最久不用的页面予以淘汰。
4. 时钟(CLOCK)置换算法。
LRU算法的性能接近于OPT,但是实现起来比较困难,且开销大;FIFO算法实现简单,但性能差。
所以操作系统的设计者尝试了很多算法,试图用比较小的开销接近LRU的性能,这类算法都是CLOCK算法的变体。
缺页率 = (页面置换次数+分配给该进程的物理块数)/要访问的页面总数
习题详解
第六题思路:
首先,排出每次页面置换的情况。
注意:物理块没有用满的情况下也是属于页面缺页。
然后计算页面被置换出来的次数。要求使用FiFO算法,即是先进的先淘汰。得出淘汰率是75%和83%。
同理得第七题答案是10次中断
#### 解答第八九题
第八题: 系统同时存在n个进程,处于等待的进程最多可有n个。原理:所有的进程都可以等待一个外部设备。(如键盘输入)
第九题:
当一个拥有n个进程的系统出现死锁时,死锁进程个数k可满足的条件是1<k<=n。
死锁不可能只出现一个,因为一个死锁必定有大于一个的进程阻塞。
同理,所有的进程都可能同时出现死锁(宕机)。
文件系统知识点
#### 文件逻辑结构:
字节流式文件。读写的基本单位是字节。
记录式文件。数据的集合,读写的基本单位是逻辑记录。记录本身又有等长和变长之分。
#### 访问方式:
顺序访问。从文件的初始位置开始访问。类似C语言的文件读取操作,会有一个指针一直向下读取。
对于流式文件,操作方式一致,读取的字节长度是字节的整数倍为长度。读完就将指针指向下个位置。
直接访问。指用户随机访问文件中的某个信息。文件被允许随机读写读/写任意的记录(或逻辑字节)。
对于流文件,允许读/写以任意长度的数据。
####文件在辅存的存放方法:
顺序结构
链接结构
索引结构
对应参考顺序表,链表,list
###习题理解
第十题D随机存取。
知识补充:
周转时间 = 结束时间-到达时间。
平均周转时间 = 周转时间和/作业数。
加权周转时间 = 周转时间/作业时间。
加权平均周转时间 = 加权周转时间和/作业数。
习题理解:
1. 思路:
因为售票厅的容纳量是10,所以信号量的初值大小定义为10。
信号量各种取值的含义:
当0<S≤10时,允许厅外的购票者进入;
当S=0时,厅内已有10人,欲购票者暂不能进入;
当S<0时,|S|表示等待进入者的人数。
pv操作实现伪代码
pi(i = 1, 2...){
p(s);
进入售票厅;
购票;
退出;
v(s);
}
其中信号量的变化范围为
最大值: 10
最小值: n-10
原理范围表示了进程可以进行的最大并发量和最大阻塞进程数,所以最小值是等待进程数的负数。
- 思路:
本题与上题不同,本题的进程操作不一致,但是都是使用一个资源(盘子),所以需要定义三种信号量,一个信号量表示是否进行放水果操作,一个表示是否可取桔子,一个表示是否可取苹果。
初值s(放水果) = 1, s1(取桔子) = 0, s2(取苹果) = 0;
int s = 1, s1 = 0, s2 = 0;
main(void){
father();
son();
daughter();
}
father(){
while(1){
p(s);
将水果放进盘子;
if(是苹果){
v(s0)
} else {
v(s1)
}
}
}
daughter(){
while(1){
p(s2);
去苹果;
v(s);
吃苹果;
}
}
son(){
while(1){
p(s1);
取桔子;
v(s);
吃桔子;
}
}
- 最短进程优先算法 :优先处理处理时间最短的进程。
例子调度顺序是:1>4>3>2;
作业号 | 到达时间 | 结束时间 | 周转时间 | 带权周转时间 |
---|---|---|---|---|
1 | 10.00 | 12.00 | 2 | 1 |
4 | 10.50 | 12.30 | 1.8 | 6 |
3 | 10.40 | 12.80 | 2.40 | 4.8 |
2 | 10.20 | 13.80 | 3.60 | 3.6 |
平均周转时间T = (2+1.5+2.40+3.60)/4 = 2.45小时
平均加权周转时间 W = (1+6+4.8+1.6)/4 = 3.85小时
知识补充:
死锁的四个必要条件
- 互斥条件:一个资源每次只能被一个进程使用。
- 请求和保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
- 不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺。
- 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
避免死锁的常用算法:
-
线性资源分配算法:
给系统的资源进行标号,然后每次申请资源必须一次性申请完。按照进程顺序进行执行。但是这样就破坏了环路条件。 -
系统安全状态法:
即在系统分配资源之前,就应该检测此次资源分配的安全性,如果此次分配资源会导致进程进入不安全状态,那就等待,如果不会,则分配资源。 -
银行家算法:
四个条件:- 分批向银行贷款时,申请的总额不能超过一开始申请的额度。
- 申请贷款时不能超过银行现有资金数目
- 当银行资金不能满足顾客贷款需求时,可以推迟支付,但是肯定会让顾客在需求时间内得到贷款
- 顾客拿到贷款后必须在规定时间内归还。
###习题详解
思路:判断是否安全,判断每个资源数量是否耗尽,没有再判断是否有足够的资源使得某个进程进入就绪运行状态。
注意:安全序列有多条,只要是其中一条即可。
###习题理解:
4.思路
如5-4-3-2-1.
在此时刻不能给p5分配如此量的资源,就不能再找到一条安全序列。会造成系统死锁。
5.思路
顺序执行时,注意各种设备间是独立的。
所以总时间是32+8+5+21+14+35+12+32+15=174秒。
按ABC执行需117s,按ACB执行需126s,按BAC执行需112s,按BCA执行需90s,
按CAB执行 114s,按CBA执行需99s。
习题原题链接>https://download.youkuaiyun.com/download/mathew_leung/10903615