操作系统 大题模板总结 答案

目录 展开

1 环境 & 机制

为什么要将指令集合划分为不同的特权级别?(为什么要有 CPU 状态)

操作系统需要有保护的功能,即使用户进程与用户进程之间互不干扰,同时用户进程不能对系统轻易更改。因此需要硬件提供基本的运行机制,将 OS 与用户分离。机制的具体表现便是将 CPU 划分成不同的特权级别,在不同的特权级别运行不同的指令。因此指令集合也被划分为不同的特权级别。

枚举只能在内核态运行的指令

简述中断异常区别

中断:异步的,外部事件,与现行指令无关,与cpu模式无关;指令周期结束后相应;总是返回下一指令
异常:由正在执行的指令引发;立即响应;可能返回当前/下一,可能不返回

简述内核处理被触发和内核处理流程

· 设备给 CPU 发中断信号
· CPU 处理完当前指令之后检测到中断,判断中断来源并发送确认信号
· CPU 切换为内核态,在系统栈保存被中断程序的 context(PC PSW)
· CPU 根据中断码查中断向量表,获得中断处理程序入口地址,赋给 PC
· 新的指令周期开始,CPU 控制转移到中断处理程序
· 中断处理程序保存现场信息,实施中断操作
· CPU 检测中断返回指令,从系统栈恢复 context,PC PSW 恢复原值

简述 IA32 系统调用流程

· 判断是系统调用指令,得到系统调用号 a,设系统调用总入口程序对应的中断处理程序的中断号为 b
· 从 IDTR 读 IDT 地址,访问 IDT 的第 b 项,获得中断描述符
· 从 GDTR 读 GDT 地址,从中断描述符读段选择符,访问 GDT 的对应表项,得到段描述符
· 从段描述符得到系统调用总入口程序的段基址,从中断描述符得到偏移量,凑成系统调用总入口程序地址
· 特权级改变,进行堆栈切换(用户栈 ➡️ 内核栈),CPU 从任务状态段 TSS 中装入新的栈指针(SS:EIP),指向内核栈
· 用户栈信息、EFLAGS、用户态 CS、EIP 内容压栈,保存 context
· 复位 TF,IF 保持不变
· 进入系统调用总入口程序,保存现场,将参数保存到内核堆栈;通过查系统调用表把控制权转给相应的系统调用处理例程或内核函数
· 执行系统调用处理例程
· 恢复现场,返回用户程序

简述设计增加系统调用过程

· 添加中断/异常机制
· 选择一条指令作为访管指令
· 为每个系统调用给定一个编号
· 创建系统调用表,存放系统调用服务例程的入口地址

系统调用 VS 函数调用/API?

思路:区别(由谁组成,给谁服务,组成谁,哪里运行)联系(一个对应着一或多个,没用的)

区别:函数调用是封装好的编程语言函数,为应用程序提供的接口,是应用程序的一部分,可以运行在用户空间中;系统调用是封装好的内核函数,为编程语言或应用程序提供的接口,是操作系统的一部分,运行在内核空间中。
联系:许多函数是封装系统调用得到的,执行一个函数调用可能对应着一或多个系统调用。没有使用系统调用的库函数,执行效率通常比系统调用要高,因为使用系统调用时,需要上下文的切换以及状态的转换。

设计 OS 要对“时间与空间”“公平与性能”进行权衡,请各具一个例子说明

· 时间与空间:单层页表访问页目录项最快,却需要在内存中连续的空间存储页表,占用空间较大;多级页表无需内存的连续空间存储页表,却需多次访存,花费时间较长;经过权衡后的 UNIX 三级索引结构,既有直接寻址,又有123级索引,做到了时间空间的平衡
· 公平与性能:SJF 可以得到最短的平均周转时间,有最好的性能,却对长进程不公平;FCFS 最为公平,却性能不行;经过权衡后的 HRRN,既兼顾了等待时间这一公平的参数,也兼顾了进程运行时间这一性能的参数,做到了公平与性能的平衡

2 进程 & 线程

PCB 的作用?包括什么?在创建,撤销,阻塞,唤醒,切换,调度进程的过程中起什么作用?

