多道程序设计是指允许多个程序同时进入一个计算机系统的主存储器并启动进行计算的方法。 多道批处理系统中,用户提交的作业都存放在外存中,并形成队列,这个队列称为"后备队列;然后作业调度程序按照作业调度算法将若干作业调入内存,CPU同时执行,以达到CPU和资源的共享,提高资源的利用率和系统的吞吐量的目的。(比如:在A程序因I/O操作而暂停执行的CPU空档期,再调度程序B运行)
指该进程暂时不接受调度
答案:B、C、D
进程控制块(Process Control Block)是系统为了管理进程设置的一个专门的数据结构,用它来记录进程的外部特征,描述进程的运动变化过程。系统利用PCB来控制和管理进程,所以PCB是系统感知进程存在的唯一标志。进程与PCB是一一对应的。
先来先服务算法、最短作业优先算法、最短剩余时间优先算法(SRTF)、最高响应比优先算法(HRN)、基于优先数的调度算法(HPF)、均衡调度算法(分类排队法)
答案:A、A、D、B
例题:假设在单道批处理环境下有四个作业,已知它们进入系统的时间、估计运行时间。
应用先来先服务、最短作业优先和最高响应比优先作业调度算法,分别计算出作业的平均周转时间和带权的平均周转时间。
例题:在两道环境下有四个作业。已知它们进入系统的时间、估计运行时间。系统采用短作业优先作业调度算法,作业被调度运行后不再退出。当一新作业投入运行后,可按照作业运行时间长短调整作业执行的次序。
请给出这四个作业的执行时间序列,并计算出平均周转时间及带权平均周转时间。
抢占式和非抢占式;
时间片轮转调度算法 (关于时间片的取选),优先权调度算法,多级反馈队列调度算法,保证调度算法
答案:A
分析:
(1)ABCD作业进入内存的时刻分别为:10:0010:20、11:10、10:50,完成时刻:11:10、10:50.12:00、12:20。
(2)作业A的周转时间∶11:10-10:00=70min
作业B的周转时间:10:50-10: 20=30min
作业C的周转时间:12:00-10: 30=90min
作业D的周转时间:12:20-10: 50=90min
平均周转时间:(70+30+90+90)/ 4=70min
10:00作业A到达,由于就绪队列空,作业调度进系统,进程调度执行
10:10作业B到达,就绪队列未满,作业调度进系统由于B此时是最短作业,所以进程调度A到就绪态,调度B执行
作业A已运行10分钟,剩余25分钟
10:15作业C到达,响应比为1,等待作业调度进系统
作业B继续执行,已运行5分钟,剩余25分钟
作业A剩余25分钟,位于就绪队列
10:20作业D到达,响应比为1,等待作业调度进系统。作业C等待5分钟,响应比R=1+5/45 = 1.11作业B继续执行,已运行10分钟,剩余20分钟作业A剩余25分钟,位于就绪队列
10:30作业E到达,响应比为1,等待作业调度进系统
作业D等待10分钟,响应比R=1+10/20 = 1.5
作业C等待15分钟,响应比R=1+15/45 = 1.3
作业B继续执行,已运行20分钟,剩余10分钟
作业A剩余25分钟,位于就绪队列
10:40作业E等待10分钟,响应比R=1+10/30 = 1.3
作业D等待20分钟,响应比R=1+20/20 = 2.0
作业C等待25分钟,响应比R=1+25/45 = 1.6
作业D具有最高响应比,D被作业调度进系统,
由于是最短作业,进程调度D执行
作业B运行结束
作业A剩余25分钟,位于就绪队列
11:00作业E等待30分钟,响应比R=1+30/30 = 2.
作业C等待45分钟,响应比R=1+45/45 = 2.0
两者响应比相同,由于C先到达,所以作业调度
C进系统
作业D运行20分钟,运行结束
作业A剩余25分钟,服务时间比C小,进程调度
A执行
11:25作业E等待55分钟,响应比R=1+55/30 = 2.8,作业调度进系统
作业C剩余45分钟,位于就绪队列
作业A运行25分钟,运行结束
因为C服务时间比E长,所以进程调度E执行
11:55作业C剩余45分钟,位于就绪队列
作业E运行30分钟,运行结束
12:40作业C运行结束
各作业运行时间段为:
A 10:00-10:10 11:00-11:25
B 10:10-10:40
C 11:55-12:40
D 10:40-11:00
E 1:25-11:55
原因是没有正确地控制对共享变量(临界资源)的访问
一个缓冲区
设置信号量mutex
mutex:semaphore;
mutex:=1;
process A: | process B: |
---|---|
while(true){ | while(true){ |
P(mutex); | P(mutex); |
…… | …… |
V(mutex); | V(mutex); |
} | } |
设置信号量s1=n、s2=0
s1表示空缓冲区的数量,s2表示满缓冲区数量
也可以添加mutex来实现对缓冲池使用的互斥
process A: | process B: |
---|---|
while(true){ | while(true){ |
生产产品 | P(s2) |
P(s1) | 取走产品 |
送产品到缓冲区 | V(s1) |
V(s2) | 消费产品 |
} | } |
semaphore chopstick[5]={1,1,1,1,1};
//每一位哲学家的活动皆相同,第i位哲学家活动可描述为
do{
P(chopstick[i]);
P(chopstick[(i+1)%5]);
...
eat
...
V(chopstick[i]);
V(chopstick[(i+1)%5]);
...
think
...
}while(true)
为read和write的读写互斥设置互斥变量wmutex;readcount表示正在读的进程数(仅为0时writer才能写);来对各个reader读写互斥设置互斥变量rmutex。
semaphore rmutex=1,wmutex=1;
int readcount=0;
void Reader(){
do{
P(rmutex);
if(readcount==0) P(wmutex);
readcount++;
V(rmutex);
...
reading
...
P(rmutex);
readcount--;
if(readcount==0) V(wmutex);
V(rmutex);
}while(true);
}
void Writer(){
do{
P(wmutex);
...
writing
...
V(wmutex);
}while(true);
}
void main(){
cobegin
Reader(); Writer();
coend
}
答案:B、C、B、D、B
系统中的两个或多个进程无限期地等待永远不会发生的条件,系统处于停滞状态,这种现象称为进程死锁。
设置某些限制条件,破坏产生死锁的四个必要条件中的一个或几个,以防止发生死锁。
在资源的动态分配过程中,用某种方法防止系统进入不安全状态,从而避免死锁。
例:银行家算法
源码在上一篇文章
3.检查和解除死锁
无需采取任何限制性措施,允许进程在运行过程中发生死锁。通过系统的检测机构及时地检测出死锁的发生,然后采取某种措施解除死锁。
上述四种方法,从上到下对死锁的防范程度逐渐减弱,对应的是资源利用率的提高,以及因资源因素而阻塞的频度下降(并发程度提高)。预防死锁和避免死锁都属于事先预防策略,但预防死锁的限制条件比较严格,实现起来较为简单,但往往导致系统的效率低,资源利用率低;避免死锁的限制条件相对宽松,资源分配后需要通过算法来判断是否进入不安全状态,实现起来较为复杂。
答案:B,同上方第6题
名称 | 优点 | 缺点 |
---|---|---|
静态重定位 | 无须增加硬件地址转换机构,便于实现程序的静态连接。 | [1] 程序的存储空间只能是连续的一篇区域,而且在重定位之后就不能移动,这不利于内存空间的有效使用。 [2] 各个用户进程很难共享内存中的同一程序副本。 |
动态重定位 | 1. 程序占用的内存空间动态可变,也不必连续存放在一起。 2.比较容易实现几个进程对同一程序副本的共享使用。 |
需要附加的硬件支持,增加了机器成本,而且实现存储管理的软件算法比较复杂。 |
分配算法
名称 | 思想 | 优点 | 缺点 |
---|---|---|---|
首次适应算法(first fit) | 将空闲分区链以地址递增的顺序连接;在进行内存分配时,从链首开始顺序查找,直到找到一块分区的大小可以满足需求时,按照该作业的大小,从该分区中分配出内存,将剩下的空闲分区仍然链在空闲分区链中。 | 高址部分的大的空闲分区得到保留,为大作业的内存分配创造了条件 | (1)每次都是优先利用低址部分的空闲分区,造成低址部分产生大量的外碎片 (2)每次都是从低址部分查找,使得查找空闲分区的开销增大 |
循环首次适应算法(next fit) | 分配内存时不是从链首进行查找可以分配 内存的空闲分区,而是从上一次分配内存的空闲分区的下一个分区开始查找,直到找到可以为该进程分配内存的空闲分区 | (1)使得空闲分区分布更加均匀;2)空闲分区的查找开销小 | 高址部分的大空闲分区被分小,使得大作业进入无法分配内存 |
最佳适应算法(best fit) | 将空闲分区链中的空闲分区按照空闲分区由小到大的顺序排序,从而形成空闲分区链。每次从链首进行查找合适的空闲分区为作业分配内存,这样每次找到的空闲分区是和作业大小最接近的。 | 第一次找到的空闲分区是大小最接近待分配内存作业大小的 | 产生大量难以利用的外部碎片 |
最坏适应算法(worst fit) | 与最佳适应算法刚好相反,将空闲分区链的分区按照从大到小的顺序排序形成空闲分区链,每次查找时只要看第一个空闲分区是否满足即可。 | 效率高,分区查找方便 | 当小作业把大空闲分区分小了,那么,大作业就找不到合适的空闲分区 |
面向系统,也会产生碎片
分页是为了管理,物理内存没有按用户作业分区的概念,分页仅仅是为了信息管理构造用,为了便于提高工作效率;用户不可见,物理内存没有真正隔离,一页中的地址必须连续;分页是一种物理划分而不是逻辑划分单位。
物理地址=页框号×页长+页内地址。
某页式存储管理系统中,地址寄存器长度为24位,其
中页号占14位,则主存的分块大小应该是( )字节
A.2^10 B.10 C.14 D.2^14
答案:A,地址寄存器长度为24位,所以它的寻址能力是2^24 , 页号占14位,总共可以寻址2^14 页,那么每页就是2^10
例:某系统采用分页式存储管理,页大小为 2KB。已知进程 A 的逻辑地址空间为 4 个页,内存分配如下页表所示,求逻辑地址 4832 对应的物理地址。(所有数据都是十进制)
解:首先页面大小2KB=2048B,所以:
页号 P=逻辑地址/页大小=4832/2048=2
页内地址 F=逻辑地址%页大小=4832%2048=736
根据页表查得 2 号页对应着 25 号物理块
物理地址 A=物理块号*页大小 + 页内地址=25 *2048+736=51936
答案:A,0->页号0->块号2,物理地址为2*4K=8K=8192
例:某用户编程空间共64个页面,每页为1KB,内存为16KB。假定某时刻一用户页表中已调入内存的页面的页号和物理块号的对照表如下:
页号 物理块号
0 3
1 7
2 9
3 5
则逻辑地址0A5C(H)所对应的物理地址是什么?
解:用户编程空间共64个页面,2ˆ6=64所以页号部分占6位,由“每页为1KB”1K=2^10,可知内页地址占10位。
逻辑地址0A5C(H)所对应的二进制表示形式是:0000101001011100,后十位1001011100是页内地址,那么0 000010即为页号。
页号化为十进制是2,在对照表中找到页号2对应的物理块号是9。9转换二进制是1 0 01,物理地址 = 物理块号B + 页内地址(+为组合的意思,不是做加法),组合之后即可求出物理地址为10 011001011100,化成十六进制为265C。
问:考虑一个由8个页面,每页有1024个字节组成的逻辑空间,把它装入到有32个物理块的存储器中,问:
(1)逻辑地址需要多少二进制位表示?
(2)物理地址需要多少二进制位表示?
解:因为页面数为8=23,故需要3位二进制数表示页号。每页有1024个字节,1024=210,于是页内地址需要10位二进制数表示页内地址;32个物理块,需要5位二进制数表示块号(32=2^5)。
(1)页的逻辑地址由页号和页内地址组成,所以需要3+10=13位二进制数表示。
(2)页的物理地址由块号和页内地址的拼接,所以需要5+10=15位二进制数表示。
问:若在一分页存储管理系统中,某作业的页表如下所示。已知页面大小为1024字节,试将逻辑地址1011,2148,4000,5012转化为相应的物理地址。
解:为了描述方便,设页号为p,页内位移为d,则:
(1)对于逻辑地址1011,p=int(1011/1024)=0,d=1011 mod 1024=1011。查页表第0页在第2块,所以物理地址为1024′2+1011=3059。
(2)对于逻辑地址2148,p=int(2148/1024)=2,d=2148 mod 1024=100。查页表第2页在第1块,所以物理地址为1024+100=1124。
(3)对于逻辑地址4000,p=int(4000/1024)=3,d=4000 mod 1024=928。查页表第3页在第6块,所以物理地址为1024′6+928=7072。
(4)对于逻辑地址5012,p=int(5012/1024)=4,d=5012 mod 1024=916。因页号超过页表长度,该逻辑地址非法。
问:某虚拟存储器的用户编程空间共32个页面,每页为1KB,内存为16KB。假定某时刻一用户页表中已调入内存的页面的页号和物理块号的对照表如下:
则逻辑地址0A5C(H)所对应的物理地址是什么?
解:由已知条件“用户编程空间共32个页面”,可知页号部分占5位;由“每页为1KB”,1K=2^10,可知内页地址占10位。由“内存为16KB”,可知有16块,块号为4位。
逻辑地址0A5C(H)所对应的二进制表示形式是:000 1010 0101 1100,根据上面的分析,10位页内地址,则编码“000 10”为页号,表示该逻辑地址对应的页号为2。查页表,得到物理块号是4(十进制),即物理块地址为:01 00 ,拼接块内地址10 0101 1100,得01 0010 0101 1100,即125C(H)。
解逻辑地址0A5C(H)所对应的物理地址是125C(H)。
解:
(1)该逻辑地址对应的页号是0001 01(B),用十进制表示是5。(如何知道页号长度同理第一题)
(2)采用FIFO算法:该页面不在内存中,根据表格可知,0号页面时最先进入系统的,0号页面是要淘汰的页面。淘汰后将5号页面装入7(0001 11B)号页框中,该逻辑地址对应的物理地址是0001 1111 1100 1010 (B),用十六进制表示是1FCA(H)。(即替换前六位页号)
分段式比分页式容易产生碎片
区别:
① 页是信息的物理单位,页式管理是为实现离散分配方式,以减少内存的外碎片,提高内存的利用率。页式管理是出于系统管理的需要。而段是信息的逻辑单位,含有一组意义相对完整的信息,段式管理的目的是为了能更好地满足用户的需要。
② 页的大小固定且由系统确定,逻辑地址由页号和页内地址组成。段长不固定,取决于用户所编写的程序。
③ 页式管理中,进程地址空间是一维的。而段式管理中,进程地址空间是二维的,既需给出段名,又需给出段内地址。
例设某程序中有5个段,段号分别为0-4,段表如下,求:
1)段2字节53的物理地址?
2)段3字节852的物理地址?
3)段0字节1222的物理地址?
1、4300+53=4353
2、3200+852=4052
3、1222>1000,越界中断!
例:在一个采用段页式存储管理的系统中,页的大小为1KB。某个正在执行的作业情况如下:
(1)请给出将逻辑地址(2,3500)转换成物理地址的过程;
(2)计算出上述逻辑地址对应的物理地址的值。
分析:
①逻辑地址中的段号 2 跟段表控制寄存器中的段表长 3 进行比较,由于 2<3 ,故段号没有越界;
②根据段表控制寄存器中的段表起始地址加上段号 2 ,找到段表中对应于第 2 段的段表项,从而得到第 2 段的页表长度和页表起始地址;
③根据段内偏移 3500 得到段内页号为 3 ,3500/1kb。页内偏移为 428 ,3500mod1kb。
④把段内页号 3 和段表项中的页表长度 5 进行比较,得知页号没越界;
⑤由页表起始地址和页号得到对应的页表项,从而得到第 2 段的第 3 页对应的物理块号 是30 ;
⑥物理块号 30 和块内偏移 428 拼接成物理地址 31148 。
解:30*1kb+428=31148,即逻辑地址 (2,3500) 对应的物理地址为十进制数 31148 ,
计算缺页中断次数、3种页面置换算法
(1)逻辑地址4800:704+6×2048=12992
(2)逻辑地址7800:发生缺页中断
减少CPU对I/O(外设)的干预
1、I/O设备的控制方式中比DMA方式效率高的是( )。
A.询问方式 B.中断方式 C. 通道方式 D. 以上都不是
答案:C
双缓冲可以实现互斥,加快输入输出速度,提高设备利用率。
单缓冲在任一时刻只能实现单方向的数据传输,而双缓冲可以实现双向数据传输。
了解柱面、磁道、磁头、盘片的分布特点
为了访问磁盘上的一个记录,必须给出3个参数:柱面号、磁头号和块号。
4种调度算法
算法名称 | 读写步骤 |
---|---|
先来先服务算法(FCFS) | 根据进程请求访问磁盘的先后次序进行调度 |
最短寻道时间优先(SSTF) | 总是先执行查找时间最短的那个磁盘请求。(会出现“饥饿”现象) |
扫描算法(SCAN) | 每次总是选择沿臂的移动方向最近的那个柱面。如果沿这个方向没有访问的请求时,就改变臂的移动方向,这非常类似于电梯的调度规则。 |
循环扫描算法(CSCAN) | 移动臂总是从0号柱面至最大号柱面顺序扫描,然后,直接返回0号柱面重复进行,归途中不再服务,构成了一个循环,这就减少了处理新来请求的最大延迟。 |
5、下列算法中用于磁盘移臂调度的是( )
A.最短寻道时间优先算法 B.LRU算法
C.时间片轮转法 D.优先级高者优先算法
答案:A
用户进程独立于具体使用的物理设备。(进程只需用逻辑设备名称请求使用某类设备,当系统中有多台该类设备时,系统可将其中任一台分配给请求进程,而无需仅局限于某一台设备)
系统通过设置一张逻辑设备表 LUT,将应用程序(或用户程序)中所使用的逻辑设备名称映射为物理设备名(来实现设备的独立性)。
1.从资源分配的角度,设备可以分为(独享 )、(共享)和虚拟设备。
4、程序员利用系统调用打开I/O设备时,通常使用的设备标识是( )
A.逻辑设备名 B.物理设备名
C.主设备号 D.从设备号
答案:A
解:设块长为512B,每个块号占3B,一个物理块可放:512/3=170个目录项,即:
一个一级索引可存放的文件大小为:170×512=
一个二级索引可存放文件的大小为:170×170×512=
一个三级索引可存放文件的大小为:170×170×170×512=
本方法利用二进制的一位来表示磁盘中一个盘块的使用情况,磁盘上所有的盘块都有与之对应的一个二进制位。当其值为0时,表示对应的盘块空闲,当其值为1时,表示对应的盘块已经分配。
例:
1、位示图方法可用于( A )。
A. 磁盘空间的管理 B. 磁盘的驱动调度
C. 文件目录的查找 D. 页式虚拟存贮管理中的页面调度