前言:后天考试,一学期没去上课啥都不会,于是从零开始学OS了。打算边学边写一篇博客,一些考不到或太繁杂的知识就不说了,面向60分学习(
如果文中有错误还请各位大佬指出QAQ
以下内容部分参考王道论坛的《操作系统考研复习指导》(@avgstuBoboge大佬发的pdf,有水印)。
(huj:)主观题考点:进程同步和互斥,信号量的使用,死锁和饥饿,虚拟页式,虚拟段页,虚拟多级分页,地址转换,缺页中断,页面替换,进程调度,磁盘调度。
2.进程
2.1 概述
由于多道程序环境的并发执行,各程序失去了封闭性。此时,为了控制调度程序的并发执行,我们引入了进程的概念。
进程可以看作程序的一次执行过程,是系统进行资源分配的最小单位。进程具有以下性质:
- 动态性:进程并非一成不变,而是具有不同的状态和过程,动态性是进程最基本的特征。
- 并发性:多个进程能在一段时间内同时进行,显著提高资源利用率。
- 独立性:进程是独立运行、获得资源、接受调度的基本单位。
- 异步性:由于进程间的相互制约,导致了进程的间断性,这也造成了执行结果的不可再现性。因此,操作系统必须配置相应的同步机制。
- 结构性:进程实体由程序段,数据段,PCB(Process Control Block)组成。
创建/撤销进程的本质是对PCB的创建/撤销。
未建立PCB的程序无法作为独立单位参与运行,即PCB是进程存在的唯一标志。
2.2 五状态模型
上回说到,进程具有动态性,由此可见,进程通常具有以下五种状态,其中就绪、阻塞、运行是三个基本状态。
进程执行过程
五状态模型下进程执行的过程,简而言之就是:
进程正在被创建时是创建态,创建完成就进入了就绪态,当该进程被调度,得到了资源就进入了运行态,如果:
(1)运行的时候需要等待某些事件(如I/O设备)就会进入阻塞态,等到所等待的事件发生就会回到就绪态。
(2)运行的时间过长,用完了当前的时间片,就会让出资源回到就绪态。
(3)运行结束,一切正常,去往终止态等待消亡。
进程在状态间的转移,实质上是PCB的创建、删除、入/出队。
进程间通信
进程间要进行数据交换,就必然需要通信方法,效率较高的进程间通信方法主要有三类:
- 共享存储:通信的进程拥有共享空间,通过对空间进行直接访问可以实现进程间通信。
- 消息传递:进程通过系统提供的发送/接受消息的两个原语来进行数据交换。可以直接发送给对方,也可以发送到一个中间实体后转运给对方。
- 管道通信:管道(pipe)是连接一对进程以实现它们之间通信的共享文件,管道的本质是一个固定大小的缓冲区。可以理解为共享存储的优化和发展。
线程
线程可以理解为一个轻量级进程,是基本的CPU执行单元,也是程序执行流的最小单元。
一个进程中有多个线程,线程不拥有系统资源,但是和同一进程中的其他线程共享该进程的所有资源。提高了操作系统的并发性能。
进程可以创建进程和线程,线程只可以创建其他线程。
每个线程和进程一样,拥有唯一的标识符。
2.3 处理机调度
三级调度
一个作业从提交至完成,往往要经历以下三级调度:
- 作业调度(高级调度):按一定原则分为资源给一或多个作业并建立相应进程。
- 中级调度:挂起暂时不能运行的进程至外存,使外存中可以运行的进程变为就绪态并入队。
- 进程调度(低级调度):根据调度算法将CPU分配给某个进程。进程调度是最基本的一种调度。
无法调度的情况
- 在处理中断的过程中:中断过程复杂且不属于某一进程,不应被剥夺CPU资源。
- 进程在操作系统内核程序临界区中:进入临界区后需要独占式访问共享数据。
- 原子操作过程中。
进程调度方式
- 剥夺调度方式:立即暂停当前执行的进程并抢占CPU。
- 非剥夺调度方式:等到当前进程执行完再抢占CPU,无法适用于分时和大多数的实时系统。
调度性能评价
- CPU利用率。
- 系统吞吐量:单位时间内CPU完成作业的数量。
- 周转时间:作业从提交到完成所经历的时间。
- 等待时间:进程处于等待CPU状态的时间之和。调度算法实质上影响的是等待时间。
- 响应时间:用户提交请求到系统首次产生响应的时间。
经典调度算法
- FCFS算法:FCFS,就是先提交的作业先运行,属于不可剥夺算法。
- SJF算法:短作业优先算法,不考虑作业紧迫程度,优先选择运行时间最短的作业。可能导致长作业长期不被调度(饥饿现象)。
- 优先级调度算法:根据静态和动态优先级将CPU分配给优先级最高的作业。
- 高响应比优先调度算法:综合了FCFS和SJF算法,选出 [响应比=(等待时间+执行时间)/执行时间] 最高的作业运行。
- 时间片轮转调度算法:以时间片为单位按到达时间循环执行就绪队列中的作业,主要用于分时系统。
- 多级反馈队列调度算法:上述算法之集大成者,设置多个优先级、时间片大小不同的就绪队列。高优先级队列在时间片内无法完成,则压入次级队列,最后一级队列进行时间片轮转调度算法。当且仅当高优先级队列为空时才会运行次级队列中的作业。
(好像只考4&5来着
2.4 同步与互斥
由于进程具有异步性,为了让不同程序经过调度得到确定的结果,我们需要利用原语对进程进行同步,从而得到需要的结果。
PV操作
wait(S)//P
{
while(S<=0);
S--;
}
signal(S)//V
{
S++;
}
同步问题
- 生产者-消费者问题
- 读者-写者问题
- 哲学家进餐问题
- 吸烟者问题
具体例子就略了,书上肯定有,这里说一下做这类题目的思考方法:
假设所有进程并行,考虑各进程之间的关系与临界资源制约的最坏情况,利用达到互斥的目的。
注意个临界资源时,互斥信号量的范围为取值。
2.5 死锁
当P进程拥有A资源请求B资源,Q进程拥有B资源请求A资源的时候就发生了死锁。
死锁产生的条件
- 互斥:进程拥有的资源无法同时被多个进程占有。
- 不剥夺:进程所拥有的资源无法被释放,除非该进程主动释放。
- 请求和保持:进程拥有着某个资源的同时请求其他资源。
- 循环等待:进程对资源的拥有与请求形成的有向图是一个环。
当且仅当四个条件都被满足的时候才会发生死锁。
死锁的处理策略
- 预防:设置限制使四个条件无法全部满足以预防死锁
- 避免:分配资源时防止系统进入不安全状态。
- 检测及解除:及时检测死锁的发生并解除。
银行家算法
银行家算法是最著名的死锁避免算法,核心思想是让系统时刻处于能够满足所有可能需求的安全状态。
数据结构:
- :种可用资源的数量。
- :所有个进程对种资源的最大需求。
- :所有个进程当前拥有种资源的数量。
- :所有个进程对种资源的剩余需求。
显然有的关系。
安全性测试:
- 置空安全队列。
- 遍历,寻找不在安全队列中且不大于的进程,找到进入过程3,找不到进入过程4。
- 释放进程占用的资源并将加入队列,回到过程2。
- 如果安全队列大小为则安全,否则不安全。
算法过程:
- 根据与求出。
- 根据当前请求更新各数据结构。
- 进行安全性测试。
- 若通过测试,则可以进行当前请求。
(啊这,刚听说很行家算法不考大题
3.内存管理
(听huj说这块在期末考试中占50分,重点
3.1 内存管理概念
由于无法将所有用户进程与系统需要的程序和数据全部放入主存中,操作系统必须将内存进行合理划分与动态分配,这就是内存管理的概念。
内存管理的功能
- 内存空间的动态分配与回收。
- 逻辑地址和物理地址的转换。
- 内存空间的扩充。
- 存储保护。
连续分配管理方式
内部碎片:一个任务分区内未被使用的空间。
外部碎片:内存中未被任务分区占用的空间。
- 单一连续分配:按照地址顺序分配相应的空间,只能用於单任务的操作系统中,效率极低。
- 固定分区分配:将内存空间划分成多个大小相等/不等的分区,一个分区只有一个任务,内部碎片多。
- 动态分区分配:在进程装入内存的时候动态建立分区,外部碎片多。
分页存储管理
操作系统为进程配置页表,页表中记录了逻辑地址对应的物理地址。
映射关系为页表—>页。
若逻辑地址,页号,页内偏移量,页面大小,页表项长度,页表起始地址,的页表项地址,物理块号,物理地址,则有
二级分页存储管理就是对页表再次进行分页,即一级页表—>二级页表—>页。
分段存储管理
分段式和分页式差不多,区别在于段表中记录的是段长和段的基址(起始地址),定址方法类比即可。
注意,分页式是一维的,分段式是二维的,即段表—>段。
(火大,今天听室友说huj说过段式也不考
段页式存储管理
如图,就是将段式和页式结合起来,即”段表—>页表—>页“的映射关系。
地址计算方法本质都是一样的,根据映射关系一级一级算过去就行。
3.2 虚拟内存管理
虚拟内存
局部性原理:计算机在某一时间内会多次访问同一部分内容。
由于局部性原理,我们可以知道一个任务在被调用的时候,往往会重复访问同一段内容,因此不妨把这一段内容单独从程序中取出放入内存以提高效率,之后根据某种算法进行这段内容的置换。这样看来,内存就像比以前更大了,这就是称之为”虚拟“的原因。
请求管理
- 请求分页式存储管理
- 请求分段存式储管理
- 请求段页式存储管理
其中页表长这样:
比起纯分页管理增加了四个部分:
- 状态位P:程序访问时使用,记录页面是否在内存中。
- 访问字段A:置换页面时使用,记录的内容根据置换算法有所不同。
- 修改位M:记录调入内存后是否被修改过。
- 外存地址:调入页面时使用,记录该页在外存上的地址。
缺页中断
当要访问的页面不在内存中时就要产生中断以将要访问的页面置换进内存。
过程:
其中”选择一页换出“就是利用了页表中的状态位执行调度算法。
和一般的中断不同,缺页中断在指令执行期间产生和处理中断信号,属于内部中断,因此在一条指令执行过程中可能产生多次中断。
页面置换
- 最佳置换算法OPT:先换出下次出现时间最晚的页面。
- 先进先出算法FIFO:先换出最先进来的页面。
- 最近最久未使用算法LRU:先换出上次被访问时间最早的页面。
- 时钟置换算法CLOCK:访问为权值,循环遍历缓冲区并将权值依次置零,先换出首次访问到的权值为0的页面。
- 改进CLOCK算法:访问和修改分别为第一、二权值,然后执行CLOCK算法。
4.文件与设备管理
(感觉这里占不了多少分,随便背几道题8
- 磁带上的文件只能顺序存取。
- 访问磁盘的时间包括寻道、读写、旋转等待时间。
- 为了允许不同用户文件名相同于是采用多级目录结构。
- 用户设置的设备名通常是逻辑涉设备名。
(算了还是正经学为好
4.1 文件
文件分配方式
- 连续分配:原始方法,效率低。
- 链接分配:适用于经常更新且经常按一定顺序访问的情况。
- 索引分配:适用于不经常更新但经常随机访问的情况。
4.2 磁盘
磁盘长这样↑
扇区磁道磁盘。
磁盘驱动器长这样↑
磁盘调度
基本概念:
- 寻找时间:将磁头移动到指定磁道的时间,和跨越磁道的时间常数、跨越磁道的条数、启动磁臂的时间有关。
- 延迟时间:
等会,这些东西好像不考,那就鸽了(?
调度算法:
- 先来先服务算法FCFS:老活了,不会的回去看。
- 最短寻找时间算法SSTF:每次找离当前位置最近的磁道,可能导致饥饿。
- 扫描算法/电梯算法SCAN:先找一个方向上的所有磁道,然后反方向再来一遍。
- 循环扫描C-SCAN:单向移动结束后回到原点,重复SCAN。
平均寻道长度=总寻道长度/请求数。
4.3 设备
鸽了
1.操作系统概述
1.1 基本概念
作用
- 计算机系统资源的管理者(CPU,内存,文件,设备)
- 用户与计算机系统之间的接口(命令接口,系统调用)
- 扩充机器
充分理解以上三点至关重要。
性质
- 并发(基本)
- 共享(基本)
- 虚拟
- 异步
自己体会。
1.2 发展历程
- 单道批处理:顺序处理任务。
- 多道批处理:任务根据优先级占用可中断资源。题目通过甘特图解决。
- 分时操作系统:开始能够和用户交互,交互性强。
- 实时操作系统:及时可靠,快速响应,交互性次之。
1.3 运行环境
用户态
用于外层应用程序的执行。
内核态
用于特权指令的执行,如:
- 时钟管理
- 中断机制
- 原语:操作系统最底层指令,具有原子性(不可中断)。
- 系统控制的数据结构及处理
Eg:发生系统调用时,用户态转变到核心态。
例题
待补,先睡会觉(