操作系统习题集

第一章 概论

客观题

  • Unix操作系统是著名的分时操作系统
  • 特权指令
    • I/O指令
    • 获取事件指令
  • 非特权指令
    • 内存访问指令
    • 调取函数指令
  • 多处理器系统的优点
    • 增加吞吐量
    • 增加可靠性
    • ❌增加资源利用率
  • 交互式进程主要关注的指标是响应时间
  • 操作系统可以管理计算机中的所有软硬件资源✅

    主观题

  1. 有两个进程P1和P2,它们执行的过程如下(假设CPU和I/O执行采用同步模式): P1: 10秒CPU操作、20秒I/O操作(设备1)、5秒CPU操作、10秒I/O操作(设备2)、5秒CPU操作、结束P2: 20秒I/O操作(设备1)、10秒CPU操作、15秒I/O操作(设备2)、10秒CPU操作、结束(1)如果进程P1和P2顺序执行,请画出进程P1和P2执行情况图;(2)如果进程P1和P2并发执行,请画出进程P1和P2执行情况图;(3)分别计算在(1)和(2)情况下,CPU的利用率、设备1和设备2的利用率。
  2. 什么是操作系统中的双模态?引入双模态有什么好处?
    • 双重模式指的是用户模式内核模式,将可能引起系统崩溃的指令归为特权指令,只能在内核模式运行。
    • 好处
      • 允许操作系统保护自身和其他系统部件
  3. 一些计算机系统没有在硬件中提供双模式,可能构成安全的操作系统吗?对可能和不可能两种情况分别给出理由。
    一种类型处理器的操作系统需要在任何时候都被控制(或监测模式)。有两种方法可以完成这个操作:a.所有用户程序的软件翻译(像一些BASIC,Java,LISP systems)。在软件中,软件解释程序能够提供硬件所不能提供的。b.要求所有程序都用高级语言编写,以便于所以目标代码都被编译出来。编译器将会产生硬件忽略的防护性检查(in-line或功能调用)。
  4. 请谈谈多道程序设计技术和分时技术的联系和区别。
    多道程序系统是在内存中存在多道作业,在管理程序控制下相互穿插运行。通过作业调度选中一个作业并运行。当作业等待时,切换到另一个作业。宏观上并行,微观上串行。
    分时技术是多道程序设计技术的延申,使一台计算机同时为几个、几十个用户服务,将系统处理机和内存空间按一定的时间间隔,轮流切换各终端用户使用。
    两者都是可以增加资源的利用率,发挥计算机系统部件的并行性。
    但是分时操作系统是给不同用户提供程序的使用,针对的是多用户。
    多道程序系统主要是实现不同程序间的穿插运行,针对的是多程序。
  5. 请举例说明为什么要在操作系统中引入I/O保护机制。原因:
    • 防止用户程序执行非法IO
  6. 例子:
    • 采取双模态的保护机制,同时令所有IO指令都是特权指令,用户程序只能通过系统调用进行IO操作

      第二章 操作系统结构

      客观题

  • 操作系统为用户和应用程序提供服务的形式不包括应用程序
  • Linux操作系统不属于微内核
  • 大多数现代操作系统采用的结构式模块结构
  • 常用的虚拟机软件不包括VMP
  • 利用虚拟机安装在操作系统上的操作系统称为客户操作系统

    主观题

  1. 从方便性和效率两个方面比较一下GUI和CLI的优缺点GUI优点
    • 简单易学
    • 界面直观,美观
    • 适合视屏游戏
    • 受众面广
  2. GUI缺点
    • 需要花费大量时间编写界面代码和交互逻辑代码
    • 代码执行效率中等
    • 依赖鼠标和键盘
    • 界面大小和硬件配置对程序的运行效果有较大影响
  3. CLI优点
    • 编写程序高效
    • 运行效率高
    • 功能强大
    • 只需要键盘就能操作
    • 稳定性好
  4. CLI缺点
    • 学习比较困难
    • 界面单调
    • 不适合触屏
  5. 什么是系统程序?什么是应用程序?系统程序
    • 用于管理、维护操作系统的程序,允许用户使用操作系统服务
  6. 应用程序
    • 为了完成某项特定任务而被开发运行于操作系统之上的计算机程序
  7. 操作系统的结构有哪几种?
    • 简单结构
      • MS-DOS,早期的UNIX
    • 层次结构
      • IOS,THE
    • 微内核
      • Mach
      • Windows NT,2000,2003以及后续版本
    • 模块化结构
      • Solaris,Linux,Mac
  8. 什么是虚拟机?引入虚拟机有什么好处?虚拟机是一种通过软件模拟实现的,具有完整硬件系统功能,并运行在一个完全隔离环境中的完整计算机系统。好处
    • 可以同时在一个计算机上使用多个操作系统
    • 安全性好
    • 资源共享
    • 可扩展性好
    • 便于隔离
    • 性价比高
  9. 采用微内核方法来设计系统的主要优点是什么?在微内核中如何使客户程序和系统服务相互作用?微内核方法的缺点是什么?优点
    • 便于扩充微内核
    • 便于移植操作系统到新架构的系统上
    • 更稳定
    • 更安全
  10. 缺点
    • 用户空间和内核空间通信的系统开销增加
  11. 解决方法
    • 提出消息传递机制

      第三章 进程

      客观题

  • 正在执行的进程由于其时间片用完而被暂停运行,此时该进程应从运行态变为就绪态
  • 在只有1个CPU的系统中,设系统中有n个进程,则处于就绪状态的进程最多为n个
  • 进程间采用间接通信方式时,在消息中必须给出信箱名
  • 利用fork创建的子进程,它和父进程之间共享所有的资源
  • 某处理器有4个核,目前系统中若同时存在5个进程,则处于运行状态的进程最少可有0个
  • 进程操作的原语有
    • 阻塞原语
    • 撤销原语
    • 唤醒原语
    • 创建原语
  • 进程相关
    • 进程是有生命周期的
    • 进程是动态的过程
    • 多个进程可以在单个CPU上并发运行
  • 父进程和子进程的资源可能的共享关系
    • 父进程和子进程无资源共享
    • 子进程共享父进程资源的子集
    • 父进程子进程共享所有的资源
  • 进程创建时,进程将被设为就绪态,不可能为其分配CPU

    主观题

  1. 为什么进程需要有自己的PCB?请举例谈谈PCB在进程运行过程中的作用。
    PCB是进程实体的一部分,是操作系统中最重要的记录型数据结构。PCB中记录了操作系统所需的用于描述进程情况和控制进程运行所需的全部信息。因而它的作用是使一个多道程序环境下不能独立运行的程序,成为一个能独立运行的基本单位,一个能和其它进程并发执行的进程。
    进程的并发执行需要PCB保存和恢复现场。
  2. 请从资源共享,进程创建和进程终止角度谈谈父进程和子进程的关系。资源共享
    • 父进程创建子进程时,子进程可能从操作系统那里直接获得资源,也可以从父进程那里获得。父进程可能和子进程之间共享资源。
  3. 进程创建
    • 子进程被父进程创建时,除了得到各种物理和逻辑资源外,初始化数据由父进程传递给子进程。
  4. 进程结束
    • 子进程使用了超过它所分配的资源,或者分配给子进程的任务已不再需要,父进程将终止子进程。父进程退出,如果父进程中之,那么操作系统不允许子进程继续。
  5. 某系统的进程状态转换图,请说明:操作系统习题集 - 图1(1)引起各种状态转换的典型事件有哪些?(2)当我们观察系统中某些进程时,能够看到某一进程产生的一次状态转换能引起另一进程作一次状态转换。在什么情况下,转换 3 的发生能立即引起转换 1 的发生?(3)试说明是否会发生下述因果转换: a)转换2是否会引起转换 1 b)转换3是否会引起转换2 c)转换4是否会引起转换1
    • 引起各种状态转换的典型事件
      • 新建:创建进程
      • 运行:指令在执行
      • 等待:进程等待某些事情发生
      • 就绪:进程等待分配处理器
      • 终止:进程执行完毕
    • 就绪队列非空
    • 2会引起1
    • 3不会引起2
    • 4会引起1
  6. 描述内核在两个进程间进行上下文切换的过程
    进程关联是由进程的PCB来表示的,它包括CPU寄存器的值和内存管理信息等。当发生上下文切换时,内核会将旧进程的关联状态保存在其PCB中,然后装入经调度要执行的新进程的已保存的关联状态。上下文切换还必须执行一些确切体系结构的操作,包括刷新数据和指令缓存。
  7. 什么是直接通信?什么是间接通信?请各举一个例子并讨论他们各自的优缺点。
    • 直接通信
      • 每个进程明确指定通信的接收者或发送者,以实现两个进程间直接通信。
    • 例如
      • send(P, message):向进程P发送消息
      • receive(Q, messgae):从进程Q接收消息
    • 优点
      • 在需要通信的每对进程之间自动建立链路。进程仅需要知道对方身份就可以交流。
      • 每个链路只与两个进程相关。
      • 每队进程之间只有一个链路。
    • 缺点
      • 生成进程定义的有限模块化
    • 间接通信
      • 实体通过中介者进行通信,没有发送者和接收者之间的耦合。
      • 进程间通过邮箱或端口来发送和接收消息
    • 例如
      • POSIX消息队列采用一个整数值来标识一个邮箱。
      • send(A, message):向邮箱A发送一条消息
      • receive(A, message):从邮箱A接收一条消息

        第四章 线程

        客观题

  • 在多对一模型中,如果没有可运行的其他线程,一个用户线程的阻塞会导致进程的阻塞
  • 某个分时系统采用多对一线程模型。内存中有10个进程并发运行,其中9个进程中只有一个线程,另外一个进程A拥有11个线程。则A获得的CPU时间占总时间的1/10
  • 常用的线程库有
    • Win32线程库
    • JAVA线程库
    • Pthreads线程库
  • 操作系统中引入线程的原因
    • 有些进程中的代码有并发执行的需求
    • 操作进程所需的系统开销大
    • 适合多核处理器的并行化操作系统
  • Unix的exec创建的进程不能和父进程共享资源

    主观题

  1. 在多处理器系统上采用多个用户级线程的多线程解决方案,比在单处理机系统上,能够提高更好的性能吗?
    一个包括多用户线程的多线程系统无法在多处理系统上同时使用不同的处理器。操作系统只能看到一个单一的进程且不会调度在不同处理器上的不同进程的线程。因此,多处理器系统执行多个用户线程是没有性能优势的。
  2. 有可能有并发但无并行吗?首先要理解的是并发和并行的概念。

    如果某个系统支持两个或者多个动作(Action)同时存在,那么这个系统就是一个并发系统。 如果某个系统支持两个或者多个动作同时执行,那么这个系统就是一个并行系统

  3. 并行概念是并发概念的一个子集。并发和并行都可以是很多个线程,就看这些线程能不能同时被(多个)cpu执行,如果可以就说明是并行,而并发是多个线程被(一个)cpu 轮流切换着执行。

    • 单核 CPU 多任务:并发(不必等上一个任务完成才开始下一个任务)、串行(只有一个实际执行任务的 CPU 核)
    • 多线程:并发、串行(所有线程都在同一个核上执行);并发、并行(不同线程在不同的核上执行)
  4. 考虑下面的代码段

pid_t pid;
pid = fork();
if (pid == 0){
fork();
thread_create(…);
}
fork();

  1. a. 创建了多少个单独进程?
    4个进程
    b. 创建了多少个单独线程?
    2个线程
    操作系统习题集 - 图2
  2. 操作系统引入线程的原因?以及线程和进程的区别。

    • 引入原因
      • 性能
        • 操作进程系统开销大
        • UNIX的轻型进程
      • 应用
        • 进程代码并发执行的需求
        • 例如PPT编辑(输入/拼写检查/存盘)
      • 硬件
        • 多核处理器
        • 加速进程的运行
    • 两者区别
      1. 拥有资源
        • 进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问隶属进程的资源
      2. 调度
        • 线程是独立调度的基本单位,在同一进程中,线程的切换不会引起进程的切换。从一个进程中的线程切换到另一个进程中的线程时,会引起进程切换。
      3. 系统开销
        • 由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O设备等,所付出的开销远大于创建或撤销线程时的开销。
        • 类似地,在进行线程切换时,涉及当前执行进程CPU环境的保存及新调度进程CPU环境的设置,而线程切换时只需保存和设置少量寄存器内容,系统开销很小。
      4. 通信方面
        • 线程间可以通过直接读写同一进程中的数据进行通信,但是进程通信需要借助IPC。
          | 项目 | 进程 | 线程 | | —- | —- | —- | | 代码 | 进程包含线程 | 线程时进程中的一段代码 | | 资源 | 进程时资源分配的基本单位 | 线程不拥有资源,共享使用进程资源 | | 调度 | 同一进程中的线程切换不会引起进程切换 | 线程时基本调度单位 | | 切换 | 重量级上下文切换,代价大 | 轻量级,代价小 | | 生命期 | 进程撤销会导致它的所有线程被撤销 | 线程撤销不会影响进程 |
  3. 线程库有什么作用?请举一个例子说明利用线程库创建线程的过程。作用

    • 为程序员提供API来创建和管理线程
  4. 例子
    • Java线程库创建线程的过程
      • 扩展Java.lang.Thread类
      • 实现Runnable接口

