操作系统练习题
一、单选题
- 以下不是操作系统的目标的一项是( C )。
A. 开放性 B. 可扩充性 C. 异步性 D. 有效性 - Windows8操作系统属于( B )操作系统。
A. 单用户单任务 B.单用户多任务 C. 多用户多任务 D. 多用户单任务 - 以下不是进程特征的是( C )。
A. 动态性 B. 独立性 C. 同步性 D. 并发性 - 正在执行的进程申请缓冲区失败时,会进入( C )状态。
A. 就绪 B. 挂起 C. 阻塞 D. 激活
5.进程控制是指( D )。
A. 管理进程的执行顺序,解决进程的并发执行
B. 实现进程之间的信息交换
C. 实现进程的异步执行
D. 负责进程创建、进程终止、进程状态转换等 - 下列关于线程的说法中,正确的是( D )。
A. 用户级线程的创建、撤销、同步等功能,都需要操作系统内核的支持
B. 在现代操作系统中,线程是资源分配和调度的独立单位
C. 引入线程的操作系统中,进程和线程之间是相互独立的,二者毫无关系
D. 在引入进程的操作系统中,再引入线程的目的是进一步提高程序并发执行的程度 - 对于两个并发进程,设互斥信号量为mutex,初值为1,若mutex=0,则( A )。
A. 表示有一个进程进入临界区
B. 表示没有进程进入临界区
C. 表示有一个进程进入临界区,另一个进程等待进入
D. 表示有两个进程进入临界区 - 作业调度的主要功能是( A )。
A. 根据某种算法,将外存上的作业调入内存,为它创建进程,分配必要的资源,并放入进程就绪队列
B. 从输入设备输入作业任务,交由计算机执行作业,最后将结果输出
C. 负责把挂起在外存上的进程调入内存,为其分配内存空间,并修改其运行状态
D. 根据某种算法,选取某个位于就绪队列的进程,为其分配处理机执行 - 以下不是进程调度机制的一项是( D )。
A. 排队器 B. 分派器 C. 上下文切换器 D. 调度器 - 以下关于程序装入的说法中,正确的是( D )。
A. 绝对装入方式只适用于多道程序环境
B. 可重定位装入方式只适用于单道程序环境
C. 动态运行时装入方式在把装入模块装入内存后,立即把装入模块的逻辑地址转换为物理地址
D. 可重定位装入方式将装入模块装入内存后,装入模块中的逻辑地址与装入内存后的物理地址不同 - ( D )是指从作业提交给系统到作业完成的时间间隔。
A. 运行时间 B. 响应时间 C. 等待时间 D. 周转时间 - 关于内存分配方式的说法中,正确的是( D )。
A. 在分页存储管理方式中,将进程的逻辑地址分成大小不一定相等的很多页
B. 在分段存储管理方式中,将进程的逻辑地址分成大小必须相等的很多段
C. 连续分配方式可分为分页存储方式和分段存储方式
D. 快表是一种寄存器,位于CPU - LRU置换算法所基于的思想是( B )。
A. 在最近的过去用得少,在最近的将来也用得少
B. 在最近的过去很久未使用,在最近的将来也不会使用
C. 在最近的过去很久未使用,在最近的将来会使用
D. 在最近的过去用得多,在最近的将来也用得多 - 以下不是目前常用的外存组织方式的是( B )。
A. 连续组织方式 B. 离散组织方式
C. 链接组织方式 D. 索引组织方式
15. 操作系统是计算机系统的一种( C )。
A. 应用软件 B. 通用软件 C. 系统软件 D. 工具软件 - 允许多个用户以交互方式使用计算机的操作系统是( B )。
A. 批处理单道系统 B.分时操作系统 C. 实时操作系统 D. 批处理多道系统 - 所谓( A )是指将一个以上的作业放入主存,并且同时处于运行状态,这些作业共享处理机的时间和外围设备等其它资源。
A. 多道程序设计 B. 多重处理 C. 实时处理 D. 共同执行 - 设有4个作业同时到达,每个作业执行时间均为1 h,它们在一台处理机上按单道方式运行,则平均周转时间为( )。
A. 1h B. 4 h C. 10h D. 2.5 h - 下述作业调度算法中,与作业的估计运行时间有关的调度算法是( )。
A. 先来先服务 B. 均衡 C. 时间片轮转法 D. 短作业优先 - 在作业调度算法中,既考虑作业等待时间.又考虑作业执行时间的调度算法是( )。
A. 先来先服务 B. 短作业优先 C. 响应比高者优先 D. 时间片轮转法
二、填空题 - 程序的并发执行具有 间断性 、 失去封闭性 和 不可再现性 等特征。
- 作业被提交到系统开始,到作业完成为止的这段时间间隔称为 作业周转时间 。
- 通过移动内存中作业的位置,把原来多个分散的小分区拼接成一个大分区的方法,称为 拼接或紧凑 。
- 所谓 虚拟存储器 ,是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。在分页存储管理方式中,增加请求调页功能和页面置换功能后,称为 请求分页存储管理方式 。在分段存储管理方式中,增加请求调段功能和分段置换功能后,称为 请求分段存储管理方式 。
- 设备控制器 的主要功能是控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换。
- 磁盘访问时间可以分为 寻道时间 、旋转延迟时间、传输时间等三个部分。
三、简答题 - 简述操作系统的目标。
- 简述操作系统的作用。
- 推动操作系统发展的主要动力有哪些?
- 什么是单道批处理系统?什么是剁掉批处理系统?试比较单道批处理系统和多道批处理系统的优缺点。
- 操作系统的基本特征有哪些?请解释每个特征。
- 简述操作系统的主要功能。
- 什么是前趋图?什么是资源分配图?
- 什么是程序顺序执行?什么是程序并发执行?程序顺序执行时的特征有哪些?程序并发执行时的特征有哪些?
- 什么是进程?什么是线程?什么是管程?什么是进程实体?进程的特征有哪些?
- 进程有哪5个基本状态?
- 进程控制块的作用是什么?进程控制块中包含哪些信息?
- 简述程序和进程的异同。
- 什么是进程控制?什么是进程同步?什么是进程通信?
- 进程同步应遵循哪些准则?请逐一解释每个准则。
- 什么是P操作?什么是V操作?
- 什么是进程?什么是线程?线程和进程之间的关系是什么?为什么要在有进程的操作系统中引入线程?试比较线程和进程之间的异同。
- 线程包含哪些状态?
- 什么是高级调度?什么是中级调度?什么是低级调度?
- 什么是作业周转时间?什么是作业平均周转时间?作业周转时间包含哪几部分?什么是作业带权周转时间?什么是作业平均带权周转时间?
20.什么是作业控制块?作业控制块包含哪些内容?作业运行时有哪些状态?
21. 进程调度的任务是什么? - 什么是死锁?死锁产生的原因有哪些?死锁产生的必要条件有哪些?
- 简述银行家算法。
- 什么是程序的装入?程序的装入方式有哪些?
- 什么是程序的链接?程序的链接方式有哪些?
- 什么是作业的连续内存分配?什么是作业的离散内存分配?什么是虚拟存储器?常见的连续内存分配方式有哪些?常见的离散内存分配方式有哪些?常见的虚拟存储器方式有哪些?
- 什么是固定分配分配?什么是动态分区分配?
- 什么是伙伴系统?
- 什么是紧凑?紧凑能解决什么问题?紧凑的优缺点是什么?
- 什么是对换?对换的类型有哪些?
- 什么是页表?什么是页表寄存器?什么是快表(联想寄存器)?什么是段表?什么是段表寄存器?什么是请求页表?什么是请求段表?页表、段表、请求页表、请求段表的结构是怎样的?什么是页面?什么是物理块?什么是逻辑段?什么是多级页表?什么是反置页表?试比较分页存储管理方式与分段存储管理方式的异同。
- 试画出分页存储管理方式的地址变换机构。
- 试画出分段存储管理方式的地址变换机构。
- 试画出段页式存储管理方式的地址变换机构。
- 什么是程序的局部性原理?虚拟存储器的特征有哪些?
- 什么是抖动?什么是工作集?
- I/O系统的基本功能有哪些?
- I/O系统的层次结构是怎样的?
- 设备控制器的基本功能。
- 什么是DMA?什么是I/O通道?设备驱动程序的作用是什么?
- 什么是文件?什么是记录?什么是文件的“打开”和“关闭”操作?
- 什么是文件目录?什么是文件控制块?
- 常用的外存组织方式有哪些?
- 什么是内存碎片?什么是外存碎片?
- 什么是事务?什么是事务记录?事务的属性有哪些?
四、计算题 - 设有4道作业,它们的提交时间及执行时间如下表所示,假设他们在单道程序环境下采用先来先服务调度算法执行,请写出它们的调度顺序,并计算平均周转时间和平均带权周转时间。(时间单位:小时,以十进制进行计算。)
作业号 提交时间 执行时间
1 9.0 3.0
2 10.0 2.0
3 10.5 1.5
4 11.0 1.0 - 在采用页式存储管理的系统中,某作业J的逻辑地址空间为4页(每页2048字节),且已知该作业的页面映射表(即页表)如下:
页号 块号
0 2
1 4
2 6
3 8
试借助地址变换图(即要求画出地址变换图)求出有效逻辑地址4865所对应的物理地址。
五. 算法题
- 桌上有一空盘,允许存放一只水果。爸爸可以向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用。试用P,V操作实现爸爸、儿子、女儿三个并发进程的同步。
解:设信号量s,so,sa,信号量表示盘子是否为空,其初值为1; so表示盘子中是否有桔子其初值为0,sa表示盘子中是否有苹果,其初值为0。
int s=1;int so=0,int sa=0;
Main()
{ cobegin
father();son();daughter();
coend
}
father()
{while(1)
{ P(s);将水果放入盘中;
if(放入的是桔子) v(s0)
else V(sa);
}
}
son()
{ while(1)
{P(so);
从盘中取桔子;
V(s);
吃桔子;
}
}
daughter();
{ while(1)
{P(sa);
从盘中取苹果;
V(s);
吃苹果;
}
}
- 桌上有一空盘,允许存放一只水果。A向盘中放苹果,B向盘中放桔子,C专等吃盘中的苹果,D专等吃盘中的桔子。若盘内已有水果,放者必须等待,若盘内没有自己在吃的水果,吃者必须等待。试用P,V实现4个人并发进程的同步。
解:设信号量s,so,sa,信号量表示盘子是否为空,其初值为1; so表示盘子中是否有桔子其初值为0,sa表示盘子中是否有苹果,其初值为0。
int s=1;int so=0,int sa=0;
Main()
{ cobegin
A(); B(); C(); D();
coend
}
A()
{while(1)
{ P(s);将苹果放入盘中;
V(sa);
}
}
B()
{while(1)
{ P(s);将桔子放入盘中;
v(s0);
}
}
C()
{ while(1)
{P(sa);
从盘中取苹果;
V(s);
吃苹果;
}
}
D()
{ while(1)
{P(so);
从盘中取桔子;
V(s);
吃桔子;
}
}
3. 有个盘子,可以容纳两个水果,每次只能放入或取出一个水果,爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,两个儿子专等吃橘子,两个女儿专等吃苹果。试用信号量的P,V操作实现此过程,并给出信号量和初始值。
分析:盘子是临界资源,而爸爸和妈妈可以同时向其中放水果,因此要设置一个互斥信号量mutex.盘子最多容纳两个水果,因此,要对放入盘子的水果进行计数,就是要设置一个信号量empty,初值为2。由于盘子可以放两个水果,即当盘子里有一个水果时,存在即可以放也可以取的情况,因此,除了对放水果进行互斥外,对取水果也要互斥。此外,爸爸和女儿,妈妈和儿子之间存在同步关系,要设置信号量apple和orange实现同步,初值都是0。
解:
begin
var mutex=1,empty =2 :semaphore;
var apple = 0,orange = 0:semaphore;
cobegin
process father
begin
repeat
p(empty );
p(mutex);
放入苹果;
v(mutex);
v(apple);
end
process mother
begin
repeat
p(empty );
p(mutex);
放入橘子;
v(mutex);
v(orange);
end
process son-i(i=1,2)
begin
repeat
p(orange);
p(mutex);
取橘子;
v(mutex);
v(empty);
end
process daughter-i(i=1,2)
begin
repeat
p(apple);
p(mutex);
取苹果;
v(mutex);
v(empty);
end
coend
end
- 在测量控制系统中,数据采集任务把所采集的数据送入一单缓冲区;计算任务从该缓区中取出数据进行计算。试写出利用信号量机制实现两者共享该缓冲区的同步算法。
解:设信号量a,b,信号量a表示缓冲区是否空闲,其初始值为1; 信号量b表示缓冲区是否有可供打印的数据,其初始值为0。
int a=1;int b=0;
Main()
{ cobegin
get();compute();;
coend
}
get()
{
while(采集工作未完成)
{
采集数据;
P(a);
将数据送入缓冲区;
V(b);
}
}
compute()
{
while(采集工作未完成)
{
P(b);
将数据送入缓冲区;
V(a);
进行数据计算;
}
}
- 税务局缴税大厅有n个柜员,每个纳税人进入缴税大厅后先取一个号,并且等着叫号,当一个柜员空闲后,就叫下一个号。试用信号量的P,V操作实现此过程,并给出信号量和初始值。
分析:将纳税人号码排成一个队列,纳税人进入缴税大厅领取号码后,将号码由队尾插入;柜员空闲时,从队首取得纳税人号码,并且为这个纳税人服务,由于队列为若干进程共享,所以需要互斥。柜员空闲时,若有纳税人,就叫下一个纳税人为之服务。因此,需要设置一个信号量来记录等待服务的纳税人数。
解:
int mutex=1, taxpayer_count=0: semaphore;
Taxpayer()
{ while(1)
{ 取号码;
P(mutex);
进入队列;
V(mutex);
V(taxpayer_count)
}
}
Servers(i=1..n)
{while(1)
{ P(taxpayer_count);
P(mutex);
从队列中取下一个号码;
V(mutex);
为该号码持有者服务;
}
}
- 有三个进程PA、PB和PC合作解决文件打印问题:PA将文件记录从磁盘读入主存的缓冲区1,每执行一次读一个记录;PB将缓冲区1的内容复制到缓冲区2,每执行一次复制一个记录;PC将缓冲区2的内容打印出来,每执行一次打印一个记录。缓冲区的大小等于一个记录的大小。请用P、V操作来保证文件的正确打印。
解:设4个信号量a1,a2,b1,b2,信号量a1,a2分别表示缓冲区1及缓冲区2是否为空,其初始值为1; 信号量b1,b2分别表示缓冲区1及缓冲区2是否有可供处理的记录, 其初始值为0.
int a1=a2=1;int b1=b2=0;
Main()
{ cobegin
PA();PB();PC();
coend
}
PA()
{
while(1)
{
从磁盘中读一个记录;
P(a1);
将记录放入缓冲区1;
V(b1);
}
}
PB()
{
while(1)
{
P(b1);
从缓冲区1中取记录;
V(a1);
P(a2);
将记录放入缓冲区2;
V(b2);
}
}
PC()
{
while(1)
{P(b2);
从缓冲区2中取记录;
V(a2);
打印记录;
}
}
- 设公共汽车上,司机和售票员的活动分别是:司机的活动:启动车辆;正常行车;到站停车;售票员的活动:关车门;售票;开车门。从汽车不断地到站,停车,行驶过程中,请用P、V操作实现它们的同步。
解:设2个信号量s1,s2.. s1表示是否允许司机启动汽车,其初值为0; s2表示是否允许售票员开车门,其初值为0。
int s1=s2=0;
Main()
{ cobegin
driver();busman();
coend
}
driver()
{
while(1)
{P(s1);
启动车辆;正常行车;到站停车;
V(s2);
)
}
busman()
{
while(1)
{
关车门;
V(s1);
售票;
P(s2);
开车门;
上下乘客;
}
}
- 图书馆有100个座位,读者进入时必须在一张登记表上登记,该表为每一座位列一表目,包括座位号和读者姓名,读者离开时要消掉登记内容。
var mutex=1,count=1:semaphore;
cobegin
process Readeri(i=1,2,…100)
begin
repeat
进入图书馆;
p(count);
p(mutex);
i = 获取座位号;
登记i项表目(名字,座位号);
v(mutex);
坐下阅读;
p(mutex);
消去登记项(名字,座位号)
v(mutex);
v(count);
离开;
until false
end
- 盒子里装着数量相等的白子和黑子,两个进程p1,p2,p1捡白子,p2捡黑子,规定每一个进程轮流捡子且只捡一子。当一个进程正在捡子时,不允许另一个进程去捡,并设捡白子的进程先手。
分析:可以设置两个信号量s1,s2协调进程p1,p2之间的同步,由于不存在进程p1,p2之间同时取子的竞争,所以不必设置互斥信号量。又由于白先,所以信号量s1,s2的初值分别为1,0。
var s1=1,s0=0:semaphore;
cobegin
process p1
begin
repeat
p(s1);
捡白子;
v(s2);
until false
end
process p2
begin
repeat
p(s2);
捡黑子;
v(s1);
until false
end
coend
- 有100名毕业生去甲、乙两公司求职,两公司合用一间接待室,其中甲公司准备招收10人,乙公司准备要15人,招完即止。两公司各有一位主管接待毕业生,每位主管每次只可接待一人,其他毕业生在接待室外排成一队等待。
分析:由于毕业生只排一队,所以只需要设置一个队列数据结构,在队列中不含甲,乙都接待过的毕业生和已被录用了的毕业生,只含标志为"A"(被甲接待过)或标志为"B"(被乙接待过)以及无标志的毕业生。此外,设置s1和s2分别为队列中甲、乙正在面试的毕业生i(i=1,..100)标志,即此刻另一方不得面试该毕业生i。k1,k2为甲,乙所录取的毕业生计数,c1、c2为甲、乙面试过的毕业生计数。mutex为访问队列互斥信号量,sa,sb分别为访问c1,c2的互斥信号量。需要注意的,若甲录取了一名学生,且乙没有面试过该学生,则乙的面试学生数将减少1人。可以采取如下方法:若甲所录取的学生没有被乙面试过时,给乙面试计数器c2加1(相当于乙已经面试过该生);即始终保持乙面试的人数值为100。反之,对甲也是如此。
解:```
var sa=1,sb=1,mutex=1,c1=0,c2=0,k1=0,k2=0:semaphore;
Cobegin
process 甲
begin
L1:p(mutex);
p(sa);
c1 = c1 +1;
v(sa);
if(c1<=100) then
begin
从标志为“B"且不为”Sb"或无标识的毕业生队列中选第i个学生将学生i标识为"A"和"sa"
end
v(mutex);
面试;
p(mutex);
if 合格 then
begin
k1 = k1 +1;
if(学生i的标识不含"B") then
begin
p(sb);
c2 = c2+1;
v(sb);
将学生i从队列上摘除;
end
else
将学生 i从队列上摘除;
else
if(学生i的标识含“B”)then
将学生i从队列上摘除
else
取消学生i的"sa"标识;
v(mutex);
if(k1<10) and (c1<100) then goto L1
end
v(s2);
until false
end
process 乙
begin
L2:p(mutex);
p(sa);
c2 = c2 +1;
v(sb);
if(c2<=100) then
begin
从标志为“A"且不为”Sa"或无标识的毕业生队列中选第i个学生将学生i标识为"B"和"sb"
end
v(mutex);
面试;
p(mutex);
if 合格 then
begin
k2 = k2 +1;
if(学生i的标识不含"A") then
begin
p(sa);
c1 = c1+1;
v(sa);
将学生i从队列上摘除;
end
else
将学生 i从队列上摘除;
else
if(学生i的标识含“A”)then
将学生i从队列上摘除
else
取消学生i的"sb"标识;
v(mutex);
if(k2<10) and (c2<100) then goto L2
end
v(s2);
until false
end