目录
3.PSW(程序状态字,Program State Word)
2.进程状态以及状态间转换(ready、run、sleep)
OS1 绪论
1.概念
操作系统位于用户和计算机之间(接口)
操作系统的目的:提供环境,以便用户能够便捷而且高效地执行程序。
操作系统是管理计算机软硬件的软件
2.四大管理
设备管理(硬件)、进程管理、文件管理、存储管理
3.PSW(程序状态字,Program State Word)
体现处理器状态:管态(特权态)or目态(用户态)
管态->目态:通过设置PSW
目态->管态:通过系统调用
4.系统调用
调用操作系统中系统态的子功能函数,需要使用系统调用。
系统调用举例:read/write、、、
OS2 操作系统的结构
1.分时系统的特点
多路、交互、独立、及时
2.操作系统有哪些结构类型
(1)简单结构(App直接访问硬件,破坏操作系统)
(2)宏内核(App和硬件分离,系统稳定安全,但层次单一,关系混乱)
(3)微内核(安全但效率低)
(4)混合系统(现在多用)
(5)虚拟机结构(VMWare)
OS3 进程管理
1.进程的特征
①结构特征
由程序段、数据段以及进程控制块构成
②动态性
产生->执行->阻塞->消亡
③并发性
同时
④独立性
独立获得资源的基本单元
⑤异步性
执行顺序和执行时间的不确定性
2.进程状态以及状态间转换(ready、run、sleep)
(1)就绪状态:进程已经处于准备运行状态,即进程获得了除了处理器之外的一切所需资源,一旦得到处理器资源(处理器分配的时间片)即可运行
(2)运行状态:进程正在处理器上运行(单核CPU下任何时刻只有一个进程处于运行状态)
(3)阻塞状态:又称为等待状态,进程正在等待某一个时间而暂停运行,如等待某个资源为可用或等待IO操作完成,即使处理器空闲,该进程也不能运行。
3.进程控制
(1)PCB (Program Control Block进程控制块)
是进程存在的唯一标识,存储进程的相关信息,包括进程号pid等
(2)fork函数
①功能:创建一个子进程,子进程继承父进程的相关属性,执行fork后,两个进程均向(大多为并发)下执行后续代码。
②返回值:父进程中fork的返回值为子进程的pid,子进程中fork的返回值为0,若fork出错则返回值为0.
③不同环境下的API:linux下创建进程使用的API是fork,windows下创建进程使用的API是createprocess。
4.exce族函数
exec的含义:加载并执行.exe函数,以新程序取代子进程的地址空间
fork+exec=createprocess(windows)
5.进程通信方式
管道、消息队列、信号量、共享内存
OS4线程
1.进程 vs 线程
2.多线程模型
(1)用户线程(用户级库函数管理)
解决上下文切换的开销
TCB在进程空间
(2)内核线程
发挥多处理器的并行又是
TCB在内核空间
3.并行类型
1.数据并行
执行相同操作
2.任务并行
执行不同操作
3.混合并行
1+2
OS5 同步
1.基本概念
临界资源:一次仅仅允许一个进程访问的资源
临界区:进程中访问临界资源的那段代码
互斥:一个线程在临界区中只需,其他线程不让进
2.解决互斥的方案
(1)用户角度
软件方向:Perterson方案(标记法+轮转法)
硬件方向:①禁止中断(对某一个CPU),②硬件原子指令(循环测试,用户负担重,对用户水平要求高)
(2)操作系统角度
自旋锁:相当于OS使用了硬件原子指令(循环测试,忙等待,效率低)
互斥锁(睡眠锁):如果资源被占用,即进入睡眠状态(阻塞状态),资源被释放时被唤醒(存在上下文开销,适用于需要等待时间较长的情况)
3.信号量——解决同步与互斥的工具
互斥:金恒资源完成各自的task(公用信号量)
同步:合作完成一个task(私用信号量)
wait() ——P原语——申请资源
signal()——V原语——释放资源
典例:生产者消费者问题
4.死锁
必要条件
①互斥:资源非共享
②部分分配(占有并等待)
③不可抢占
④环路等待
解决死锁
(1)预防死锁
核心:限制请求、打破互斥条件
(动态避免,当某个客户提出了一个贷款申请时,判断如果批准了这个申请,是否会导致一种不安全的状态,“是”, 就拒绝该申请;“否”,就批准该申请。)
(2)解决发现的死锁
核心:仍然是打破死锁的必要条件
具体算法:可以给各个进程定义一个优先级,在死锁发生的时候,先让优先级最低的进程释放它的资源,看死锁能不能解除,不能解除的话就继续释放下一个优先级最低的进程。
OS6 CPU调度
1.调度是什么?为什么要进行调度?
2.调度准则
3.调度算法
(1)FCFS(先来先服务):非抢占,先来的必须搞定才下一个
(2)短作业优先:非抢占,每次CPU空出来了就选择最短的作业,搞定再下一个
(3)优先级算法:优先级高的先
(4)时间片轮回(RR Round-Robin):给每个进程分配固定一段时间片,轮着执行
(5)多级队列:多个就绪队列,不同的队列采用不同的调度方法,比如RR+FCFS
(6)多级反馈队列:在多级队列的基础上,任务可以在队列之间移动,兼顾长进程和短进程,unix操作系统采用
(7)高响应比优先:响应比R = 1 +(作业等待时间/ 作业执行时间)
4.处理器亲和性
线程在指定的 CPU 上尽量长时间地运行而不被迁移到其它CPU
5.负载平衡
让每个处理器都有事可做,又没有过量,就是适度分配的原理。但是会破坏处理器亲和性,实际情况中要综合考虑处理器亲和性与负载均衡。
OS7 内存管理
1.存储器管理方式
连续分配:每个作业分配一个连续的空间(例:分区)
离散分配:将一个用户进程离散地分配到内存中多个不想连接的区域中(例:分页、分段、段页式)
2.地址重定位:逻辑地址->物理地址
静态地址重定位:程序执行之前 由软件 进行
动态地址重定位:执行指令时 由硬件地址变换机构 进行
3.内存保护
(1)硬件方式
上下界寄存器保护法(确保:上界寄存器≤ 物理地址≤下界寄存器)
(2)软件方式
保护键法(设置标志信息)
3.快表、多级页表
快表--可以理解成一种高速缓存
多级页表--解决了单级页表过大的问题
使用快表进行页面信息存储时,访问页的流程:
1.根据虚拟地址中的页号查询快表
2.如果该页在快表中,直接从快表中读取相应的物理地址
3.如果该页不在快表中,就访问内存中的页表,再从页表中得到物理地址,同时将页表中的该表项添加到快表中
4.当快表填满后,又要登记新页时,就按照预先设定好的淘汰算法淘汰掉快表中的一个表项,再将新页作为新表项添进去。
(快表->(页表)->(淘汰))
4.分页和分段的异同点
(1)共同点
①二者都是为了提高内存利用率,减少内存碎片;
②页和段都是离散存储的,所以两者都是离散分配内存的方式。
(2)区别
①页的大小是固定的,是由OS确定的,而段的大小不固定,取决于我们当前运行的程序;
②分页仅仅是为了满足操作系统内存管理的需求,而段是逻辑信息的单位,在程序中可以体现为代码段,数据段等等,能够更好地满足用户需求。
OS8 虚拟内存
1.基本概念
请求调页:访问的页不在内存,发出缺页中断
页面置换:当发出缺页中断时,若内存中有闲置空间,那么直接将外存中的信息调入内存,若内存中空间已满,那么需要根据预设的页面置换算法进行页面置换。
2.页面置换算法
(1)随机淘汰算法:随机替换
(1)FIFO先进先出:替换最先进的
(2)LRU算法:替换最近最久未访问的
(4)时钟页面置换算法:FIFO+LRU,利用指针+访问位
附:
(1)抖动现象:(高度的页面调度活动,进程的调页时间大于它的执行时间,刚被调出内存的页马上又被调回,调回的马上又被调出,CPU利用率降低
(2)陷阱现象(FIFO存在陷阱现象)(分配的物理页面多,缺页中断的次数反而增加,原因:置换特征与进程访问内存的动态特征矛盾)
OS9 文件管理
1.文件的逻辑结构
(1)字符流式的无结构文件
最简单、最原始的逻辑结构
缺点:增删改查困难
(2)记录式的有结构文件
结构化的文件内容组织
曾经流行一时,已经落伍
(3)树
最灵活的逻辑结构
便于增量存储和各种操作
2.文件的物理结构
(1)连续结构(顺序结构)((数组),存储start+length(始址+长度))
特点:(数组特点)
1.不能动态增长,适用于不频繁更改大小的文件
2.会产生外碎片
3.访问速度快
(2)链接结构((链表)(存储start+end(始址+终址)))
特点:(链表特点)
1.便于插入删除
2.内存利用率高
(3)索引结构(最普遍)
特点:
1.每个文件建立一张索引表,表项表示逻辑块号和对应的物理块号
2.既能顺序存取,又能随机存取;
3.满足了文件动态增长、插入删除的要求;
4.充分利用外存空间
OS10 设备管理
1.数据传送控制方式
(1)查询方式
(2)中断方式
(3)DMA方式
(4)通道方式
从(1)到(4),CPU参与度越来越低,CPU与设备之间的并行度越来越高
2.磁盘调度的时间花费
(1)移动磁头时间->查找时间/寻道时间(占70%左右)
(2)旋转扇区时间->等待/延迟时间
(3)信息传送时间->传输时间
3.寻道算法
(1)FCFS 先来先服务
(2)SSTF 最短查找时间优先
把距离磁头当前位置最近的请求作为下一次调度的对象。(有点贪心算法的感觉)
(3)SCAN 电梯调度算法
沿着移动臂的移动方向选择距离磁头当前位置最近的请求作为下一次调度的对象,直到该方向上没有IO请求就调转方向(一条道走到黑,再回头走另一个方向,有点像dfs)
(4)CSCAN循环/单向扫描算法
沿着移动臂的移动方向选择距离磁头当前位置最近的请求作为下一次调度的对象,直到该方向上没有IO请求就回到0位置,按距离顺序调度(一条道走到黑,再回头走另一个方向,有点像dfs)
例:假定读写磁头位于53号柱面。开始调度时,有若干个进程顺序提出了对如下柱面的I/O请求:98、183、37、122、14、124、65、67。
以下是按照不同寻道算法进行调度的顺序。
(1)先来先服务
按顺序:98、183...
(2)最短查找时间优先
离当前最近的先:65(离53最近)、67(离65最近)、37、14、98、122、124、183
(3)电梯调度算法
一个方向到顶+反向:37(当前方向离53最近)、14、65、67、98、122、124、183
(4)CSCAN循环/单向扫描算法
一个方向到顶+回0+重新:65(当前方向离53最近)、67、98、122、124、183、14(回到0号柱面,14离0号柱面最近)、37
(有用的话,点个赞呗)