public class TestRunnable {
public static void main(String[] args) {
DoSomething ds1 = new DoSomething(“1”);
DoSomething ds2 = new DoSomething(“2”);
Thread t1 = new Thread(ds1);
Thread t2 = new Thread(ds2);
t1.start();
t2.start();
}
}

  1. 用户级线程和内核级线程的映射模式有哪些?各有什么特点。多对一模型
    • 不支持内核线程的操作系统,内核只有进程
    • 内核只能看到一个进程,所以多个线程不能并行运行在多个处理器上
    • 进程中的用户线程由进程自己管理,进程内线程切换不会导致进程切换,一个线程的系统调用会导致整个进程的阻塞
  2. 一对一模型
    • 用于支持线程的操作系统,用户线程映射到内核线程,操作系统可以管理这些线程
    • 并发性好,多个线程可以并行运行在多个处理器上
    • 内核开销大
  3. 多对多模型
    • 多个用户线程映射为相等或更小数目的内核线程
    • 并发性和效率兼顾
    • 增加复杂度
  4. 请举例说明为什么线程技术适合多处理器架构的计算机。线程可在多处理核上并行运行。不管有多少可用CPU,单线程进程只能运行在一个CPU上。系统可以为每个核分配一个单独线程。例如
    • 单核上:T1 T2 T3 T4 T1 T2 T3 T4…
    • 多核
      • 处理核心1:T1 T3 T1 T3
      • 处理核心2:T2 T4 T2 T4
  5. 一个多处理器系统中某个应用程序采用多对多线程模式编写。假如该程序的用户线程数量多于系统的处理器数量,讨论下列情况下的性能:1)该程序分配得到的内核线程的数量比处理器数量少2)该程序分配得到的内核线程的数量和处理器相同3)该程序分配得到的内核线程的数量大于处理器数量,但少于用户线程的数量
    • 内核线程的数量少于处理器
      • 一些处理器将仍然处于空闲状态
    • 内核线程的数量和处理器相同时
      • 可能所有处理器将同时使用
      • 但是也有可能,一个内核块内的内核因页面错误或同时援引系统调用导致相应处理器闲置
    • 内核线程的数量大于处理器数量,但少于用户线程的数量
      • 封锁一个内核线程并调出,换入另一个准备执行的内核线程
      • 多处理器系统的利用率较高

        第五章 进程调度

        客观题

  • 由新建状态转换为就绪状态的调度方式是长程调度
  • 对短作业不利的调度算法是FCFS
  • 不具有抢占和非抢占式的调度算法是FCFS
  • 具有抢占和非抢占式两种调度模式的调度算法有PRSJF
  • 可能出现进程长期得不到运行的情况的调度算法有抢占式短作业优先算法静态优先数算法
  • 亲和性是指进程在某个给定的CPU上尽量长时间运行而不被迁移到其他处理器的倾向性

    主观题

  1. 为什么区分CPU密集型程序和I/O密集型程序对调度程序是重要的?老师上课讲的点:
    • 为了让CPU利用率高
    • 大部分时间都是用来处理CPU程序,I/O占比非常少
  2. 网上答案总结:
    • I/O密集型程序有在运行I/O操作前只运行很少数量的计算机操作的性质
    • I/O密集型程序一般来说不会使用很多的CPU
    • CPU密集型程序利用整个的时间片,且不做任何阻碍I/O操作的工作
    • 因此,通过给I/O密集型程序优先权和允许其在CPU密集型程序之前运行,可以很好地利用计算机资源
  3. 假设有如下一组进程,它们的CPU是执行时间以毫秒来计算: | 进程 | 执行时间 | 优先级 | | —- | —- | —- | | P1 | 2 | 2 | | P2 | 1 | 1 | | P3 | 8 | 4 | | P4 | 4 | 2 | | P5 | 5 | 2 |

  4. 假设进程按P1, P2, P3, P4, P5顺序在时刻0到达。

    • FCFS 先来先服务调度算法
  5. 操作系统习题集 - 图3 | 进程 | 周转时间 | 等待时间 | | —- | —- | —- | | P1 | 2 | 0 | | P2 | 3 | 2 | | P3 | 11 | 3 | | P4 | 14 | 11 | | P5 | 19 | 14 |

    • SJF 短作业优先调度算法
  6. 操作系统习题集 - 图4 | 进程 | 周转时间 | 等待时间 | | —- | —- | —- | | P1 | 3 | 1 | | P2 | 1 | 0 | | P3 | 20 | 12 | | P4 | 7 | 3 | | P5 | 12 | 7 |

    • 非抢占优先级
  7. 操作系统习题集 - 图5 | 进程 | 周转时间 | 等待时间 | | —- | —- | —- | | P1 | 10 | 8 | | P2 | 20 | 19 | | P3 | 8 | 0 | | P4 | 14 | 10 | | P5 | 19 | 14 |

    • RR 时间片轮转
  8. | 进程 | 周转时间 | 等待时间 | | —- | —- | —- | | P1 | 2 | 0 | | P2 | 3 | 2 | | P3 | 20 | 3 | | P4 | 13 | 5 | | P5 | 18 | 7 |

  9. 下面的进程采用抢占轮转调度。每个进程都分配一个优先级数值,更大数值表示更高优先级。除了这些进程外,系统还有一个空闲任务(idle task,它被称为Pidle,不消耗CPU资源)。这个任务的优先级为0;当系统没有其他可运行进程时,将被调度运行。时间片的长度是10个单位。如果一个进程被更高优先的进程抢占,它会添加到队列的最后。 | 进程 | 优先级 | 执行时间 | 到达时间 | | —- | —- | —- | —- | | P1 | 40 | 20 | 0 | | P2 | 30 | 25 | 25 | | P3 | 30 | 25 | 30 | | P4 | 35 | 15 | 60 | | P5 | 5 | 10 | 100 | | P6 | 10 | 10 | 105 |

  10. 操作系统习题集 - 图6 | 进程 | 周转时间 | 等待时间 | | —- | —- | —- | | P1 | 20 | 0 | | P2 | 30 | 5 | | P3 | 65 | 25 | | P4 | 15 | 0 | | P5 | 25 | 15 | | P6 | 10 | 0 |

  11. CPU使用率 = 105/125 = 0.84

  12. 现有运行10个I/O密集型任务和1个CPU密集型任务的一个系统。假设I/O密集型任务每1ms的CPU计算就进行一次I/O操作,并且每个I/O操作需要10ms来完成。另假设上下文切换开销是0.1ms,所有进程都是长时间运行的任务。请讨论在下列条件下轮转调度程序的CPU利用率:
    • 时间片为1ms
      每个1ms的I/O密集型任务需要多花0.1ms
      每个10ms的CPU密集型任务需要多花1ms
      CPU利用率 = 1/1.1 = 91.1%
    • 时间片为10ms
      每个1ms的I/O密集型任务需要多花1ms
      每个10ms的CPU密集型任务需要多花1ms
      CPU利用率 =20/ (10*1.1+10.1) = 94%
  13. 现有一个基于动态改变优先级的抢占式优先级调度算法。优先级的数值越大意味着优先级越高。当一个进程等待CPU时,优先级以α速率改变;当运行时,优先级以β速率改变。在进入等待队列时,所有进程优先级设为0.通过参数α和β的设置,可以得到许多不同调度算法。
    • 当β>α>0时,是FCFS调度算法,因为处在运行状态的进程不会被进入的进程抢占,也不会被等待的进程抢占。
    • 当α<β<0时,是后进先出算法,因为处在运行状态的进程会被进入的进程抢占,但不会被等待的进程抢占。
  14. 进程的上下文切换进程的上下文切换可以理解为内核在CPU上对于进程进行以下的活动
    • 挂起一个进程,将这个进程在CPU中的状态存储与内存中某处
    • 在内存中检索下一个进程的上下文,并将其在CPU的寄存器中恢复
    • 跳转到程序计数器所指向的位置,以恢复该进程
  15. 上下文切换只能发生在内核态中,是多任务操作系统中的一个必须的特性。
    当某一进程资源放弃它的CPU时间或者系统分配的时间片用完时,就会发生上下文切换。
    上下文切换有时也因硬件中断而触发。
    软件上下文切换的好处:
    • 能够运行在任何CPU上
    • 可以尝试获得更好的性能
    • 硬件的机制保存了几乎所有CPU的状态,软件能够有选择地保存需要被保存地部分并重新加载
    • 软件上下文切换提高切换代码地可能性,有利于提高正在加载的数据的有效性,从而进一步提高性能
  16. 上下文切换通常是计算密集型。
  17. 有一个操作系统采用多级反馈队列调度,如下图所示。其中第一级采用时间片轮转算法,时间片大小为8ms,第二级同样采用时间片轮转算法,时间片大小为16ms,第三级采用先来先服务算法。
    操作系统习题集 - 图7
    根据下表给出的5个进程的到达时间、执行时间回答下面的问题。(时间以毫秒为单位) | 进程 | 执行时间 | 到达时间 | | —- | —- | —- | | P1 | 50 | 0 | | P2 | 10 | 1 | | P3 | 5 | 2 | | P4 | 30 | 3 | | P5 | 23 | 4 |

  18. (1) 请画出5个进程执行的甘特图。
    (2) 根据以上的调度算法,分别计算出每个进程的周转时间和响应时间。
    操作系统习题集 - 图8

  19. 什么是抢占式调度?什么是非抢占式调度?各适用什么场合?抢占式调度
    • 调度程序可以根据某种规则暂停正在执行的进程,重新分配CPU
    • 适用于交互式系统
  20. 非抢占式调度
    • 一旦把CPU分配给某进程后,系统不可以抢占已分配的CPU并分配给其他进程
    • 只有进程资源释放CPU,才可以把CPU分配给其他进程
    • 适合批处理系统
  21. 考虑以下的一个基于优先级(优先数高优先级低)的调度算法,此算法采用根据等待时间和运行时间对优先数进行动态老化算法,具体算法如下:
    a) 处于等待队列中的进程的优先数p根据等待时间t(每毫秒计算一次)进行变化,p=p-1;
    b) 处于运行状态的进程的优先数p根据运行时间t(每毫秒计算一次)进行变化,p=p+1;
    c) 优先数p每隔1毫秒重新计算;
    d) 采用抢占式调度策略。
    根据下表给出的5个进程的到达时间、执行时间回答下面的问题。(时间以毫秒为单位,当优先级相同时,先进入就绪队列的进程优先) | 进程 | 执行时间 | 达到时间 | 优先级p | | —- | —- | —- | —- | | P1 | 5 | 0 | 8 | | P2 | 6 | 1 | 4 | | P3 | 3 | 2 | 6 | | P4 | 4 | 3 | 2 | | P5 | 2 | 4 | 10 |

  22. (1) 请画出5个进程执行的甘特图。
    (2) 根据以上的调度算法,分别计算出每个进程的周转时间和响应时间。

  23. 试比较进程调度与作业调度的不同点。
    • 作业调度
      • 新建状态转换到就绪状态
      • 由调度程序控制
    • 进程调度
      • 调度程序选择下一个执行的进程
      • 根据一定的算法将CPU分派给就绪队列中的一个进程,从就绪到运行
    • 切换频率
      • 进程调度切换频率高
      • 作业调度切换频率低
    • 切换开销
      • 进程调度开销小,切换快
      • 作业调度开销大,切换慢
    • 操作系统中应用
      • 进程调度:必需
      • 作业调度:可选
  24. 简要分析共享内存通信并举例
    • 使得多个进程可以可以直接读写同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。
    • 为了在多个进程间交换信息,内核专门留出了一块内存区,可以由需要访问的进程将其映射到自己的私有地址空间。进程就可以直接读写这一块内存而不需要进行数据的拷贝,从而大大提高效率。
    • 由于多个进程共享一段内存,因此需要依靠某种同步机制(如信号量)来达到进程间的同步及互斥。
      操作系统习题集 - 图9
    • 例子:生产者-消费者
    • 生产者进程生产,供消费者进程消费的信息
      • 无界缓冲(Unbounded-buffer)没有对缓冲区大小的限制
      • 有界缓冲(Bounded-buffer)对缓冲区大小作了限定

        第六章 进程同步

        客观题

  • 访问临界区过程中,在临界区后的退出区应该实现有空让进准则
  • 在生产者消费者问题中,消费者执行Wait(full)后阻塞的原因是full<1
  • 设两个进程共用一个临界资源的互斥信号量mutex,当mutex=1时表示,没有一个进程进入临界区
  • 两个并发进程要访问一个临界区,设置了互斥信号量mutex,现在mutex=-1,则表示一个进程进入临界区,另一个在等待
  • 消费者阻塞在wait(full)(full是同步信号量)的条件是没有满缓冲区
  • 防止5个哲学家就餐出现死锁的解决方法,正确的有
    • 增加一根额外的筷子
    • 最多允许4个哲学家同时坐在桌子周围
    • 给所有哲学家编号,奇数号哲学家必须首先拿左边筷子,偶数号哲学家则反之
    • 仅当一个哲学家左右两边筷子都可用时,才允许他拿筷子
  • 同步信号量一般初值设置为0

    主观题

  1. 什么是临界区?对临界区的访问应该遵循什么准则?临界区是涉及临界资源的代码段,是进程内的代码。临界资源则是一次只允许一个进程使用的资源。使用准则
    • 在进入区实现互斥准则
    • 在退出区实现有空让进的准则
    • 每个临界区不能过大,从而实现有限等待准则
  2. 请谈谈同步信号量的值有什么含义。
    同步信号量大于0,表示这一个资源没有被使用的数量,可分配请求使用这个资源的进程
    等于0,说明这一资源正好被分配完毕
    小于0,说明有进程在等待队列中,表示正在等待这一资源的进程数
  3. 有四个进程S1、R1、R2和R3,其中S1向缓冲区BUFF发送消息,R1、R2和R3从缓冲区中接收消息。发送和接收的规则如下:(1) 缓冲区BUFF任何时候只能存放1个消息;(2) R1、R2和R3每次可取S1存放在缓冲区中的消息;(3) 每个存放在缓冲区中的消息必须被R1、R2和R3均接收后才能清除。请用信号量机制来实现这4个进程间的同步。