· 作用:PCB 是操作系统为控制进程专门的数据结构,用于记录进程的各种属性,描述进程的动态变化过程,是操作系统感知进程存在的唯一标志,PCB 与进程一一对应
· 包括:进程描述信息(PID UID 进程名 进程组关系),进程控制信息(当前状态 优先级 代码执行入口地址 程序磁盘地址 运行统计信息 进程间同步通信信息 队列指针 消息队列指针),资源使用情况(虚拟地址空间状况 打开文件表),CPU现场信息(寄存器值(通用 PC PSW 栈指针)指向该进程页表的指针)
· PCB 随进程的创建而创建,随进程撤销而清除;在阻塞,唤醒,切换等状态变化中,OS 对 PCB 的标志位做对应的修改
· 切换:若是下 CPU,其运行上下文(PC IR 通用寄存器 栈指针 其他控制器内容)将存入 PCB;若是上 CPU,则 PCB 中内容存入相应寄存器,恢复上下文
· 调度:进程调度队列由 PCB 组成,PCB 在队列中的顺序决定了其对应进程被调度的顺序

PCB 怎么描述进程地址空间?

PCB 中存放对应进程的页表基址与页表长度,进程上 CPU 时,页表基址 & 长度存入 PTR,实现虚实地址转换的基础

简述进程创建步骤;为何系统会将56两步一起完成?

1 分配 PCB
2 初始化机器存储器
3 初始化页表
4 将程序代码从磁盘读入内存
5 将处理器设置为用户态
6 跳转到程序的起始地址
第六步跳转指令是特权指令,只能在内核态运行,因此6不能晚于5开始;第五步是设为用户态,需要修改PSW,通过执行特权指令实现,需要到这个指令的起始地址开始执行,因此无法先跳转。故两步一起完成

简述进程切换的过程与开销

· 切换过程:保存 A context 到 PCB,从 B PCB 读信息恢复 B context
· 开销:直接开销-保存 & 恢复寄存器,系统栈;间接开销:缓冲区,Cache,快表均会随进程切换而失效

为什么要设置创建 & 挂起状态?

· 创建态:进程已创建,但 OS 还未同意进程运行
· 挂起态:运用虚存技术时,进程可能被换到外存上,称之为挂起态

OS 对用户级线程和内核级线程支持有什么不同?各列举一个支持用户级线程和内核级线程的实例操作系统的名字

· 内核级线程:在内核态进行切换;内核管理以线程为单位 Windows
· 优:快 应用调度 任何os;缺:进程对应处理机 阻塞
· 用户级线程:在用户态进行切换;内核管理以进程为单位 Unix
· 全都要内核

3 CPU 调度

何种进程调度算法会引起“优先级倒置”?举例描述。如何解决?

· 可抢占的优先级调度算法。
· 优先级高到低 ABC,C 在处理及上占用资源 D 运行时,被 B 抢占。当 A 请求运行时,需要的资源 D 被更低优先级的 C 占用,而 C 由于优先级低于 B,无法上处理机交出资源 D。
· 解决:
1 将所有进入临界区的进程优先级临时设为最高,避免抢占
2 在高优先级进程需要无法上处理机的低优级进程的资源时,临时将低优先级进程的优先级升高,上处理机后将资源让出,给高优先级进程使用
3 进入临界区后,关闭中断,不允许抢占

会导致饥饿的调度方式有哪些?会导致优先级反转的调度方式有哪些?

饥饿:SJF,SRTN,Feedback,优先级调度

简述多级反馈队列调度的设计思想。请说明这一设计如何处理 IO 密集型和 CPU 密集型进程?有无饥饿?如何解决?

· 设置多级队列,每级队列优先级不同,第一级队列优先级最高;每级队列时间片长度不同,第一级队列时间片最短。进程先进入第一级优先级,以 RR 运行,运行后回到原队列或低一级队列。当高优先级队列为空,运行低一级优先级队列。
· 对于 IO 密集型进程,时间片用尽后回到当前队列;对于 CPU 密集型进程,时间片用尽后去低一级队列
· 会使 CPU 密集型进程饥饿,可以通过加大低级优先级队列时间片缓解。而要彻底的解决所有饥饿,可以在最高优先级队列结合 HRRN

