操作系统练习题

一、单选题

  1. 以下不是操作系统的目标的一项是( C )。
    A. 开放性 B. 可扩充性 C. 异步性 D. 有效性
  2. Windows8操作系统属于( B )操作系统。
    A. 单用户单任务 B.单用户多任务    C. 多用户多任务   D. 多用户单任务
  3. 以下不是进程特征的是( C )。
    A. 动态性 B. 独立性 C. 同步性 D. 并发性
  4. 正在执行的进程申请缓冲区失败时,会进入( C )状态。
    A. 就绪 B. 挂起 C. 阻塞 D. 激活
    5.进程控制是指( D )。
    A. 管理进程的执行顺序,解决进程的并发执行
    B. 实现进程之间的信息交换
    C. 实现进程的异步执行
    D. 负责进程创建、进程终止、进程状态转换等
  5. 下列关于线程的说法中,正确的是( D )。
    A. 用户级线程的创建、撤销、同步等功能,都需要操作系统内核的支持
    B. 在现代操作系统中,线程是资源分配和调度的独立单位
    C. 引入线程的操作系统中,进程和线程之间是相互独立的,二者毫无关系
    D. 在引入进程的操作系统中,再引入线程的目的是进一步提高程序并发执行的程度
  6. 对于两个并发进程,设互斥信号量为mutex,初值为1,若mutex=0,则( A )。
    A. 表示有一个进程进入临界区
    B. 表示没有进程进入临界区
    C. 表示有一个进程进入临界区,另一个进程等待进入
    D. 表示有两个进程进入临界区
  7. 作业调度的主要功能是( A )。
    A. 根据某种算法,将外存上的作业调入内存,为它创建进程,分配必要的资源,并放入进程就绪队列
    B. 从输入设备输入作业任务,交由计算机执行作业,最后将结果输出
    C. 负责把挂起在外存上的进程调入内存,为其分配内存空间,并修改其运行状态
    D. 根据某种算法,选取某个位于就绪队列的进程,为其分配处理机执行
  8. 以下不是进程调度机制的一项是( D )。
    A. 排队器 B. 分派器 C. 上下文切换器 D. 调度器
  9. 以下关于程序装入的说法中,正确的是( D )。
    A. 绝对装入方式只适用于多道程序环境
    B. 可重定位装入方式只适用于单道程序环境
    C. 动态运行时装入方式在把装入模块装入内存后,立即把装入模块的逻辑地址转换为物理地址
    D. 可重定位装入方式将装入模块装入内存后,装入模块中的逻辑地址与装入内存后的物理地址不同
  10. ( D )是指从作业提交给系统到作业完成的时间间隔。
    A. 运行时间 B. 响应时间 C. 等待时间 D. 周转时间
  11. 关于内存分配方式的说法中,正确的是( D )。
    A. 在分页存储管理方式中,将进程的逻辑地址分成大小不一定相等的很多页
    B. 在分段存储管理方式中,将进程的逻辑地址分成大小必须相等的很多段
    C. 连续分配方式可分为分页存储方式和分段存储方式
    D. 快表是一种寄存器,位于CPU
  12. LRU置换算法所基于的思想是( B )。
    A. 在最近的过去用得少,在最近的将来也用得少
    B. 在最近的过去很久未使用,在最近的将来也不会使用
    C. 在最近的过去很久未使用,在最近的将来会使用
    D. 在最近的过去用得多,在最近的将来也用得多
  13. 以下不是目前常用的外存组织方式的是( B )。
    A. 连续组织方式 B. 离散组织方式
    C. 链接组织方式 D. 索引组织方式
    15. 操作系统是计算机系统的一种( C )。
    A. 应用软件   B. 通用软件 C. 系统软件 D. 工具软件
  14. 允许多个用户以交互方式使用计算机的操作系统是( B )。
    A. 批处理单道系统 B.分时操作系统    C. 实时操作系统   D. 批处理多道系统
  15. 所谓( A )是指将一个以上的作业放入主存,并且同时处于运行状态,这些作业共享处理机的时间和外围设备等其它资源。
    A. 多道程序设计 B. 多重处理 C. 实时处理 D. 共同执行
  16. 设有4个作业同时到达,每个作业执行时间均为1 h,它们在一台处理机上按单道方式运行,则平均周转时间为( )。
    A. 1h B. 4 h C. 10h D. 2.5 h
  17. 下述作业调度算法中,与作业的估计运行时间有关的调度算法是( )。
    A. 先来先服务 B. 均衡 C. 时间片轮转法 D. 短作业优先
  18. 在作业调度算法中,既考虑作业等待时间.又考虑作业执行时间的调度算法是( )。
    A. 先来先服务 B. 短作业优先 C. 响应比高者优先 D. 时间片轮转法
    二、填空题
  19. 程序的并发执行具有 间断性 、 失去封闭性 和 不可再现性 等特征。
  20. 作业被提交到系统开始,到作业完成为止的这段时间间隔称为 作业周转时间 。
  21. 通过移动内存中作业的位置,把原来多个分散的小分区拼接成一个大分区的方法,称为 拼接或紧凑 。
  22. 所谓 虚拟存储器 ,是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。在分页存储管理方式中,增加请求调页功能和页面置换功能后,称为 请求分页存储管理方式 。在分段存储管理方式中,增加请求调段功能和分段置换功能后,称为 请求分段存储管理方式 。
  23. 设备控制器 的主要功能是控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换。
  24. 磁盘访问时间可以分为 寻道时间 、旋转延迟时间、传输时间等三个部分。
    三、简答题
  25. 简述操作系统的目标。
  26. 简述操作系统的作用。
  27. 推动操作系统发展的主要动力有哪些?
  28. 什么是单道批处理系统?什么是剁掉批处理系统?试比较单道批处理系统和多道批处理系统的优缺点。
  29. 操作系统的基本特征有哪些?请解释每个特征。
  30. 简述操作系统的主要功能。
  31. 什么是前趋图?什么是资源分配图?
  32. 什么是程序顺序执行?什么是程序并发执行?程序顺序执行时的特征有哪些?程序并发执行时的特征有哪些?
  33. 什么是进程?什么是线程?什么是管程?什么是进程实体?进程的特征有哪些?
  34. 进程有哪5个基本状态?
  35. 进程控制块的作用是什么?进程控制块中包含哪些信息?
  36. 简述程序和进程的异同。
  37. 什么是进程控制?什么是进程同步?什么是进程通信?
  38. 进程同步应遵循哪些准则?请逐一解释每个准则。
  39. 什么是P操作?什么是V操作?
  40. 什么是进程?什么是线程?线程和进程之间的关系是什么?为什么要在有进程的操作系统中引入线程?试比较线程和进程之间的异同。
  41. 线程包含哪些状态?
  42. 什么是高级调度?什么是中级调度?什么是低级调度?
  43. 什么是作业周转时间?什么是作业平均周转时间?作业周转时间包含哪几部分?什么是作业带权周转时间?什么是作业平均带权周转时间?
    20.什么是作业控制块?作业控制块包含哪些内容?作业运行时有哪些状态?
    21. 进程调度的任务是什么?
  44. 什么是死锁?死锁产生的原因有哪些?死锁产生的必要条件有哪些?
  45. 简述银行家算法。
  46. 什么是程序的装入?程序的装入方式有哪些?
  47. 什么是程序的链接?程序的链接方式有哪些?
  48. 什么是作业的连续内存分配?什么是作业的离散内存分配?什么是虚拟存储器?常见的连续内存分配方式有哪些?常见的离散内存分配方式有哪些?常见的虚拟存储器方式有哪些?
  49. 什么是固定分配分配?什么是动态分区分配?
  50. 什么是伙伴系统?
  51. 什么是紧凑?紧凑能解决什么问题?紧凑的优缺点是什么?
  52. 什么是对换?对换的类型有哪些?
  53. 什么是页表?什么是页表寄存器?什么是快表(联想寄存器)?什么是段表?什么是段表寄存器?什么是请求页表?什么是请求段表?页表、段表、请求页表、请求段表的结构是怎样的?什么是页面?什么是物理块?什么是逻辑段?什么是多级页表?什么是反置页表?试比较分页存储管理方式与分段存储管理方式的异同。
  54. 试画出分页存储管理方式的地址变换机构。
  55. 试画出分段存储管理方式的地址变换机构。
  56. 试画出段页式存储管理方式的地址变换机构。
  57. 什么是程序的局部性原理?虚拟存储器的特征有哪些?
  58. 什么是抖动?什么是工作集?
  59. I/O系统的基本功能有哪些?
  60. I/O系统的层次结构是怎样的?
  61. 设备控制器的基本功能。
  62. 什么是DMA?什么是I/O通道?设备驱动程序的作用是什么?
  63. 什么是文件?什么是记录?什么是文件的“打开”和“关闭”操作?
  64. 什么是文件目录?什么是文件控制块?
  65. 常用的外存组织方式有哪些?
  66. 什么是内存碎片?什么是外存碎片?
  67. 什么是事务?什么是事务记录?事务的属性有哪些?
    四、计算题
  68. 设有4道作业,它们的提交时间及执行时间如下表所示,假设他们在单道程序环境下采用先来先服务调度算法执行,请写出它们的调度顺序,并计算平均周转时间和平均带权周转时间。(时间单位:小时,以十进制进行计算。)
    作业号 提交时间 执行时间
    1 9.0 3.0
    2 10.0 2.0
    3 10.5 1.5
    4 11.0 1.0
  69. 在采用页式存储管理的系统中,某作业J的逻辑地址空间为4页(每页2048字节),且已知该作业的页面映射表(即页表)如下:
    页号 块号
    0 2
    1 4
    2 6
    3 8
    试借助地址变换图(即要求画出地址变换图)求出有效逻辑地址4865所对应的物理地址。

五. 算法题

  1. 桌上有一空盘,允许存放一只水果。爸爸可以向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用。试用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);
吃苹果;
}
}

  1. 桌上有一空盘,允许存放一只水果。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

  1. 在测量控制系统中,数据采集任务把所采集的数据送入一单缓冲区;计算任务从该缓区中取出数据进行计算。试写出利用信号量机制实现两者共享该缓冲区的同步算法。

解:设信号量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);
进行数据计算;
}
}

  1. 税务局缴税大厅有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);
为该号码持有者服务;
}
}

  1. 有三个进程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);
打印记录;
}
}

  1. 设公共汽车上,司机和售票员的活动分别是:司机的活动:启动车辆;正常行车;到站停车;售票员的活动:关车门;售票;开车门。从汽车不断地到站,停车,行驶过程中,请用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);
开车门;
上下乘客;
}
}

  1. 图书馆有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

  1. 盒子里装着数量相等的白子和黑子,两个进程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

  1. 有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

posted @ 2022-05-10 12:52  亚1918  阅读(785)  评论(0编辑  收藏  举报