信号量初值S1=1,S2=0,S3=0,S4=0,MUTEX=1;
int Count=0;
S1 R1 R2 R3
repeat repeat repeat repeat
P(S1) P(S2) P(S3) P(S4)
Send message get message get message get message
P(MUTEX) P(MUTEX) P(MUTEX) P(MUTEX)
Count=0 Count=Count+1 Count=Count+1 Count=Count+1
V(S2) if(Count=3) if(Count=3) if(Count=3)
V(S3) V(S1) V(S1) V(S1)
V(S4) V(MUTEX) V(MUTEX) V(MUTEX)
V(MUTEX) until false until false until false
until false

  1. 桌上有一个空的水果盘,且盘中一次只能放一个水果。爸爸专向盘中放苹果,妈妈专向盘中放桔子,一个儿子专等吃盘子中的桔子,一个女儿专等吃盘子中的苹果。固定每次当盘子空时爸爸或妈妈可向盘中放一个水果,仅当盘中有自己需要的水果时,儿子或女儿可从中取出。请用PV操作实现爸爸、妈妈、儿子和女儿四个进程的同步。

信号量初值apple=0,orange=0,plate=1
Dad(){
while(1){
准备苹果;
P(plate);
放苹果;
V(apple);
}
}

Daughter(){
while(1){
P(apple);
拿苹果;
V(plate);
吃苹果;
}
}

Mom){
while(1){
准备桔子;
P(plate);
放桔子;
V(orange);
}
}

Son(){
while(1){
P(orange);
拿桔子;
V(plate);
吃桔子;
}
}

  1. 某车站售票厅,任何时刻最多可容纳 20 名购票者进入,当售票厅中少于 20 名购票者时,则厅外的购票者可立即进入,否则需在外面等待。若把一个购票者看作一个进程,请回答下列问题:
    (1)用 PV 操作管理这些并发进程时,应怎样定义信号量,写出信号量的初值以及信号量各种取值的含义。(2)根据所定义的信号量,写出应执行的 PV 操作。
    操作系统习题集 - 图10
  2. 某寺庙,有小,老和尚若干,由小和尚提水倒入缸供老和尚饮用。水缸可容10桶水,水取自同一井中。水井窄,每次只能容纳一个桶取水。水桶总数为3个。每次从缸中取水,向缸中倒入水仅为1桶,且不可同时进行。试给出有关取井水、入缸水,取缸水的算法。
    操作系统习题集 - 图11
  3. 考虑一个理发店,只有一个理发师,只有n张可供顾客等待理发的椅子,如果没有顾客,则理发师睡觉;如果有一顾客进入理发店发现理发师在睡觉,则把他叫醒,写一个程序协调理发师和顾客之间的关系。

int waiting = 0; // 等候理发的顾客数量
int chairs = n; // 空余的凳子数
semaphore customers = 0, babers = 0, mutex = 1;
baber() {
while(true){
P(customers); // 理发师等待顾客的时候睡觉
P(mutex); // 对waiting变量的操作需要互斥
waiting—; // 等待的顾客数量减一
V(mutex);
haircut(); // 理发师开始理发
V(babers);
}
}
customer(){
P(mutex);
// 顾客尝试进入店内等待
if(waiting // 店内有空位
waiting++;
V(customers); // 唤醒理发师
V(mutex);
P(babers); // 等待理发师准备好
getHaircut(); // 理发
}else{
// 店内无空位,直接离开
V(mutex);
}
}

  1. 有一个阅览室,共有100个座位,读者进入时必须先在一张登记表上登记,该表为每一座位列一表目,包括座号和读者姓名等,读者离开时要消掉登记的信息,试问
    (1)为描述读者的动作,应编写几个程序,设置几个进程?(2)试用PV操作描述读者进程之间的同步关系。
    操作系统习题集 - 图12
  2. 利用管程解决生产者消费者问题

monitor ProducersAndConsumers{
public static int N = 10; // 缓冲区大小
public static Producer p = new Producer();
public static Consumer c = new Consumer();
public static Monitor montior = new Monitor();
public static void main(String[] args){
p.start();
c.start();
}

public class producer extends Thread{
public void run(){
while(true){
// 生产者只需要不断生产
int item = produce();
monitor.insert(item);
}
}
public int produce(){
// 实际生产
}
}

public class consumer extends Thread{
public void run(){
while(true){
int item = monitor.remove();
cosume(item);
}
}
public void consume(int item){
// 实际消费
}
}

public class Monitor{
private int[] buffer = new int[N]; // 缓冲区
private int count = 0, left = 0, high = 0; // 用来记录存放货物的数量和位置
public synchronized void insert(int val){
// 尝试生产
if(count == N){
// 缓冲区满,则休眠
sleep();
}
buffer[high] = val;
high = (high+1)%N;
count = count + 1;
if(count == 1){
// 缓冲区非空的时候尝试唤醒消费者
wakeup();
}
}

public synchronized int remove(){
// 尝试消费
int val;
if(count==0){
// 缓冲区空,则休眠
sleep();
}
val = buffer[low];
low = (low+1)%N;
count = count-1;
if(count == N-1){
// 缓冲区非满的时候尝试唤醒生产者
wakeup();
}
return val;
}
}


}

第七章 死锁