4 同步 & 互斥

主要就是 PV 大题

针对单处理器和多处理器,说明自旋锁的优势与劣势

· 对于单处理器,自旋锁是不可取的。其劣势在于,进程占用 CPU 忙等资源,而资源的拥有者进程无法上 CPU,无法交出资源,造成死锁;
· 对于多处理器,资源的拥有者可以上其他 CPU 交出资源,故可取。而自旋锁独特的优势在于,正是因为忙等,而无需进程切换,避免了进程切换的开销

比较自旋锁 VS 读写锁

· 自旋锁:无法进入临界区,就保持忙等,不断询问;
· 读写锁:多个读者可以同时进入内存,写者与其他进程互斥

比较 Hoare & Mesa

5 存储模型

简述虚拟地址转换过程

17考过 略

虚存页表项包含哪些内容?为何这样设计?

· 页框号:寻找磁盘中页框地址
· 有效位:表示该页在内存 or 磁盘
· 访问/修改位:在内存中是否被访问/修改过
· 保护位:只读 or 可读写

简述反转页表的设计思路及虚实地址转换过程

· 设计思路:从物理地址空间出发,给整个主存,而非每个进程,建立一张页表。页表存储主存单元与进程及其虚拟地址间的映射关系。由于反转页表长度与物理地址空间大小成比例,故反转页表比页表小得多
· 转化过程:将虚拟页号部分地址通过哈希函数得到散列值,散列值指向反转页表的某特定位置,从该位置开始,按照链表顺序查找即可

详细写出写时复制的实现(包括设计思路,用到的数据结构)

· 思路:多个进程同时访问同一页面,它们会共同获取相同的指针指向页面。直到某一进程希望修改页面内容时,系统才会复制一份副本给该进程,而其他进程所见的最初资源不变。新复制的页面对执行写操作的进程是私有的,对其他进程不可见
· 用到的数据结构:MOOC 真的没讲啊 == 实验班的题太变态了

写时拷贝&内存映射文件的相似之处

· 写时拷贝是 …
· 内存映射是将大文件映射到虚拟内存空间的一部分,访问文件无需打开写入等系统调用,只需像访问数组一样访问。同时也无需将文件一口气全部读入内存,可利用缺页中断实时读入需要的部分
· 相似:都是利用内存解决对文件的操作。前者减少了拷贝数量,后者减少了主存的占用。(硬凑的,感觉肯定不对)

6 文件系统

简述 Unix FCB 内容及作用

进程通过 fopen 系统调用读取文件的过程 与 PCB FCB 的关系?

· 过程:
1 通过文件路径查找目录,得到文件名或文件的 i 节点
2 根据文件名查找系统打开文件表,查看文件是否在其中。若在,共享计数值 +1,若不在,新建表项,计数值置1
3 根据用户权限打开方式、共享说明等检查操作合法性
4 在用户打开文件表中填写该文件信息,并指向系统打开文件表中的对应项
· 与 PCB :PCB 中存放用户打开文件表,fopen 过程需改动 PCB
· 与 FCB :fopen 过程主要是查找 FCB 及读取其中信息的过程

简述 Windows 文件缓存

7 IO 系统

以打印机输出为例,说明 IO 软件设计思想

分层,子集 隐藏 提供,硬件 软件,用户

简述内存映射编址 与 IO 独立编址的区别

内存独立 IO
指令访存指令IO 指令
地址空间
优点所有访存指令可访问 IO不占内存、易区分访存 / IO 指令
缺点占内存指令少

这段代码会有什么缺点?如何解决?

内存映射 IO 的缺点:对设备的控制寄存器不能使用 Cache,一旦使用,则从第二次开始,每次系统将从缓存中读取设备状态,而不是设备的真实状态

IO控制方式比较:

8 死锁

以哲学家就餐问题为例,描述如何预防死锁

· 破坏循环等待:有序分配
· 破坏不可抢占:OS 负责抢占
· 破坏占有等待:静态分配 / 无用让出
· 破坏独占设备:SPOOLING

发表评论