操作系统复习指引
tip:主要来自王道考研-操作系统的内容,只提取了框架式的内容,没有细致入微的知识点和图例,建议在学习完操作系统之后再浏览这篇博客,能够帮你回忆和加深知识点,如果你在阅读的过程中对某个名词感到迷茫,那就该去仔细地复习一下它~
一、进程和线程
组成:PCB、程序段、数据段
什么是pcb:用来描述进程、控制进程和管理信息、记录该进程的资源清单、暂存处理机寄存器的内容的数据结构
进程的组织方式:链接(根据状态不同的几个队列)和索引(几张指向进程的索引表)
五个特征:动态、并发、独立、异步、结构
状态迁移:创建、就绪、运行、阻塞、终止
进程控制:使用原语,一气呵成、屏蔽中断。进程的创建、终止、阻塞、唤醒、切换都需要对应的原语
(一)进程通信
共享存储:共享空间、互斥访问,分为基于数据结构和基于存储区两种(后者体量更大)
管道通信(pipe):半双工通信(一个时刻只能一个方向),写满才能读,读空才能写
消息传递:创建消息体,由系统提供发送原语和接收原语,包括直接通信和间接通信(区别是信息不要、要通过中间体-信箱)
(二)线程:轻量级的进程
共享一些数据和代码段,独享栈和寄存器值
切换线程的系统开销小,不用切换段
分类:用户级线程、内核级线程(处理机分配的单位)
(三)处理机调度
高级调度(作业调度):将后备队列的作业调入内存,并创建进程
中级调度(内存调度):将挂起队列(在外存中)中的进程及其数据调回内存
低级调度(进程调度):就绪队列到处理机
作业和进程的区别:作业是用户给出的一个需求,可以由一个或多个进程来实现。
(四)进程调度
主动放弃:正常和异常的终止、主动阻塞(等待io)
被动放弃:时间片用完了(时间片轮转法的调度策略)、更紧急的事情(io中断)、高优先级抢占
不可调度:处理中断的过程中,内核程序临界区、原语操作中
切换过程包括原进程的上下文和数据的保存,以及恢复新进程的数据和寄存器的值
(五)调度算法
1、批处理系统
FCFS(先来先服务):非抢占式,对短作业不利(等很久),不会饥饿
SJF(短作业优先):可抢可不抢,对长作业不利,会饥饿(一直被短作业卡住)
HRRN(高相应比有限):响应比=(等待时间+运行时间)/运行时间,综合二者,不错,不会饥饿
衡量调度算法的几个指标:周转时间=结束时间-提交时间;带权周转时间=周转时间/实际运行时间;等待时间;响应时间
等待时间和响应时间的区别:在抢占式的调度算法中体现,被抢占的进程等待时间会继续加
2、交互式系统
时间片轮转:抢占式,每个进程只允许运行一个时间片,时间片大小的选择很重要
优先级调度:可抢可不抢,会导致饥饿,优先级高的进程先调度,可以在合适的时间调整优先级(等待时间很久)
多级反馈队列:安排多条队列,时间片从小到大,对应优先级也是从高到低,新来的进程放在优先级最高的队列,随着运行,需要时间片多的进程会慢慢移动到优先级低的队列,运行一次就移到下一级的队尾,一条队列的进程想要运行,必须前面所有更高优先级的队列都为空才行,会发生饥饿。被抢占的进程放回该级的队尾(不会降低优先级)
(六)进程同步、进程互斥
通过进程同步来解决进程之间异步性的先后顺序,在进程互斥的基础上进行的,进程互斥的要求是无须的,同步要求有序
进程互斥的四个原则:空闲让进(临界区空闲就得让进程能够访问)、忙则等待(有进程在临界区里,其他进程就要等待)、有限等待(不能一直等,变成了饥饿)、让权等待(在等待的进程可以释放处理机,别占着)
1、进程互斥的软件实现方法:
单标志法(两个进程必须一前一后顺序使用,在退出去给另一个进程解锁,同时也就是给自己上锁)
双标志法(先检查和后检查),先检查再上锁,两个人同时检查通过,不满足忙则等待。先上锁后检查,容易两人互给对方上锁,结果都进不去,不满足空闲让进,有限等待的原则
peterson算法:两个标志一个turn(谦让),主动争取(标志),主动谦让(turn),检查对方要不要进,自己再进
2、进程互斥的硬件实现方法:
中断屏蔽:只适用于操作系统内核
ts指令,tsl指令和swap指令,原理就是使用原语的方式封装双标志法,检查和上锁的过程不被中断(一个时间内只能有一个进程进行检查和上锁)
信号量机制(pv操作):整型信号量(用一个整型作为信号量、表示某种资源数,不满足让权等待);记录型信号量(可以让权等待,维护一个资源变量和等待资源的阻塞队列,block让得不到资源的进程阻塞,当资源可用时,有序让等待的进程wakeup)
信号量实现进程互斥以及进程同步:互斥信号量=1(互斥访问临界区),实现前驱关系的技巧(前操作用v操作将后操作p的数据打开,这样后操作的p只能再前操作结束后才会被唤醒)
(七)预防死锁:破坏死锁的四个形成条件,死锁一定不会产生
破坏互斥条件:spooling技术将临界资源改成共享资源
破坏不剥夺条件:申请资源卡在某一步时立即释放之前拿到的所有资源,处理机主动去抢,会导致之前的工作失效,浪费
破坏请求和保持条件:运行之前分配好所有需要的资源,而不是一类一类分别申请
破坏循环等待条件:a等b、b等c、c等a就形成了循环等待的情况,按编号从小到大的顺序申请资源,但是不方便添加新设备,而且不好编程
(八)避免死锁:银行家算法
在分配资源的时候预分配一下,如果会导致死锁就不分配
(九)死锁检测:
根据一个资源分配图(节点表示资源数,边表示资源分配和资源申请)来判断,依次消除不阻塞进程的边,如果消到最后还有边就说明发生了死锁
解除死锁的方法:剥夺资源、撤销进程、进程回退
二、内存
(一)进程链接和装入
静态链接(装入之前就完成链接)、动态链接(边装入边链接和运行时才链接)
绝对装入(编译就产生绝对地址)、可重定位装入(装入时将逻辑地址转换成物理地址)、动态运行时装入(设置重定位寄存器,在运行时将逻辑地址转换成物理地址)
(二)覆盖和交换技术
如何缩小一个进程在内存中的占用空间:设置固定区和若干个覆盖区(不可能同时被访问的程序段共享一个覆盖区),但是必须由程序员声明覆盖结构,编程麻烦而且对用户不透明
交换技术:内存紧张时,可以换出某些不用的进程,换入新进程,磁盘中设置了对换区用来暂存这些进程
(三)连续分配:为进程分配一个连续的存储空间
固定分区分配:一个分区一个进程,内部碎片,不好控制大小
动态分区分配:会产生细小的外部碎片,可以用紧凑技术来移动(但是时间复杂度很高)
(四)分页存储管理:将内存划分成页,把进程也划分成页,离散分配
分页是满足系统的需要,让系统更加高效
主要是实现地址转换:算出页号,在页表中找到对应该页号偏移量的页表项的值(就是物理块号),物理块号+偏移量就是物理地址
逻辑地址=页号+偏移量
加入tlb(快表)机制,在cache中加入把常用的页表项copy进来,访存的时候先找快表,如果没找到再去内存找
多级页表就是用上面的地址转换的方式找到下一级的子页表的位置,是为了解决一个页表过大的问题的(页表需要连续存储,所以太大的页表不好存放在内存,设计了多级页表那么需要让每一个页表都只占用一个页)
(五)分段存储管理:将内存划分成段(数据段、代码段等)
分页是满足用户的需要,开发更加高效
段大小可以不同,分段是二维(有多个段,段内又有偏移,可以想象成矩阵)的,而分页是一维的
分段更容易实现信息的共享和保护
(六)虚拟存储
根据局部性原理(时间、空间、高速缓存技术),程序不需要全部装入内存就可以运行,运行时根据需要调入数据,内存不够还需要调出
(七)请求分页管理:分页+虚拟存储
页表要加上状态位(是否在内存中)、访问状态位(啥时候访问过,用于调出)、修改位(啥时候修改过)、外存地址等
地址变换不是简单的映射,需要查找页面是否在内存中,以及调页的操作
(八)页面调度算法
OPT:优先淘汰最长时间不会被访问的页面,但是不可实现,不能直到是谁
FIFO:先进先出
LRU:最近最久未使用
CLOCK:找访问位=0的页面,过程中把1变0,这样第二轮扫描一定能找到一个
改进CLOCK:(访问位,修改位),第一轮找00,第二轮找01,过程把访问位置0,找00,找01,一定能找到
(九)页面分配策略:进程刚来的时候给多少页面
固定分配:运行前就决定给多少
可变分配:运行时可变
局部置换:只能换自己的页
全局置换:可以换内存的空闲页
没有固定全局分配
三、文件
(一)有结构文件
顺序文件:记录在物理上顺序存储,包括串结构(无序)和顺序结构(按关键字顺序排序),定长文件可以随机存取(算地址),不方便增删记录
索引文件:用索引表记录每个表项,可以随机存取,增删方便
索引顺序文件:因为索引过多,索引表太大,所以可以把记录分组,索引组头
(二)文件目录发展史
单级目录:整个系统只有一张目录表
两级目录:允许不同用户有自己的目录表,不同用户的文件也可以重名,但是不能对文件进行分类
多级目录(树形结构):可以设置绝对路径(访问硬盘次数很多,因为要一直查硬盘中的索引表),也可以相对路径,不方便文件共享
无环图目录:在树形的基础上加一些有向边,实现文件共享,但是需要为共享结点设置一个共享计数器,在删除的时候方便操作
设立索引节点,减小索引表的内容,让查找索引表的速度变快,索引表项指向索引节点,减小索引表大小=减少磁盘块使用=减少磁盘io
(三)文件在磁盘块中的结构
顺序分配:连续的磁盘块,产生碎片且不易于拓展
隐式链接分配:盘块中有指向下一个盘块的指针,只能顺序访问
显示连接分配:fat表记录指针,链接的方式存放(1-5-8-3-6),可以随机访问
索引分配:建立一个索引表,可以多级索引和混合索引(对大文件有好处)
(四)文件存储空间管理
空闲表法:记录连续分区的起点和盘块数
空闲链表法:链表的结构,分配时从链头拿,回收到链尾
数据位图法:一位代表一个盘块号,其中的值表示是否被占用
(五)文件的基本操作
创建、删除、打开、关闭、读写文件
打开不包括读,是两个过程
(六)文件共享
硬链接:共享的用户的目录项指向同一个索引节点
软链接:存了一个路径,其实是根据路径找到文件(快捷方式)
(七)文件保护
口令(访问密码)
加密保护(文件内容加密,浏览时需要解密)
访问控制(不同的用户有不同的权限级)
四、磁盘
盘片:一个物理的碟子,”光碟“
磁盘:若干个盘片圆心串起来
盘面:一个盘片有两面
磁头:一个盘面就有一个磁头,用来读写数据的
磁道:盘面上被划分的一个一个同心圆环,每一个都是一个磁道
扇区:一个磁道被分成若干个扇区
柱面:不同盘片距离圆心相同距离的磁道组成的一个圆柱桶
(一)如何读写:启动磁头、寻道、旋转、读写,每一步都需要时间
(二)磁盘调度算法:多个请求下的寻道选择算法
先来先服务(FCFS):
最短寻找时间优先(SSTF):每一步都是找当前最短距离的磁道,会饥饿
扫描算法(SCAN):移动到最边缘才改变方向
循环扫面算法(CSCAN):移动到最边缘,回到另一个边缘,不改变方向
LOOK算法:是scan的改进,移动到最后一个任务,改变方向
C-LOOK算法,是cscan算法的改进,移动到最后一个任务,回到最前的任务,不改变方向
(三)减少延迟时间的方法
一个磁道上的扇区交替编号,连续读写的时候会有读写的延迟,顺序排布因为磁头读写的延迟而错过,需要多转一圈
错位命名,相邻盘面的扇区编号也要错位,原理类似
把连续的数据存在同一个柱面上,不用寻道时间
五、io
(一)读写方式(目的要减少IO阶段对cpu的依赖,让处理器的效率更高)
程序直接控制方式:cpu不断发出轮询,判断io进展,以字为单位
中断驱动方式:发送IO请求和IO完成的时候要cpu,以字为单位
DMA方式:CPU发出IO命令,IO完成后,DMA发出中断信号,以块为单位可以是连续的多个块,这也是DMA的作用
通道(弱化版cpu)控制:CPU发出IO命令,通道程序负责完成IO,放回中断信号,一组块,可以不连续
(二)设备分配与回收
一个通道控制多个控制器,一个控制器控制多个设备
(三)缓冲区的概念
感谢你阅读到这