客观题

  1. 产生系统死锁的原因可能是由于多个进程竞争资源出现了循环等待.
  2. 一个计算机有6台磁带机,由n个进程竞争使用,每个进程可能需要两台磁带机,那么n最大是5时系统才没有死锁的危险。
  3. 产生死锁的必要条件有
    • 非抢占
    • 循环等待
    • 占有并等待
    • 互斥
  4. 当检测出发生死锁时,可能需要撤销多个进程才能解除死锁

    主观题

  5. 假设一个系统有m个相同类型的资源,并由n个进程共享。每个进程每次只能请求或释放1个资源。证明只要符合下面的两个条件,系统就不会发生死锁。

    • 每个进程需要的资源的最大数量在1-m之间
    • 所有进程需要资源的最大数量的总和小于m+n
  6. 设max(i)表示第i个进程的最大资源需求量,need(i)表示第i个进程还需要的资源量,alloc(i)表示已经分配给第i个进程的资源量。
    max(1)+max(2)+…+max(n)=need(1)+need(2)+….+need(n)+alloc(1)+alloc(2)+…+alloc(n)假设现在发生了死锁,则所有资源被分配
    即alloc(1)+alloc(2)+….+alloc(n)=m且所有进程将无限循环等待
    need(1)+need(2)+…+need(n)need(i)=0和所有进程进入等待状态矛盾,由此可证该系统不可能发生死锁
  7. 操作系统习题集 - 图13

    • 通过进程调度可以完成执行的顺序,说明系统处于安全状态 | | ALLOC | MAX | NEED | | —- | —- | —- | —- | | P0 | 2 0 0 1 | 4 2 1 2 | 2 2 1 1 | | P1 | 3 1 2 1 | 5 2 5 2 | 2 1 3 1 | | P2 | 2 1 0 3 | 2 3 1 6 | 0 2 1 3 | | P3 | 1 3 1 2 | 1 4 2 4 | 0 1 1 2 | | P4 | 1 4 3 2 | 3 6 6 5 | 2 2 3 3 |

    • P0 P1 P2 P3 P4

    • 当进程P1的请求为(1,1,0,0)时,能否立即允许这一请求
      若允许 则Available = 2 2 2 1
      安全序列P0 P3 P1 P2 P4,所以可以允许
    • 当进程P4的请求为(0,0,2,0)时,能否立即允许这一请求
      若允许 则Available = 3 3 0 1
      没有安全序列,所以不能允许
  8. 有一个单行道的桥,连接两个Vermont村庄:北Tunbridge和南Tunbridge。这两个场主通过这个桥,将收成送到附近城镇。如果北Tunbridge和南Tunbridge的农场主这个桥,那么就会死锁( Vermont农场主比较顽固,不愿后退)。采用信号量,防止死锁。 开始时,不必考虑饥饿(如向北的农场主使用桥而不让向南的农场

semaphore mutex = 1;
北农场主{
p(mutex);
过桥
v(mutex);
}
南农场主{
p(mutex);
过桥
v(mutex);
}

  1. 某系统有同类资源m个,供n个进程共享。如果每个进程最多申请x个资源(其中1<=x<=m),请证明:当n(x-1)+1<=m时,系统不会发生死锁。
  2. 什么是死锁?产生死锁的原因是什么?死锁:指多个进程因竞争共享资源而造成的一种僵局,若无外力作用,这些进程将永远不能向前推进,这种状态称为死锁。原因:
    1. 竞争不可抢占性资源。
    2. 进程推进顺序不当。
    3. 竞争可消耗资源。
  3. 考虑一个系统在某一时刻的状态:
    Allocation Max Available
    A B C D A B C D A B C D
    P0 0 0 1 2 0 0 1 2 1 5 2 0
    P1 1 0 0 0 1 7 5 0
    P2 1 3 5 4 2 3 5 6
    P3 0 6 3 2 0 6 5 2
    P4 0 0 1 4 0 6 5 6
    使用银行家算法回答下列问题:
    a. Need矩阵的内容是怎样的?
    b. 系统是否处于安全状态?
    c. 如果从进程P1发来一个请求(0, 4, 2, 0),这个请求能否立刻被满足?

    第八章 内存管理

    客观题

  4. 计算机系统的二级存储包括辅助存储器,如硬盘
    CPU寄存器和超高速缓存不属于计算机系统的存储结构

  5. 单个分区的存储管理可采用哪些技术来增大存储空间的容量
    • 覆盖
    • 对换
  6. 存在外碎片的存储管理方式
    • 可变分区分配
    • 段式存储管理
  7. 操作系统内存管理的主要功能包括
    • 存储保护
    • 内存回收
    • 内存分配
    • 地址转换
  8. 内存管理的目的
    • 提高内存利用率
    • 提高CPU利用率
    • 提高内存数据访问的速度
  9. 在页式存储管理中,引入快表可以减少平均(每一次内存访问时间

    主观题

  10. 给定6个内存分区:300KB, 600KB, 350KB, 200KB, 750KB和125KB分别采用首次适应、最优适应、最差适应算法如何放置115KB, 500KB, 358KB, 200KB和375KB的进程根据他们使用内存的效率对算法进行排序

    • 首次适应算法
      • 115KB放置在第0个分区内
        • 分区剩余内存:185KB, 600KB, 350KB, 200KB, 750KB, 125KB
      • 500KB放置在第1个分区内
        • 分区剩余内存:185KB, 100KB, 350KB, 200KB, 750KB, 125KB
      • 358KB放置在第4个分区内
        • 分区剩余内存:185KB, 100KB, 350KB, 200KB, 392KB, 125KB
      • 200KB放置在第2个分区内
        • 分区剩余内存:185KB, 100KB, 150KB, 200KB, 392KB, 125KB
      • 375KB放置在第4个分区内
        • 分区剩余内存:185KB, 100KB, 150KB, 200KB, 17KB, 125KB
      • 使用效率 =
    • 最优适应算法
      • 115KB放置在第5个分区内
        • 分区剩余内存:300KB, 600KB, 350KB, 200KB, 750KB, 10KB
      • 500KB放置在第1个分区内
        • 分区剩余内存:300KB, 100KB, 350KB, 200KB, 750KB, 10KB
      • 358KB放置在第4个分区内
        • 分区剩余内存:300KB, 100KB, 350KB, 200KB, 392KB, 10KB
      • 200KB放置在第3个分区内
        • 分区剩余内存:300KB, 100KB, 350KB, 0KB, 392KB, 10KB
      • 375KB放置在第4个分区内
        • 分区剩余内存:300KB, 100KB, 350KB, 0KB, 17KB, 10KB
      • 使用效率 =
    • 最差适应算法
      • 115KB放置在第4个分区内
        • 分区剩余内存:300KB, 600KB, 350KB, 200KB, 635KB, 125KB
      • 500KB放置在第4个分区内
        • 分区剩余内存:300KB, 600KB, 350KB, 200KB, 135KB, 125KB
      • 358KB放置在第1个分区内
        • 分区剩余内存:300KB, 242KB, 350KB, 200KB, 135KB, 125KB
      • 200KB放置在第2个分区内
        • 分区剩余内存:300KB, 242KB, 150KB, 200KB, 135KB, 125KB
      • 375KB无法放置,需要等待内存释放
      • 使用效率 =
    • 按内存使用效率降序排序:最优适应算法,首次适应算法,最差适应算法
  11. 假设一个计算机系统有32位的逻辑地址和4KB的页,系统支持512MB的物理内存,以下每个页表有多少条目?
    • 传统的单级页表
      • 4KB = 22*210 = 212
      • 232-12 = 220个条目
    • 倒置页表
      • 和单级页表不同,反向页表只保存真正的内存页
      • 512MB = 29*220 = 229
      • 229-12 = 217个条目
  12. 什么是重定位,重定位有哪些类型?
    重定位就是在程序装入内存中,把程序中的相对地址转换为内存中的绝对地址的过程。
    重定位有静态重定位和动态重定位两种。
    静态重定位,在装入一个作业时,把该作业的指令地址和数据地址全部转换成绝对地址。
    动态重定位,在作业执行过程中硬件的地址转换机构把逻辑地址转换成绝对地址。
  13. 在页式存储管理中,假设作业的地址为16位,页长为4KB,作业的第0,1,2逻辑页分别放在内存的第5,10,11物理块中,试计算作业 中逻辑地址2F6AH,0E3CH,526CH(十六进制数)相对应的内存物理地址,说明转换过程、写出转换结果。页长是4KB,说明页内偏移地址占12位,因为212bit=4KB又因为地址长度 = 页号长度 + 页内偏移长度,所以页号长度为4位
    • 2F6AH,页号为2,对应帧号为11,所以它的物理地址为BF6AH
    • 0E3CH,页号为0,对应帧号为5,所以它的物理地址为5E3CH
    • 526CH,页号为5,页号不存在表内,所以物理地址非法
  14. 假设有下面的段表:
    段 基地址 长度
    0 219 600
    1 2300 14
    2 90 100
    3 1327 580
    4 1952 96
    下面的逻辑地址的物理地址是多少?
    a. 0, 430 对应物理地址430+219 = 649
    b. 1,10 对应物理地址2300+10 = 2310
    c. 2, 500 长度超过了100,地址非法
    d. 3,400 对应物理地址1327+400 = 1727
    e. 4,122 长度超过96,地址非法
  15. 某系统采用可变分区方式管理主存储器,在主存分配情况如图所示时,有4个作业要求装入主存,它们各自所需的主存空间为:J1:8KB, J2:15KB, J3:30KB, J4:115KB,系统不允许移动。请回答下列问题:(1)采用首次适应分配算法分配主存,应按怎样的次序才能将4个作业同时全部装入主存?写出所有可能的装入次序。(2)从上述作业装入次序中选择一种,描述作业装入内存后的情况。操作系统习题集 - 图14
    1. J2, J4, J3, J1;
      J2, J3, J4, J1;
      J4, J2, J3, J1;
      J4, J4, J3, J2;
    2. 以J2, J3, J4, J1为例
      操作系统习题集 - 图15
  16. 一个分页存储系统,页表存放在内存:(1)如果访问一次内存需要 200ns,则访问一个内存单元需要多少时间?(2)如果系统采用三级页表,则访问一个内存单元需要多少时间?(3)如果系统引入联想寄存器,90%的页表项可以在快表中命中,则访问一个内存单元需要多少时间?(假设访问一次快表需要 10ns)
    1. 访问一个内存单元需要200+200 = 400ms
    2. 200+200+200+200 = 800ms
    3. (200+10)x0.9 + (10+400)x0.1 = 189+41 = 230ms
  17. 假定某采用分页式存储管理的系统,主存容量为1M,被分成256块,块号为0,1,2,……,255。某作业的地址空间占4页,其页号为0,1,2,3,被分配到主存的第2,4,1,5块中。回答:(1)主存地址应该用多少位来表示?(2)作业每一页的长度是多少?逻辑地址中的页内偏移应用多少位来表示?(3)写出作业中的每一页在主存块中的起始地址。
    1. 1M = 220,所以需要20位来表示主存地址
    2. 页号最多为255,所以需要8位来存放页号,页内偏移地址为220÷28 = 212,每一页的长度是4KB,偏移地址占12位
    3. 0页地址,起始地址8K
      1页地址,起始地址16K
      2页地址,起始地址4K
      3页地址,起始地址20K
  18. 操作系统的内存管理主要做什么?
    内存管理主要负责内存的分配和回收,malloc函数:申请内存,free函数:释放内存
    地址转换也就是将逻辑地址转换成为相应物理地址等功能
  19. 操作系统的内存管理机制简单分为连续分配管理非连续分配管理。连续分配管理方式是指为一个用户程序分配一个连续的内存空间,常见的如块式管理;同样地,非连续分配管理方式允许一个程序使用的内存分布在离散的内存中,常见的如页式管理、段式管理和段页式管理机制
    1. 块式管理
      远古时代的计算机操作系统的内存管理方式。将内存分为几个固定大小的块,每个块中只包含一个进程。如果程序运行需要内存,操作系统就分配它一块。当程序运行只需要很小的空间的时候,分配的这块内存很大一部分就被浪费了,这些在每个块中未被利用的空间,称之为内部碎片。
    2. 页式管理
      把主存分为大小相等且固定的一页一页的形式,页较小,相对相比于块式管理的划分力度更大,提高了内存利用率,减少了碎片。页式管理通过页表对应逻辑地址和物理地址。
    3. 段式管理
      页式管理虽然提高了内存利用率,但是页式管理其中的页并无任何实际意义。段式管理把主存分为一段一段,每一段的空间又比一页的空间小很多。但是,最重要的式段是有实际意义的,每个段定义了一组逻辑信息,例如,有主程序段MAIN,子程序段X,数据段D和栈段S等。段式管理通过段表对应逻辑地址和物理地址。
    4. 段页式管理
      结合了页式管理和段式管理的优点,把主存先分成若干段,每个段又分成若干页,也就是说段页式管理机制中段与段之间以及段的内部都是离散的。
  20. 快表和多级页表概念在分页内存管理中,很重要的两点是:
    • 逻辑地址到物理地址的转换要快
    • 解决虚拟地址空间大,页表也会很大的问题
  21. 快表(即TLB)是为了加快逻辑地址到物理地址的转换速度。快表是一种特殊的高速缓冲存储器,其中的内容是页表的一部分或全部内容。作为页表的Cache,它的作用与页表相似,但是提高了内存访问速率。单纯采取页表做地址转换,读写内存时CPU需要访问两次主存,有了快表,有时只需要访问一次高速缓冲存储器,一次主存,加快了查找速度。
    使用了快表之后的地址转换流程:
    1. 根据逻辑地址中的页号,查找快表
    2. 如果该页在快表中,直接从表中读取相应的物理地址
    3. 如果不在快表中,就访问内存中的页表,再从页表中得到物理地址,同时将该页的页号和物理地址记录到快表中
    4. 当快表填满后,又要登记新页时,就按照一定的淘汰策略淘汰掉快表中的一个页
  22. 多级页表的引入主要是为了避免把全部页表一直放在内存中占用过多空间。属于典型的用时间换空间的概念。
    为了提高内存的空间性能,提出了多级页表的概念,但是会浪费时间,因此提出了快表的概念。两者都利用到了程序的局部性原理。
  23. 分页机制和分段机制的共同点和区别?共同点:
    • 都是为了提高内存利用率,减少碎片
    • 页和段都是离散存储的,两者都是离散分配内存的方式。但是每个页和段中的内存是连续的。
  24. 区别:
    • 页的大小是固定的,由操作系统决定;段的大小不固定,取决于当前运行的程序
    • 分页仅仅是为了满足操作系统内存管理的需要,而段时逻辑信息的单位,在程序中可以体现为代码段,数据段,能更好地满足用户的需求。
  25. 使用虚拟地址(逻辑地址)访问内存有哪些优势?

    • 程序可以使用一系列相邻的虚拟地址来访问物理内存中不相邻的大内存缓冲区
    • 程序可以使用一系列虚拟地址来访问大于可用物理内存的内存缓冲区。当物理内存的供应量变小时,内存管理器会将物理内存页保存到磁盘文件,数据或代码页会根据需要在物理内存和磁盘之间交换
    • 不同进程的虚拟地址彼此隔离,一个进程中的代码无法更改正在由另一个进程或操作系统使用的物理内存。

      第九章 虚拟内存单元

      客观题

  26. 虚拟存储管理系统的基础是程序的局部性理论

  27. 进程在执行中发生了缺页中断,经操作系统处理后,应让其执行被中断的指令
  28. 请求式分页的优点
    • 需要的物理内存少
    • 支持多用户
    • 系统响应快速
    • 需要很少的I/O
  29. 当采用分页式虚拟存储管理时,如果在进程执行过程中需访问的页面为无效时,软件(硬件)将发出一个缺页中断
  30. 在请求分页管理中,已修改过的页面再次装入时一般应来自磁盘交换区
  31. 实现虚存最主要的技术是进程的部分对换
  32. 在采用虚存的系统中,要求程序运行前不必全部装入内存且在运行过程中不必一直驻留在内存。

    主观题

  33. 假设程序刚刚引用了一个虚拟内存的地址,描述可能发生以下的每个情况的情景

    • TLB未命中,没有缺页错误
      • 未命中说明在TLB中没有存储对应的页号
      • 没有缺页错误说明当前所需要定位的内容已经在内存中,操作系统能在页表中查找页号对应的帧号
      • 通过逻辑地址中的偏移量和查找到的帧号,可以定位到对应内容的物理地址
    • TLB未命中,有缺页错误
      • TLB未命中说明快表中没有存储对应的页号
      • 操作系统在查找页表之后发现,页表中也没有对应请求的页号,所以我们知道当前的内容未被加载到物理内存中,所以会发生缺页错误
    • TLB命中,没有缺页错误
      • TLB命中后,操作系统直接获取页号对应的帧号,通过逻辑地址中的偏移量和快表中查到的帧号,可以在内存中根据物理地址定位到需要找的内容
    • TLB命中,有缺页错误
      • 不可能,因为TLB命中说明当前要找的内容已经加载到物理内存中了,自然不可能发生缺页错误。只有当数据未被加载到内存中时才会发生缺页中断。
  34. 现在有一个页表,该系统有16位的虚拟地址和物理地址,每个页面为4096B,当页面被引用时,它的引用位会被置1。有一个线程会周期性地将引用位的所有值清零。页帧这一栏的‘—’表示页面不在内存中。页面置换算法是局部LRU。操作系统习题集 - 图16
    • 页面为4KB = 212,所以页号占4位,偏移量占12位
    • 将以下虚拟地址转换为对应的物理地址,还要在页表中为适当的条目设置引用位
      • 0xE12C
        • 页号 = 14,对应帧号 = 3
        • 物理地址 = 0x312C
      • 0x3A9D
        • 页号 = 3,对应帧号 = 10
        • 物理地址 = 0xAA9D
      • 0xA9D9
        • 页号 = 10,对应帧号 = 5
        • 物理地址 = 0x59D9
      • 0x7001
        • 页号 = 7,对应帧号 = 15
        • 物理地址 = 0xF001
      • 0xACA1
        • 页号 = 10,对应帧号 = 5
        • 物理地址 = 0x5CA1
    • 使用上述地址为直到,提供导致缺页错误的逻辑地址的示例
      • 0x4096
    • LRU页面置换算法在解决缺页错误时会从哪一组页面帧中选择?
      • 会从引用位为0的页面帧中选择
  35. 某系统采用页式虚拟存储管理,贮存每块为128个字节,现在要把一个128 × 128的二维数组置初值为“0”。在分页时把数组中的元素每一行放在一页中,假定系统只分给用户一页数据区。(1)对如下数据段,执行完要产生多少次缺页中断?

var A:array[ 1..128]of array[l..128」of integer;
for j :=1 to 128
do for i:=1 to 128
do A[i,j]: =0;

  1. 每一次遍历一列,相当于每次遍历128行一共遍历128次总共需要128*128次(2)为减少缺页中断的次数,请改写上面的程序,使之仍能完成所要求的功能,并统计缺页次数。改成每一次遍历一行,就只需要产生128次中断即可
    • 调换第二行和第三行位置即可
  2. 假设有一个按需调页存储器,页表放在寄存器中。处理一个页错误,当有空的帧可用或被置换的帧没有被修改过时要用8ms,当被置换的帧被修改过时用20ms。存储器存取时间为100ns。假设被置换的页中有70%被修改过,有效存取时间不超过200ns时,最大可以接受的缺页率为多少?
    设缺页率是P,有效存取时间 = 有缺页发生的处理时间 + 没有缺页发生的访问时间
    有缺页发生的处理时间 = 30%P处理没被修改过的页 + 70%P处理被修改过的页
    没有缺页发生的访问时间 = (1-P)*存储器访问时间

  3. 已知页面走向为1、2、1、3、1、2、4、2、1、3、4,且开始执行时主存中没有页面。若只给该作业分配3个物理块,当采用FIFO页面淘汰算法时缺页率为多少?假设现有一种淘汰算法,该算法淘汰页面的策略为当需要淘汰页面时,就把刚使用过的页面作为淘汰对象,试问就相同的页面走向,其缺页率为多少?

    • FIFO
      • 5/11
    • 假设的淘汰算法
      • 5/11
  4. 在一个请求式分页系统中,目前系统的利用率如下:
    CPU操作 :20%
    分页磁盘的I/O操作:97.7%
    其它I/O设备 :5%
    下列方法是否可以提高CPU利用率,分别说出你的理由。
    1)安装一个更加快速的CPU;
    ❌,因为系统处于频繁的换入换出过程中,CPU处于空闲状态,利用率不高,提高CPU速度无济于事。
    2)增加一个容量更加大的磁盘;
    ❌,不是因为磁盘交换区容量不够。
    3)增加更多的内存;
    ✔,因为使每个程序得到更多的页面,能减少缺页率,因而减少换入换出的过程,可以提高CPU的利用率。
    4)增加页面的大小。
    ❌,总内存不变,分页磁盘依然会不断地换入换出
  5. 什么是虚拟内存?
    虚拟内存是计算机系统内存管理的一种技术,定义了一个连续的虚拟地址空间,并且把内存扩展到硬盘空间。通过虚拟内存,程序可以用拥有超过系统物理内存大小的可用内存空间。另外,虚拟内存使得应用程序认为它拥有连续的可用的内存,实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘上,在需要时进行数据交换。这样会更加有效地管理内存并减少出错。
  6. 局部性原理局部性原理是虚拟内存技术的基础,正是因为程序运行具有局部性原理,才可以只装入部分程序到内存就开始运行。局部性原理的两方面表现:
    1. 时间性原理
      如果程序中的某条指令被执行,不久以后该指令可能再次执行;如果某数据被访问过,不久以后该数据可能再次被访问;
      产生时间局部性原理的典型原因:程序中存在着大量的循环操作
    2. 空间性原理
      一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也会被访问,即程序在一段时间内所访问的地址,可能集中在一定的范围之内。这是因为指令通常是顺序存放,顺序执行的,数据也一般是以向量、数组、表等形式存储的。
  7. 时间局部性是通过将最近使用的指令和数据保存在高速缓存存储器中,并使用高速缓存的层次结构实现的。
    空间局部性通常是使用较大的高速缓存,并将预读取机制集成到高速缓存控制逻辑中实现的。
    虚拟内存技术实际上就是建立了“内存—外存”两级存储器的结构,利用局部性原理实现高速缓存。
  8. 虚拟存储器
    基于局部性原理,在装入程序时,可以只将程序的一部分装入内存,其他部分保留在外存,就可以执行程序。由于外存往往比内存大得多,所以运行软件的内存实际上可以比实际内存大。在程序执行过程中,当访问的信息不在内存时,由操作系统将所需要的部分调入内存,然后继续执行程序。这另一方面,操作系统将内存中暂时不适用的内容换到外存上,从而腾出空间放需要调入内存的信息。这样,计算机就好像为用户提供了一个比实际内存大的多的存储器—虚拟存储器。
  9. 如何实现虚拟存储技术虚拟内存的实现是建立在离散分配的内存管理方式的基础上虚拟页式存储管理

    • 进程开始运行前不是装入全部页面,而是装入一个或零个页面
    • 运行后根据运行需要,动态装入其他页面
    • 当内存空间已满,而又需要装入其他新的页面时,则根据某种算法置换内存中的某个页面,以便装入新的页面

      第十章 文件系统接口

      客观题

  10. 日志文件一般组织为顺序文件

  11. 数据库文件的逻辑结构形式一般是记录式文件
  12. 文件系统在创建一个文件时,主要为该文件建立一个目录文件
  13. 在图形目录结构中,对文件的访问可以按文件的_进行
    • 符号链接
    • 相对路径名
    • 绝对路径名
  14. 逻辑文件常用的组织形式有
    • 索引文件
    • 顺序文件
    • 直接文件
  15. 直接文件的特点
    • 文件访问效率高
    • 记录存储冗余,浪费存储空间
    • 一般记录长度相等
  16. 某个Unix文件的访问控制信息是“111 101 001”,表示
    • 文件拥有者可以读、写、执行
    • 同组用户可以读、执行
    • 其他用户只能执行
  17. 树型目录无法实现文件共享。
  18. 目录中的每个目录项,都必须有一个指向文件控制块的指针,指明该文件在存储设备上的存放位置。❌

    主观题

  19. 一个文件系统的每个目录文件最多存放40个下级文件(目录文件或普通文件),每个物理块可以存放10个目录项。若下级文件为目录文件,上级目录指向该目录文件的第一块,否则指向普通文件的文件控制块。请问:1)如果采用单级目录,查找一个文件最多和最少需要读入多少个物理块?2)如果采用二级目录,查找一个文件最多和最少需要读入多少个物理块?

    • 单级目录,最多4个,最少1个
    • 二级目录,40个文件均为目录文件,下属1600个文件,共1640个文件,最多读入1640/10=164个物理块,最少1个
    • (104+108+1012)/(4/2)
  20. 在Unix系统的文件系统中引入 i 结点的目的是什么?请举例说明。目的是为了减小目录文件,降低读块数,提高目录性能,以此来减少检索文件需要平均读入的物理块数。例子
    • 物理块大小为4KB
    • 目录中有1万个文件,每个文件的目录项(FCB)大小为2KB
      • 目录文件大小 = 20000KB
      • 目录文件需要的物理块数 = 5000块
      • 检索文件平均需要访问的物理块数 = 2500.5块
    • 使用的 i node = 64B
      • 目录文件大小 = 640000B = 625KB
      • 目录文件需要的物理块数 = 157块
      • 检索文件平均需要访问的物理块数 = 79块
  21. 请谈谈Windows中采用的符号链接的缺点和优点。
    • 优点
      • 包含的文件名可以是任意文件或目录,可以连接不同文件系统的文件
      • 可以链接不存在的文件
    • 缺点
      • 原文件转移的时候,链接文件失效
      • 系统需要分配额外的空间用于建立新的索引节点和保存原文件的路径
      • 链接文件可以循环链接自己
  22. 请举例说明什么文件采用顺序文件较好,什么文件采用直接文件较好?为什么?
    • 顺序文件
      • 由一系列记录按照某种顺序排列形成,其中的记录通常是定长记录,因而能够用较快的速度查找文件中的记录
      • 适用场合:对记录进行批量存取时,即每次都要读或者写一大批记录。
      • 例如批处理应用(涉及到对所有记录的处理,如处理工资单),顺序文件也很容易存储在磁盘和磁带上。
    • 直接文件
      • 是在直接存取存储设备上,记录的关键字与其地址之间可以通过某种方式建立对应关系,利用这种关系实现存取的文件。这种存储结构是通过指定记录在介质上的位置进行直接存取的,记录无所谓次序。此外,这种存储结构又不需要索引,节省了索引存储空间和索引查找时间。
      • 适用场合:文件顺序较乱,又需要在极短时间内存取的场合
      • 例如实时处理文件、操作系统目录文件和编译程序变量名表
  23. 在树型目录中,是不是目录层次越多越好?为什么?请举例说明
    不是,在树形目录中查找一个文件,需要按路径名逐级访问中间结点,会增加磁盘的访问次数,降低查询速度。
    操作系统习题集 - 图17

    第十一章 文件系统实现

    客观题

  24. 在位示图中的第100个字节中的第1位(字节位)对应的物理块块号是806
    101*8-1-1 = 806
    操作系统习题集 - 图18

  25. 隐式链接分配方式无法快速读取文件的中间一块。
  26. 有一个文件系统采用混合索引。在它FCB中含有用4个字节表示的10个直接地址和1个间接地址(指向其一级索引表)。假如所有的磁盘块大小是8KB,那么文件最大可能为
    • 每个索引块可以记录8KB/4=2K个物理块地址
    • (10+2K)*8KB = 16464KB
  27. 内存文件系统中包含的数据
    • 分区表
    • 目录缓冲结构
    • 进程打开文件表
    • 系统打开文件表
  28. 连续分配的缺点

    • 浪费空间
    • 文件不能动态增长

      主观题

  29. 考虑一个磁盘的文件系统,它的的逻辑块和物理块的大小都为512字节。假设每个文件的信息已经在内存中,针对每种分配策略(连续,链接和索引)1)这个系统的逻辑到物理地址的映射在系统中是如何实现的?

    • 设逻辑地址LA,物理地址(B, D)
    • 连续分配
      • Q = LA / 512
      • D = LA mod 512
      • B = Q + 起始块号
    • 链接分配
      • Q = LA / 511
      • D = LA mod 511 + 1
      • B = 链接表中 Q+1 位置对应的块号
    • 索引分配
      • Q = LA / 512
      • D = LA mod 512
      • B = 索引表中 Q 块对应的物理地址
  30. 2)如果当前处于逻辑块10(即最后访问的块为块10),并且需要访问逻辑块4,必须从磁盘上读取多少个物理块?
    • 连续分配:1个
    • 链接分配:4个
    • 索引分配:2个
  31. 考虑一个文件系统采用 i node 来表示文件,磁盘块大小为 8KB,磁盘块指针需要 4 字节。这个文件系统具有 12 个直接磁盘块,以及一级的、二级的和三级的间接磁盘块,这个文件系统文件的最大大小是什么?
    12 x 8 KB+ 2048 x 8 KB + 2048 x 2048 x 8 KB + 2048 x 2048 x 2048 x 8 KB = 64 TB
  32. 一个文件有20个磁盘块(块号:0-19),假设文件控制块在内存(如果文件采用索引分配,索引表不在内存)。在下列情况下,请计算在连续分配,链接分配,单级索引分配三种分配方式下,分别需要多少次磁盘I/O操作?(每读入或写出一个磁盘块需要一次磁盘I/O操作,另外,假设在连续分配方式下,文件头部无空闲的磁盘块,但文件尾部有空闲的磁盘块。1)在文件开始处删除一个磁盘块;2)在文件第15块前添加一个磁盘块并写入内容;3)在文件结尾处删除一个磁盘块;4)在文件结尾处增加一个磁盘块并写入内容。
    • 删除第0块
      • 连续分配:直接修改FCB中的首块号和块数,0次
      • 链接分配:读1次第0块,根据第0块的尾指针,找到第1块的首块地址,然后直接修改FCB中的首块地址即可,总共1次
      • 索引分配:读1次索引表,写1次索引表
    • 第15块(块号为14)前写一个磁盘块
      • 连续分配:对原14-19进行1次读写操作,12次,然后新写1块,1次,总共13次
      • 链接分配:读0-13块,写新增的1块,修改第13块尾指针,总共14+1+1=16次
      • 索引分配:写1次新块,读1次索引表,写1次索引表,总共3次
    • 删除第19块
      • 连续分配:直接修改FCB中的块数,0次
      • 链接分配:读0-18块,写18块尾指针,总共19+1=20次
      • 索引分配:读1次索引表,写1次索引表,总共2次
    • 19块后新增1块
      • 连续分配:写1次,修改FCB不计,总共1次
      • 链接分配:根据FCB读出最后块号,写入新块,修改19块尾指针,共3次
      • 索引分配:写1次新块,读1次索引表,写1次索引表,总共3次
  33. 目录文件采用链接式,每个磁盘块存放10个下级文件的描述,最多存放40个下级文件,若下级文件为目录文件,上级目录指向该目录文件的第一块,否则指向普通文件的文件控制块。普通文件采用二级索引形式,文件控制块中给出12个磁盘块地址,前10个磁盘块地址指出前10页的物理地址,第11个磁盘块地址指向一级索引表,一级索引表给出256个磁盘块地址,即指出该文件第10页至第265页的地址,第12个磁盘块地址指向二级索引表,二级索引表中指出256个一级索引表的地址。请问:1)该文件系统中的普通文件最大可有多少页?2)若要读文件/A/D/K/Q中的某一页,最少要启动磁盘几次?最多要启动磁盘几次?(每读一个磁盘块需要启动一次磁盘操作)
    • 普通文件最多可以有 10 + 256 + 2562个页
    • 最少
      • 每次找下级目录的时候,需要的下级目录信息都在第一个磁盘块上
      • 因此读目录最少需要3次
      • 读入文件 Q 的FCB需要1次
      • 读文件的时候,理想情况下所需要找的页面就在前10个直接索引中,因此再读一次就找到所需的页,读文件最少1次
      • 总共最少5次
    • 最多
      • 读目录的时候,ADK每个都在每层的最后一个磁盘块上
      • 因此读目录最多12次
      • 读取文件 Q 的 FCB 需要1次
      • 读文件的时候,所需页面如果在2级索引中,需要读一次1级索引表,读一次2级索引表,再读一次页面,读文件最多3次
      • 总共最多16次
  34. 设想一个在磁盘上的文件系统的逻辑块和物理块的大小都为512B。假设每个文件的FCB已经在内存中,对3种分配方法(连续分配,显式链接分配和单级索引分配),请问:1)逻辑地址到物理地址的映射在系统中如何实现?2)举一个例子说明单级索引分配中,逻辑地址到物理地址的映射过程。
    • 设逻辑地址LA,物理地址(B, D)
    • 连续分配
      • Q = LA / 512
      • D = LA mod 512
      • B = Q + 起始块号
    • 显示链接分配
      • 先访问链接表,根据逻辑地址直接找到物理地址
    • 单级索引分配
      • Q = LA / 512
      • D = LA mod 512
      • B = 索引表中第 Q 项存放的块号
  35. 请举一个具体文件系统的例子,来说明文件系统一般由哪些内容组成?
    一般由文件分类、文件目录结构、文件逻辑结构、文件物理结构、存储器管理、系统调用、磁盘结构等组成。

    第十二章 大容量存储器结构单元

    客观题

  36. 一个数据库服务器的磁盘一般采用的磁盘调度算法是SCAN

  37. 一个硬盘的传输率为8Gb/s,理论上传输4MB数所需要的时间的为4ms
  38. 一个磁盘的平均旋转延迟大约为1ms,则该磁盘的RPM为30000

    旋转延迟指的是磁盘旋转一周所需时间的1/2 所以 RPM = 1000/(1x2)x60 = 30000

  39. 一个磁盘有2个磁片,每个磁片上有120个柱面,每个柱面有64个扇区。如果用位示图来表示每个扇区的使用情况,则这个位示图的大小为3840字节。

    位示图就是每个字节的每个位去表示使用情况,即1个字节表示8个扇区,每个磁片需要算2面

  40. 一个磁盘的磁头数目是由磁盘面数决定的。

  41. 移动磁臂到所需磁道的时间是寻道时间
  42. 将物理磁盘划分为扇区的操作有低级格式化完成
  43. 常用的三级存储设备包括:光盘,U盘
  44. 磁盘调度的目的是为了减少定位时间
  45. 一般而言,光盘上的数据只能采用顺序访问。×应该是磁带

    主观题

  46. 磁盘访问时间由哪几部分组成?每部分时间应如何计算?
    磁盘访问时间由三部分组成,随机访问时间(寻道时间+旋转延迟时间),传输时间和系统开销时间。
    平均寻道时间 = 1/3 磁道移动所花时间
    旋转延迟时间 = 平均旋转1/2圈的时间 = 1/(2*RPM/60),此处的 RPM 为磁盘每分钟旋转速度
    传输时间 = 块大小 / 传输率
    系统开销时间通过实际测量

  47. 若磁头的当前位置为100磁道(共200磁道),磁头正向磁道号增加方向移动。现有一磁盘读写请求队列:23、132、19、61、190、29、4、18、40。若采用先来先服务FCFS、最短寻道时间优先SSTF、扫描算法SCAN和C-SCAN,试计算出平均寻道长度各为多少?
    先来先服务:100-23 + 132-23 + 132-19 + 61-19 + 190-61 + 190-29 + 29-4 + 18 -4 + 40-18 = 692,692/9 = 76.9
    最短寻道时间优先:132 -100 + 190-132 + 190-61 + 61-40 + 40-29 + 29 -23 + 23-19 + 19-18 + 18-4 = 276,276/9 = 30.7
    SCAN:200-100 + 200-4 = 296,296/9 = 32.9
    C-SCAN:200-100 + 200 + 61 = 361,361/9 = 40.1
  48. 磁盘访问请求往往不是均衡分布在磁盘各处的。例如,在一个采用索引分配的文件系统中,索引表所在的柱面比仅包含文件内容的柱面的访问频率要高。假设知道50%的请求都是对一小部分固定数目柱面。那么,请问对这种情况,本章讨论的调度算法中哪种性能较好?为什么?
    SSTF 的性能比较好,因为 FCFS 会产生很多离开这一小部分的移动,但是这一小部分又应该以更高的需求一起连续地满足才能保证高效率。
  49. 请比较RAID0和RAID1在读写文件方面的性能。
    RAID0 的性能更好,RAID0 通过条状分散技术将数据分散到多个硬盘上,从而使得 RAID 系统能够实现并行化读写功能,其数据被分割的数量和 RAID 阵列使用的硬盘数有关,由于没有校验过程,所以 RAID0 读写速度比 RAID1 快。
    RAID1 读写性能没有较大变化,更注重可靠性。
    RAID1 采用磁盘镜像技术,通过冗余使得多个硬盘同时存储相同数据,若单个磁盘空闲时则 RAID 性能与之相比无太大变化,但当单个磁盘损坏后,RAID1 仍可去读取另一块磁盘数据。
  50. 一个磁盘有8个盘片,每个盘片有200个磁道,每个磁道划分为128个扇区。请问:
    1)这个磁盘的容量多大?
    2 x 8 x 200 x 128 x 512B = 200MB
    2)如果磁头移动一个磁道距离的时间是0.02ms,那么这个磁盘的平均寻道时间大约是多少?
    200/3*0.02 = 4/3 = 1.33ms

    第十三章 I/O 系统

    客观题

  51. 在多进程的并发系统中,不会因为竞争磁盘而产生死锁

  52. 在采用SPOOLing技术的系统中,用户的打印数据首先被送到外存固定区域
  53. 信息交换单位分类可将设备分为块设备和字符设备。
  54. I/O设备与CPU逻辑上通过端口进行通信。
  55. SPOOLing技术提高了独占设备的利用率。
  56. 文件管理和设备管理是密切相关的,设备管理是文件系统的基础,文件管理必须依赖设备管理才能最终完成相应的功能。
  57. 独占设备应该采用静态分配的策略。
  58. 使用内存映射I/O的设备是显卡
  59. 低速设备一般被设置成独占设备

    主观题

  60. 什么是缓冲?请简述为什么要在核心I/O子系统中引入缓冲机制。现代操作系统中,几乎所有的I/O设备在与CPU交换数据时都用了缓冲区。缓冲区是用来保存两个设备之间,或者设备和应用程序之间所传输数据的一个存储区域,可以有专门的硬件组成,更多的是用内存。引入缓冲的原因:

    • 缓和 CPU 和 I/O 设备之间速度不匹配的矛盾
    • 减少对 CPU 的中断频率,放宽对中断响应时间的限制
    • 提高 CPU 和 I/O 设备之间的并行性
  61. 有几种I/O控制方式?各有何特点?
    • 轮询的可编程 I/O 方式
      • 实现简单,也不需要多少硬件支持;效率偏低,CPU会长期处于忙等
    • 中断的可编程 I/O 方式
      • 能实现CPU和设备以及设备与设备之间的并行操作,效率更高;缺点是如果配置的外设数目多,且都是以中断方式进行并行操作,可能消耗大量CPU时间或因CPU来不及处理而造成数据丢失
    • 直接存储器访问(DMA)方式
      • 应用程序通过 DMA 控制器绕过 CPU,直接在 I/O 设备和内存之间传输数据,大大减少了CPU进行中断处理的次数;有一定的局限性,例如对外设的管理和某些操作仍有CPU控制,多个DMA的使用也不经济
    • 通道控制方式
      • 通道是专用I/O处理机,CPU只需发出I/O指令,由通道具体完成,大大减轻了CPU的工作,同时一台通道能控制多台外设;通道价格较高。
  62. I/O设备怎么分类?有几类I/O设备?
    • 按使用特性分类
      • 存储设备,I/O 设备
    • 按传输速率分类
      • 低速设备:键盘、鼠标、语音输入输出
      • 中速设备:行式打印机、激光打印机等
      • 高速设备:磁带机、磁盘机、光盘机等
    • 按信息交换的单位分类
      • 块设备、字符设备
    • 按设备的共享属性分类
      • 独占设备、共享设备
    • 按 I/O 方向分类
      • 只读、只写、读写设备
  63. 简述中断处理过程。
    1. 检测是否有未响应的中断信号
    2. 保护被中断进程的 CPU 环境
    3. 转入相应的设备处理程序
    4. 中断处理
    5. 恢复 CPU 的现场并退出中断
  64. 什么是Spooling技术?举例说明它的原理。
    • 为了缓和CPU的高速性与I/O设备的低速性间的矛盾而引入了SPOOLING技术。
      • 程序模拟脱机输入,把低速 I/O 设备上的数据传送到高速磁盘上
      • 另一程序模拟脱机输出,把数据从磁盘传送到低速输出设备
      • 外围操作和 CPU 对数据的处理同时进行,这种在联机情况下实现的同时外围操作称为假脱机技术Spooling
  65. 假脱机打印机系统
    打印机属于独占设备,利用 Spooling 技术,可将其改造为共享设备。
    共享打印机技术被广泛用于多用户系统和局域网络中。
    • 磁盘缓冲区:磁盘空间,暂存用户程序的输出数据
    • 打印缓冲区:设在内存,暂存从磁盘缓冲区送来的数据
    • 假脱机管理进程和假脱机打印进程
      • 假脱机管理进程为每个要求打印的用户建立一个假脱机文件,并放入文件队列中
      • 假脱机打印进程依次对队列中的文件进行打印