OS 复习提纲
1. OS的概念、特性
概念
操作系统是计算机系统中的一个系统软件,是一些程序模块的集合。
特性
- 并发/并行
- 共享:操作系统与多个用户程序共同使用计算机系统中资源,其中分为:
- 互斥共享:资源不能同时使用。
- 同时共享:资源可以同时使用。
- 虚拟:一个物理实体映射为若干个对应逻辑实体(分时或分空间)。存储器中每个进程都有独立的虚拟地址空间(存代码、数据、堆栈)。
- 随机:OS要对不可预测的事件进行响应处理。
2. OS的功能
1. 资源分配
- 静态分配策略:把进程所有需要的资源先都分配给它,但这可能导致资源浪费。
- 动态分配策略:进程什么时候需要资源就什么时候分配,如果该资源已被占用,进程会阻塞并进入相应的等待队列。
2. 资源管理
- 进程/线程管理
- 存储管理
- 文件管理
- 设备管理
- 用户接口管理
3. OS的发展历史及分类
1) 批处理操作系统
工作方式
- 用户将作业(作业:由作业说明书、用户程序、数据组成,且通常为卡片形式,输入设备为卡片机)交给系统操作员。
- 系统操作员将多个作业组成一批作业,输入到计算机系统中,形成一个自动转接的连续作业流。
- 启动OS。
- OS自动执行每个作业,用户无法干预。
- 执行结果交给用户。
追求目标
- 提高资源利用 率,增加作业处理吞吐量。
总体过程
- 从卡片机读入用户作业和编译链接程序,编译链接生成可执行程序,执行程序并输出执行结果。
问题
- 慢速I/O设备与CPU处理速度差异过大,导致CPU在等待数据时空闲。
2) Spooling技术
利用磁盘做缓冲,将输入、计算、输出分别组成独立的任务流,使I/O和计算并行(假脱机:磁盘在高效的计算机上)。
工作流程
- 用户作业输入磁盘输入。
- 按照某种调度策略,选几个搭配得当的作业调入内存。
- 作业运行结果输出到磁盘的输出。
- 运行结果从输出井到打印机。
备注:输入输出只到输入或输出井,主机不用直接与慢速的I/O打交道,能提高效率和速度。
现代打印机仍然使用这种技术。
应用Spooling技术后:
3) 分时操作系统
工作方式
多个终端(只有I/O设备没有计算能力)连接到同一主机中,然后OS将CPU时间分成若干个片段,OS以时间片为单位,轮流为每个终端用户服务,每次服务使用掉一个时间片。
追求目标
- 及时响应。
- 响应时间:指从终端发出命令到系统给予回答所经历的时间。
4) 实时操作系统
指计算机能及时响应外部时间请求,在规定的严格时间内完成对该事件的处理。
追求目标
- 对外部请求在严格时间范围内做出响应。
第二章 OS硬件环境
1. 管态与目态
通常CPU执行两种不同性质的程序:一种是操作 系统内核程序;另一种是 用户自编程序或系统外层的应用程序。对操作系统而言,这两种程序的作用不同,前者是后者的管理者,因此“管理程序”要执行一些特权指令(不允许用户直 接使用的指令,如I/O指令、置中断指令等),而“被管理程序”出于安全考虑不能执行这些指令。所以我们将机器分为两种状态,通过状态的切换来保护操作系统程序。
- 管态(核心态、系统态):在此状态下,CPU可以执行指令系统的全集,是一种具有较高特权的执行状态,可以访问所有寄存器和存储区。另外OS内核通常是运行在系统态的,进程控制是由OS内核实现。
- 目态(用户态):在此状态下,CPU只能执行非特权指令。可访问指定的寄存器和存储区,只具有较低的特权。一般的用户程序在此状态下执行。
所谓特权指令是指有特权权限的指令,由于这类指令的权限最大,如果使用不当,将导致整个系统崩溃。比如:清内存、置时钟、分配系统资源、修改虚存的段表和页表,修改用户的访问权限等。
为了保证系统安全,这类指令只能用于操作系统或其他系统软件,不直接提供给用户使用。因此,特权执行必须在核心态执行。实际上,cpu在核心态下可以执行指令系统的全集。形象地说,特权指令就是 那些儿童不宜的东西,而非特权指令则是老少皆宜。
为了防止用户程序中使用特权指令,用户态下只能使用非特权指令,核心态下可以使用全部指令。当在用户态下使用特权指令时,将产生中断以阻止用户 使用特权指令。所以把用户程序放在用户态下运行,而操作系统中必须使用 特权指令的那部分程序在核心态下运行,保证了计算机系统的安全可靠。从用户态转换为核心态的唯一途径是中断或异常
2. 多级存储体系
原因
计算机采用多级存储,主要是基于 容量、速度、成本 这三个因素考虑的。
多级存储结构 从上到下,容量越来越大,速度越来越慢,成本越来越低;
同时这种多级存储的模式有利于计算机CPU发挥其性能,还解决了数据存储的问题;
因为外存虽然成本低,但是比较慢;它的运行频率、工作频率,数据的传送情况都是比较慢的;
寄存器虽然速度很快,但是成本高,容量小;
Cache
Cache是现代计算机在CPU和主存之间设置的一个高速、小容量的缓冲存储器,填补了CPU和主存在速度上的巨大差距,可用用于提高整个计算机系统的性能。
Cache先被访问,如果不命中,内存后被访问
cache 映射
◆ 直接映像 ➢ 某一主存块只能固定映射到某一缓 冲块 ◆ 全相联映像 ➢ 某一主存块能映射到任一缓冲块 ◆ 组相联 ➢ 某一主存块只能映射到某一缓冲组中的任一块
靠近CPU的Cache要求高速,采用直接相联或路数较少的组相联;中间层次采用组相联;距离CPU最远的Cache采用全相联,对利用率强调越高。
cache 优化
①强制性失效:当第一次访问一个块时,需要从下一级存储器中调入Cache,这种失效称为强制性失效。也称为冷启动失效或首次访问失效。强制性失效发生在对初始空Cache的访问中。 ②容量失效:由于Cache容量有限,使得程序执行所需的块不能全部调入Cache中,所以当某些块被替换后如果重新被访问就会发生失效。这种失效就称为容量失效。 ③冲突失效:在组相联或直接映像Cache中,多个块映像到同一组(个)块中,则会出现该组中的某一个块被别的块替换后又被重新访问的情况,这就发生了冲突失效。冲突失效也称为碰撞失效或干扰失效。
关于Cache失效的一些结论:
①Cache容量对失效的影响:强制性失效不受到Cache容量的影响,但是容量失效随着容量的增加而减少; ②相联度对失效的影响:强制性失效和容量失效不受相联度的影响,但是相联度越高冲突失效就越少; ③经验规则:大小为N的直接映像Cache的失效率约等于大小为N/2的2路组相联Cache的失效率。
在一个存储层次中如果高一级的存储器的容量比程序所需的空间小得多,就有可能出现由于过多容量失效而产生的抖动现象:大量数据要进行替换,程序执行的大部分时间都用于在两级存储器之间移动数据,机器的运行速度接近于只有第二级存储器的情况,甚至更慢。
局部性原理表现在以下两个方面:
- 时间局部性 :如果程序中的某条指令一旦执行,不久以后该指令可能再次执行;如果某数据被访问过,不久以后该数据可能再次被访问。产生时间局部性的典型原因,是由于在程序中存在着大量的循环操作。
- 空间局部性 :一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问,即程序在一段时间内所访问的地址,可能集中在一定的范围之内,这是因为指令通常是顺序存放、顺序执行的,数据也一般是以向量、数组、表等形式簇聚存储的。
虚拟存储
虚拟存储器的分块
虚存的分块方式:虚存的分块可以分为段式、页式和段页式三种。采用哪一种分块方式对操作系统的性能具有很大的影响。 ①页式分块:页式虚存把空间划分为大小相同的页面,其中每个存储单元的地址都是单一、固定长度的地址字,由页号和页内位移两部分组成。 ②段式分块:往往是按照程序的逻辑结构进行划分,段的长度可变。这种方式中地址一般用两个字表示:一个是段号,另一个是段内位移。 ③段页式分块:同时采用段式和页式,也就是将每个段划分为若干个页面。这种方式不仅保持了段作为逻辑单元的优点,又简化了替换操作的实现。
第三章 用户接口与作业管理
作业的概念,作业级接口与程序级接口
1. 作业的概念
作业就是用户一次请求计算机系统为用户完成任务所做工业的综合
2. 接口
- **程序级接口:**系统为用户在程序一级提供有关服务而设置的,由一组系统调用命令组成
- 作业级接口: 系统为用户提供的各种命令接口,用户利用这些操作命令来组织和控制作业的执行或管理计算机系统
JCB;作业的状态及转换
作业状态及转换
一个作业在其生命周期内会经历多个状态,这些状态的变化反映了作业当前所处的阶段。常见的作业状态包括:
- 提交状态:当用户将作业提交给系统后,作业处于提交状态。此时,作业的信息正在进入外存的“作业收容井”中。
- 后备状态:作业已全部进入外存,等待被调度进入内存。在此状态下,系统为作业创建了作业控制块(JCB),记录了作业的各种属性和状态信息。
- 执行状态:作业被选中加载到内存中开始执行。这个阶段可能包括编译、链接、装入和实际运行等子阶段。一旦作业进入了执行状态,它就处于宏观上的运行中。
- 完成状态:作业已经执行完毕,所有资源已经被回收,作业结果可能已经输出。此时作业处于完成状态,等待最终的数据输出或删除。
作业控制块(JCB)
作业控制块(JCB)是作业在系统中存在的唯一标志,它记录了与该作业有关的所有必要信息。JCB的内容通常包含以下方面:
- 作业标识:如作业号、用户名等。
- 作业类型:CPU繁忙型、I/O繁忙型、批量型、终端型等。
- 作业状态:反映作业当前的状态,如后备、执行、完成等。
- 资源需求:作业所需的内存大小、I/O设备类型和数量等。
- 优先级:根据作业的性质设定的优先级。
- 其他信息:如预计运行时间、实际运行时间、收费标准等。
JCB对于作业管理和调度至关重要,因为它是操作系统了解作业需求并据此进行决策的基础。每当作业的状态发生变化时,相应的JCB也会更新,以反映最新的作业状态。
作业调度算法:FCFS/SJF/HRN
1. 先来先服务
原理:按照作业到达系统的顺序进行调度,即最早到达的作业最先得到处理。
优点:实现简单,公平性好。 缺点:如果长作业位于队首,则短作业可能需要等待很长时间,导致平均周转时间 较长。
例题: 假设有以下四个作业按如下时间提交给系统:
- 作业A:提交时刻10:00,运行时间2小时
- 作业B:提交时刻10:06,运行时间1小时
- 作业C:提交时刻10:15,运行时间0.25小时
使用FCFS算法计算它们的平均周转时间和平均带权周转时间。
解答:
- 作业A开始时间10:00,结束时间12:00,周转时间2小时,带权周转时间1
- 作业B开始时间12:00,结束时间13:00,周转时间2.9小时,带权周转时间2.9
- 作业C开始时间13:00,结束时间13:15,周转时间3小时,带权周转时间12
平均周转时间 = (2 + 2.9 + 3) / 3 ≈ 2.63 小时 平均带权周转时间 = (1 + 2.9 + 12) / 3 ≈ 5.30 小时
2. 短作业优先
原理:选择估计运行时间最短的作业优先执行。
优点:可以减少平均等待时间,提高系统响应速度。 缺点:可能导致长作业长时间得不到执行,造成“饥饿”现象。
例题: 假设同样有上述三个作业,使用SJF算法计算它们的平均周转时间和平均带权周转时间。
解答:
- 作业A开始时间10:00,结束时间12:00,周转时间2小时,带权周转时间1
- 作业B开始时间12:15,结束时间13:15,周转时间3.1小时,带权周转时间3.1
- 作业A开始时间12:00,结束时间12:15,周转时间2小时,带权周转时间8
平均周转时间 = (2 + 3.1 + 2) / 3 小时 平均带权周转时间 = (1 + 3.1 + 8) / 3 小时
3. 高响应比优先
原理:根据作业的响应比来决定调度顺序,响应比定义为 (等待时间 + 作业长度) / 作业长度
。
优点:平衡了等待时间和作业长度,防止饥饿现象。 缺点:需要动态计算响应比,增加了系统开销。
例题: 假设有四个作业提交给系统,其信息如下:
- 作业D:提交时刻8:00,运行时间2小时
- 作业E:提交时刻8:30,运行时间0.5小时
- 作业F:提交时刻9:00,运行时间0.1小时
- 作业G:提交时刻9:30,运行时间0.2小时
使用HRRN算法计算它们的平均周转时间和平均带权周转时间。
解答:
- 作业D完成时间10:00
- 作业F完成时间10:06
- 作业E完成时间10:36
- 作业G完成时间10:46
作业D周转时间2小时,带权周转时间1 作业F周转时间0.1小时,带权周转时间1 作业E周转时间1.5小时,带权周转时间3 作业G周转时间1.2小时,带权周转时间6
平均周转时间 = (2 + 0.1 + 1.5 + 1.2) / 4 = 1.2 小时 平均带权周转时间 = (1 + 1 + 3 + 6) / 4 = 2.75 小时
系统调用(访管中断)
访管指令是一条可以在用户态(又称目态)下执行的指令。在用户程序中,因要求操作系统提供服务而有意识地使用访管中断,从而产生一个中断事件(自愿中断),将操作系统转换为核心态,称为访管中断。访管中断由访管指令产生,程序员使用访管指令向操作系统请求服务。
这是因为用户程序只能在用户态(目态)下运行,如果用户程序想要完成在用户态下无法完成的工作,该怎么办?
解决这个问题要靠访管指令。访管指令本身不是特权指令,其基本功能是 让程序拥有“自愿进管”的手段,从而引起访管中断。 当处于用户态的用户程序使用访管指令时,系统根据访管指令的操作数执行访管中断处理程序,访管中断处理程序将按系统调用的操作数和参数转到相应的例行子程序。完成服务功能后,退出中断,返回到用户程序断点继续执行。
访管指令是非特权指令,是程序员主动获得使用特权指令的手段。
第四章 进程管理
1. 程序的顺序执行的特点;多道程序并发执行的特点
顺序执行时
1.顺序性:严格的按照顺序执行
2.封闭性:程序运行时独占全机资源 资源状态只有本程序才能改变它,程序一旦开始执行,不受外界影响
3.可再现性:无论如何执行 都可缺获得相同的结果
并发执行时
1.间断性:由于资源有限,并发执行的程序存在相互制约的关系
2.失去封闭性:并发执行的程序共享计算机资源,这些资源的状态由这些程序改变
3.不可再现性:并发执行的程序执行的顺序不同可能有不同的执行结果
3个点分别对立
- 顺序性 -> 间断性, 程序执行相互制约
- 封闭性 -> 失去封闭性, 资源状态随程序进行改变
- 可再现性 -> 不可再现性, 每次执行都可能结果不同
2. 进程的状态及变迁
进程是指一个 具有独立功能的程序在某个数据集合上的一次动态执行过程,它是 操作系统进行资源分配和调度的基本单元。一次任务的运行可以激活多个进程,这些进程相互合作来完成该任务的一个最终目标
进程一般分为三个状态:
- 运行(running)态:进程占有处理器正在运行的状态。进程已获得CPU,其程序正在执行
- 就绪(ready)态:进程 具备运行条件,等待系统分配处理器以便运行 的状态。当进程已分配到除CPU以外的所有必要资源后,只要再获得CPU,便可立即执行,进程这时的状态称为就绪状态
- 等待(wait)态