一、填空题
1、操作系统的4个基本特征是并发、共享、异步 和(虚拟)。
2、在操作系统中,进程是拥有资源的基本单位,(线程)是调度的基本单位。
3、进程的三种基本状态包括 就绪、(等待)和 运行。
4、进程死锁的四个必要条件分别是互斥条件、(请求和保持)、不可抢占条件、循环等待条件。
5、进程互斥可以用若干种方式实现,硬件方式主要包括 (关中断)和测试并置位指令。
6、进程间通信的类型包括 共享存储器、管道通信和(消息传递、信箱通信) 等。
7、CPU访问设备控制器的寄存器或数据缓冲区主要有两种方式,分别利用 特定的I/O指令和内存映射I/O。
二、问答题
1、请简要回答系统调用与库函数的关系。
(1)库函数:是系统提供,用户无须定义,也不必在程序中作类型说明,只需在程序前包含有该函数类型的头文件即可在程序中直接调用。
(2)系统调用:操作系统的一部分,用户应用程序访问并使用内核所提供的各种服务的途径即是系统调用。
(3)库函数是有缓冲的,库函数并不依赖于平台。
(4)系统调用是无缓冲的,系统调用依赖于平台。
2、请简要回答Windows下进程间共享内存的实现原理。
(1)采用内存映射文件机制,将对文件的读写操作转换为对内存的读写操作。
(2)不同的进程映射相同的文件就可以实现共享内存。
(3)如果只为实现进程间通信,可以映射匿名文件。
3、请简要回答操作系统下外部硬件中断的处理过程。
中断处理步骤:响应中断,保存现场 ⟶ 分析中断原因,进入中断处理程序 ⟶ 处理中断 ⟶ 恢复现场,退出中断
4、请简述I/O设备的四种控制方式。
程序直接控制方式:
是由用户进程直接控制内存或CPU和外围设备之间的信息传送。
中断方式:
用来控制外围设备和内存与CPU之间的数据传送。
DMA方式:
其基本思想是在外围设备和内存之间开辟直接的数据交换通道。
通道控制方式:
与DMA方式相类似,也是一种以内存为中心,实现设备和内存直接交换数据的控制方式。与之不同的是,通道作为一种处理机,自主性较强。
三、PV操作题
1、 某博物馆最多可容纳700人同时参观,有一个出口和个入口,该出口和入口一次仅允许一个人通过。参观者的活动按照进入、参观和离开的顺序进行。请使用必要的信号量和P、V操作,以实现上述参观过程。
Semaphore empty = 700;
Semaphore mutex_enter = 1;
Semaphore mutex_leave = 1;
//参观者进程:
{
P(empty);
P(mutex_enter);
进门;
V(mutex_enter);
参观;
P(mutex_leave);
出门;
V(mutex_leave);
V(empty);
}
2.有入水和取水人员若干,一个水缸,5个水桶,由入水人员从水井提水入缸供取水人员饮用。水缸可以容纳10桶水,每次入水、取水仅为一桶,且不可同时进行。水取自同口井中,由于水井口窄,每次只能容纳一个水桶取水。请使用必要的信号量和P、V操作,给出入水、取水的算法描述。
Semaphore empty = 10 ,full = 0;
Semaphore count_bucket = 5,mutex_well = 1,mutex_jar = 1;
//入水进程
while(1)
{
P(empty);
P(count_bucket);
P(mutex_well);
从井中取水;
V(mutex_well);
P(mutex_jar);
送入水缸;
V(mutex_jar);
V(count_bucket);
V(full);
}
3、桌子上有一个盘子,只能容纳一个水果。爸爸专门向盘子里放苹果,妈妈专门向盘子里放橘子。哥哥专门等吃盘子中的苹果,妹妹专门等吃盘子中的橘子。试用信号量实现上述活动。
Semaphore empty = 1,full-apple=0,full-orange=0;
void father()
{
while(true)
{
P(empty);
V(full-apple);
}
}
void mother()
{
while(true)
{
P(empty);
V(full-orange);
}
}
void brother()
{
while(true)
{
P(full-apple);
V(empty);
}
}
void sister()
{
while(true)
{
P(full-orange);
V(empty);
}
}
4、桌子上有一个盘子,最多可以容纳N个水果,每次只能放或拿一个水果。爸爸专门向盘子里放苹果,妈妈专门向盘子里放橘子。哥哥专门等吃盘子中的苹果,妹妹专门等吃盘子中的橘子。试用信号量实现上述活动。
Semaphore empty = N,full-apple=0,full-orange=0;
Semaphore mutex_plate;
void father()
{
while(true)
{
P(empty);
P(mutex_plate);
V(mutex_plate);
V(full-apple);
}
}
void mother()
{
while(true)
{
P(empty);
P(mutex_plate);
V(mutex_plate);
V(full-orange);
}
}
void brother()
{
while(true)
{
P(full-apple);
P(mutex_plate);
V(mutex_plate);
V(empty);
}
}
void sister()
{
while(true)
{
P(full-orange);
P(mutex_plate);
V(mutex_plate);
V(empty);
}
}
四、作业题
1、 一个32位地址的计算机使用两级页表,虚拟地址被分为9位的一级页表域、11位的页表域和一个页内偏移量,请问:
(1)页面大小是多少字节?
(2)一共有多少个页面?
(3)一共有多少个页表项?
2、某计算机采用二级页表的分页存储管理方式,按字节编址,其页大小为210B,页表项大小为2B,逻辑地址结构为:
逻辑地址空间大小为216页,则表示整个逻辑地址空间的一级页表中包含的表项个数至少为多少?
题目等价于:
3、 给定一个虚拟内存系统的如下数据:
(1) TLB有1024项,可以在1ns内访问。
(2) 页表项可以在100ns内访问
(3) 若有一个被替换的页未被修改过,则处理一个缺页中断需要8ms;
若被替换的页已被修改过,则处理一个缺页中断需要20ms。
假定被替换的页70%被修改过。
如果TLB的命中率是99%,缺页中断率是0.01%,那么有效地址转换时间是多少?
4、 某请求分页系统的局部页面置换策略如下:系统从0时刻开始扫描,每隔5个时间单位扫描一轮驻留集(扫描时间忽略不计),本轮没有被访问过的页框将被系统回收,并放入到空闲页框链尾,其中内容在下一次分配之前不被清空。当发生缺页时,如果该页曾被使用过且还在空间页链表中,则重新发生缺页时,如果该页曾被使用过且还在空间页链表中,则重新放回进程的驻留集中;否则,从空闲页框链表头部取出一个页框。
假设不考虑其他进程的影响和系统开销。初始时进程驻留集为空。目前系统空闲页框链表中页框号依次为32、15、21、41.进程p依次访问的<虚拟页号,访问时刻>是:<1,1>、< 3,2>、<0,4>、<0,6>、<1,11>、<0,13>、<2,14>。
(1) 访问<0,4>时,对应的页框号是什么?说明理由。
(2) 访问<1,11>时,对应的页框号是什么?说明理由。
(3) 访问<2,14>时,对应的页框号是什么?说明理由。
(4) 该策略是否适合于时间局部性好的程序?说明理由。
Step1:
Step2:
Step3:
Step4:
Step5:
Step6:
Step7:
Step8:
Step9:
Step10:
Step11: