操作系统 3月17日 – 天气:晴
凑着周末,赶紧把操作系统完结一下。
1. 管程
管程也属于操作系统中的一种同步机制,为了解决多线程环境中的并发控制问题。它提供了一系列的高级同步原语。
作用于信号量一样,但是管程便携程序更加简单
2. 进程调度
进程的调度可以分为两大类:
- 可剥夺:当有更高优先级的进程进入内存,CPU会停止当前执行的进程,转而去执行更高优先级的进程
- 不可剥夺:当有更高优先级的进程进入内存,必须等到CPU释放后才可以分配给更高的进程
三级调度:
- 高级调度:从外存的后备队列中根据一定的算法选择哪一个作业可以进入主存
- 中级调度:决定叫唤去中哪一个就绪的进程可以进入内存
- 低级调度:决定内存中的哪一个就绪进程可以占用CPU
低级调度是操作系统中最活跃最重要的调度方式
调度算法主要有:
- FCFS:按照先后次序分配CPU。有利于长作业,不利于短作业。有利于CPU繁忙型,不利于IO繁忙型。因为FCFS是非抢占式的,如果一个作业有太多的IO操作,那么CPU只能等待,导致利用率不高。https://blog.csdn.net/qq_42615475/article/details/132477821
- 时间片轮转:给每一个进程分配时间片,进程轮流执行。通过这种方法可以提高进程的并发性,提高资源利用率
- 优先级调度:根据优先级进行调度
- 多级反馈队列:结合时间片轮转和优先级调度算法。
3. 死锁
死锁:多个进程因为互相抢占被对方占用的互斥资源而导致的一种僵局的现象,如果没有外力作用,将一直僵持下去的现象。
死锁产生的四个条件:
- 竞争的资源为互斥资源
- 请求保持。进程占用着互斥资源,并且还要继续等待其他资源
- 不可剥夺。操作系统不能剥夺进程已经占有的资源
- 环路等待。
如何处理死锁:
- 死锁的预防:
- 破坏请求保持条件。要求进程在执行前必须一次性申请执行所需的所有资源。
- 破坏不剥夺条件。要求进程在申请其他资源的时候必须释放已经占有的所有资源。
- 破坏环路等待。给所有资源编号,必须按照一定的顺序申请资源
- 死锁的避免:提前规划出一条不会产生死锁的资源分配算法。如银行家算法
- 死锁检测:允许产生死锁,系统会定时监测,一旦发现死锁,则立刻解除
- 死锁解除:采用一定方法解除。如资源剥夺法,和撤销进程法。
线程是调度的最小单位,而进程是拥有资源的最小单位
线程和进程可以共享的数据:
- 公共数据
- 全局变量
- 进程级的资源
不可共享数据
- 栈指针
4. 存储管理
4.1 地址重定位
逻辑地址为操作系统分配给程序的虚拟地址。是程序中使用的地址。如
int a = 11
a
就是虚拟地址物理地址是世纪存储的地址
将虚拟地址转换到物理地址的过程称为
地址重定位
地址重定位可以分为两类
- 静态重定位:当程序装入内存时,就直接完成逻辑地址与物理地址的映射
- 动态重定位:在程序运行时运行到逻辑地址的时候再进行地址的转换
4.1 分区管理
分区管理主要处理的问题是如何将作业装入内存的问题。分配的方式主要可以分为以下两大类:
- 连续方式:要求所有装入内存的作业都是占用连续的内存空间,主要有下面的几种方式:
- 单一连续:适用于单道系统,同时只能有一道作业装入内存
- 固定分区:在系统启动时,就将主存划分为若干个大小相等的分区。一个作业只能装入一个分区中。这种情况会产生内碎片。
- 动态分区/可变分区:系统启动时不划分空间,当作业要装入的时候,划分和作业大小一样的空间,会外碎片。为了解决这些外碎片的问题,可以使用紧凑功能。
- 离散方式:所有装入内存的作业可以离散地存储在内存的不同区域中
- 分页式:将进程地址空间划分为若干个大小相等的页。主存划分为若干个大小相等的块。分配主存的时候,将这些页分别装入这些块中。
- 段式:将程序按照一定的逻辑划分为段,装入内存。段的长度不固定。需要保存每一段的起始地址和段长
- 段页:现将程序分段,然后段内分页装入内存中
虚拟存储器:当有一些作业过大,无法直接装入内存时,可以利用虚拟存储器的方式,将一部分的作业装入内存,如果需要时,再从磁盘中写入内存。利用的是程序的局部性原理。
4.2 页面置换算法
当内存中空间不够的时候,会利用一些算法将内存中的内容置换到外存中。这种现象叫做缺页。缺页次数越多,则系统的运行效率就越低。
5. 设备管理
简单理解:IO软件就是IO设备的驱动程序
SPOOLING技术的思想就是利用缓存技术,目的是解决CPU与IO设备之间速度不匹配的问题。从而提高CPU与设备的并行程度。
磁盘调度
磁盘调度算法:
- FCFS:根据请求队列的顺序依次访问
- SSTF:根据磁头所在的位置,寻找与磁头相邻最近的请求,每一次寻道时间最短,但是平均寻道时间不一定最短
- SCAN:电梯算法。每次选择当前移动方向上距离最近的磁道访问
- CSCAN:每次都从头扫描到尾
当前磁头位于18磁道。按照最短寻道时间进行查找:
- 2号请求位于磁道20,首先访问2
- 然后3同样位于磁道20,继续访问3
- 此时距离磁道20最近的请求是位于磁道15的请求1,5,8 因此需要判断具体先访问哪一个。
- 我们看到最后一次访问的3号请求中,磁头号为8,因此肯定优先访问请求1和请求5,因为他们的磁头都是8 再看扇区。当前所在扇区为6,根据最短寻道时间,应该优先访问请求5,因为距离扇区4更近。因此相应顺序为5,1,8
6. 文件管理
文件是具有符号的逻辑上具有完整意义的一组相关信息项的集合。
文件的逻辑结构:
- 流式文件:由二进制或者顺序字符串组成的文件,如二进制文件和文本文件
- 记录式文件:由一个以上的记录组成,如数据库表。
文件的逻辑结构:
- 连续结构:文件存储在连续的物理块上
- 连接结构:类似链表,文件存储在不一定连续的物理块上
- 索引结构:文件存放在不连续的物理块上,系统为每一个文件建立一个索引表,所以表记录了该文件存储的所有的物理块号
- 多级结构:物理块中存储的依然是一个索引表
文件存储的目录结构:
- 一级目录:系统只有一个目录表,也就是系统只有一级目录。所有的文件都只能保存到这一个目录,不允许文件重名。
- 二级目录:系统为每一个用户创建一个目录在主目录中,每一个用户都可以在自己的目录下面创建文件。允许不同用户的文件重名
- 多级目录:树型结构
文件空闲存储空间管理
7. 作业管理
作业是为了完成一个任务需要的工作的总和。
作业由程序,数据和作业说明书组成。
JCB是作业唯一标识。PCB是进程存在的唯一标识