操作系统——模拟卷

注意,不是标准答案,只是我的答案,欢迎各位大佬前来纠正差错。

一、选择

1、下面哪些行为会导致CPU进入内核模式
(1)执行陷阱指令 (2)执行IO操作 (3)出现异常 (4)执行计算操作

A. (1)
B. (1)(2)
C. (1)(2)(3)
D. (1)(2)(3)(4)

解:CPU进入内核模式说明此时的执行可能会引起某些指令寄存器的值得改变,比方说陷阱指令、I/O操作、异常,但计算并不需要。所以本题选C

2、系统发生一次中断最多有一个进程的状态发生切换
A.对
B.错

解:一次中断,首先要将当前进程停止,此时当前进程的状态改变;然后执行中断操作;执行完中断操作后,再从就绪队列中选择一个进程开始执行,此时执行的进程不一定是我们之前停止的进程,进程状态改变,所以为错。本题选B

3、依据Amdahl’s Law:
A.随着并行节点数的增多,性能收益呈线性增长
B.随着并行节点数的增多,性能可以不断增长
C.即使并行节点数不断增多,性能也有上限
D.性能加速比由系统中的并行节点数量决定

解:Amdahl定律告诉我们,随着并行节点数的增多,性能会增长,但不会一直增长,只能逼近一个上线。所以本题选C

4、Peterson算法
A.可以用于乱序执行的处理器
B.是软硬结合的临界区问题解法
C.不能用于三个及以上的进程间的同步
D.flag[i]=true和turn=j两条语句的顺序可以交换

解:Peterson算法是一种软件上解决临界区问题的方法,仅适用于两个进程之间的同步,而且语句的顺序不可以进行互换,所以不适用于乱序执行的处理器。本题选C

5、下面关于虚拟内存说法正确的是:
A.启用虚拟内存管理后不需要使用内存
B.虚拟内存利用磁盘作为后备存储
C.启用虚拟内存后不能使用分段内存管理
D.无论何种结构的计算机,启用虚拟内存后只要给进程分配1页物理帧即可让进程正常运行。

解:虚拟内存管理仍旧是建立在物理内存之上的,A错;虚拟内存利用磁盘作为内存拓展,使得进程不需要完全装入内存中执行,B对;启用虚拟内存后仍然可以使用分段式内存管理,但是分段可能需要建立在分页的基础之上(文件的存储方式),C错;由于某些指令可能会跨三页甚至以上(比方说mov指令一页,数据1一页,数据2一页)所以一个进程所需要的最少物理帧通常不是1,需要经过计算得到,D错。本题选B

二、简答题

1、什么是多道程序的度(degree of multiprogramming),它的上限由哪些因素确定?
解:多道程序的度就是操作系统将多少个进程放入了内存,或者说有多少个进程被允许对CPU进行抢占运行。上限的限制因素有CPU的核数、所采用的的调度算法、内存的大小等

2、请说明为什么对调度程序而言,区分CPU约束程序和I/O约束程序很重要?
解:进程可分为CPU主和I/O主,分别代表当前进程主要需要CPU进行数据运算或是需要I/O设备进行数据输入输出。I/O主的运行时间往往大于CPU主,因此调度程序应该选择一个合理的包含I/O主和CPU主的组合进程以此来保证CPU的利用率以及进程的吞吐量

3、试描述最优页面置换算法,并解释其为什么是最优的。
解:最优页面置换算法是一种“向前看”的未来算法,在现实中很难实现,因为其需要引用未来的知识。他在面对需要进行页面置换的情况时,将会选择在当前页面中在未来最长时间内不会使用的一个页作为牺牲页。因为被牺牲的页在未来最长的时间内不会被使用,由此最优页面置换算法的页置换率是最低的。

4、某请求分页系统,每进程拥有逻辑空间128页,每页4KB。主机拥有物理空间4MB。
(1)写出逻辑地址的组成格式。
(2) 若不考虑访问权限位,进程的页表有多少项?每页表项至少要包含多少位?

解:
(1)由于有128页,所以需要7位来表示页号;每页的大小为4KB,所以需要12位来表示页偏移,因此它的逻辑地址为:这里的19改为18
在这里插入图片描述
(2)因为每个进程为128页,所以每个进程的页表最多有128项(满打满算)。而由于物理空间有4MB,要分成大小4KB的帧,总共可以有2的10次方个物理帧,因此,每一个页表项需要从这2的10次方个物理帧中代表一个帧,所以页表项至少需要10位

5、试说明安全状态与死锁之间的关系。
解:安全状态代表着存在一个进程的安全序列,可以保证不会发生死锁;同理,死锁代表着不存在一个进程的安全序列,已经发生了死锁。所以,一句话就是“安全状态必不死锁,死锁必不安全状态”

三、在UFS文件系统中,inode节点中包含15个文件指针,其中12个指针指向直接块,其余3个指针分别指向一级间接块,二级间接块和三级间接块,如果块大小为4KB,文件指针均占4B,试计算该系统支持的最大文件大小是多少(精确到KB)。并说明这样设计在支持不同大小文件时的主要优势。

解:个人理解是这样的情况:
在这里插入图片描述
三级的没有画
所以可以看出,首先,直接索引的文件指针可以表示12x4=48KB的大小
然后,是一级间接块,将会有210个文件指针,每个指针指向4KB大小的空间,即可以表示210x4=212KB的大小
二级间接块同理,将会有210个文件指针块,然后有210x210个文件指针,每个指针指向4KB大小的空间,即可以代表220x4=222KB的大小
三级间接块同理,将会有210x210个文件指针块,然后有210x210x210个文件指针,每个指针指向4KB大小的空间,即可以代表230x4=232KB的大小
加起来,就是可以代表的文件的最大大小,即为232+222+212+48KB的大小,大概不到5TB的样子吧。
这样设计的话,在面对不同大小的文件时,可以保证小文件的访问速度更快,并且可以支持不管多么不规整的大小的文件

四、一个系统中,设页的大小为512字节,int型数据大小为4字节,假定数组A位于某一页的起始位置,且数组A占用的所有页均未分配物理帧,系统给该进程分配的物理帧总数为64帧,采用LRU页置换算法。对于如下的程序:

int A[][] = new int[128][128]

for( int j=0; j<128; j++)
for(int i=0; i<128; i++)
	A[i][j] = 0

(1)试计算会发生多少页错误,并给出相应的理由。
(2)改写上述程序,使页错误发生的次数最少。

解:首先明确,LRU算法是牺牲掉当前所有页中最长时间没有被引用的页,是一种“向后看”的页面调度算法。
然后看数组,由于数组在分配的时候是按行分配的,即A[1][n]将会被分配在一起。而int类型大小为4字节,一个页大小为512字节,说明一个页可以容纳128个数组元素,刚好为一行。所以具体分配如图所示:
在这里插入图片描述
而根据算法可以看到,每一次都会从新的一页中拿走一个元素,所以可以得到如下的情况:
①一开始,将会把64个物理帧全部装满,此时也会发生页面置换64次:
在这里插入图片描述
②从第65页开始,发生页面置换,直到所有的64个帧重新置换一遍,发生了64次页面置换:
在这里插入图片描述
③然后回到第一页,这个时候还要发生页面置换,64次之后,回到这种情况:
在这里插入图片描述
④然后回到②循环,直到128次结束
由此可以知道,发生了128*128次页面置换,即页错误=214
(2)因为是频繁的行变换引起的页错误过高,所以只需要改变i和j的顺序就可以了

int A[][] = new int[128][128]

for( int j=0; j<128; j++)
for(int i=0; i<128; i++)
	A[j][i] = 0

五、一座小桥(最多只能承重两个人)横跨南北两岸,任意时刻同一方向只允许一个人过桥,南侧桥段和北侧桥段较窄只能通过一个人,桥中央一处宽敞,允许两个人通过或歇息。试用P(wait)V(signal)操作实现行人(进程)的过桥同步,请给出同步设计的理由和相应的伪代码。

解:共需要三个信号量,num用来控制桥上人数,初值为2,表示桥上最多有2人;N用来控制北段桥的使用,初值为1,用于对北段桥互斥;S用来控制南段桥的使用,初值为1,用于对南段桥互斥。

num=2;
N=1;
S=1;
南岸的人:
void ston(){
	P(num)
	P(S)
	通过桥南侧
	到达桥中间
	V(S)
	P(N)
	通过桥北侧
	V(N)
	V(num)
}
北岸的人:
void ntos(){
	P(num)
	P(N)
	通过桥北侧
	到达桥中间
	V(N)
	P(S)
	通过桥南侧
	V(S)
	V(num)
}

六、 In demand paging(请求分页),the page table of a process is as following(某进程的页表如下).

在这里插入图片描述
假定页面大小为4K,为该进程分配的物理帧数固定为2,采用最近最少使用页面置换算法(LRU)和局部淘汰策略;一次内存访问时间是100ns,一次快表(TLB)的访问时间是10ns,处理一次缺页(page fault)处理的时间为8ms(包含更新TLB和页表的时间);TLB初始化为空,地址访问时,先访问TLB,若TLB未命中,再访问页表(忽略访问页表之后的TLB更新时间);有效位为0,表示页面不在内存中,产生缺页处理。设有虚拟地址访问序列2082H、1324H、204H,请计算:
1、 依次访问该序列地址对应的各个物理内存所需要的时间;
2、基于上述访问序列,虚拟地址465H对应的物理地址;
3、若希望请求分页时内存的有效访问时间(EAT)为120ns, 缺页的概率应该控制在多少之内。

(1)首先确定这三个虚拟地址所在的页,由于页面大小为4K,所以1代表着0-1000H,2代表着1000-2000H,3代表着2000-3000H。
可以看出来,2082H在第3页、1324H在第2页、204H在第1页。所以可以知道,访问的顺序是3、2、1。
①在访问第3页的时候,先访问TLB(10ns)不在,再访问页表(100ns)在,返回(100ns)
②在访问第2页的时候,先访问TLB(10ns)不在,再访问页表(100ns)不在,此时触发缺页处理(8ms),由于第3页之前用过了,所以将第1页也就是页号为0的页进行置换,返回(100ns)
③在访问第1页的时候,先访问TLB(10ns)不在,再访问页表(100ns)由于第二步已经换出,所以不在,触发缺页处理(8ms),由于第2页刚刚用过,所以将第3页也就是页号为2的页进行置换,返回(100ns)
最终,所需要的时间为10+100+100+10+100+100+10+100+100+8x106+8x106=16000630ns
(2)可以知道,465H在第1页,即页号为0,物理地址为465H+101H=566H
(3)根据公式,EAT=(1-a)x100+ax8x106≤120
其中,a为缺页的概率≈0.0000025
注:这道题我自己算的都很迷,感觉参数有点问题,8ms和10ns相比实在是相差太多了,真的没有问题吗?

发布了205 篇原创文章 · 获赞 110 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_40851744/article/details/103793153
今日推荐