计算机操作系统
操作系统
功能
作为用户和计算机硬件之间的接口,协调底层硬件和软件之间的关系,最接近硬件的软件。
并行VS并发

发展
1.手工操作:用纸带机,打孔是一,反之则零,但打点太慢,CPU会有大量等待时间
2.单道批处理:中间加入磁带,比纸带机快得多,但每次还是一个程序
3.多道批处理:一次读多个程序,操作系统的诞生
4.分时操作系统:以时间片单位,允许多个用户同时使用一台计算机,不足是不能优先处理一些紧急任务
5.实时操作系统:要在严格的时限里完成事件,及时性,可靠性,导弹系统,自动驾驶
运行机制
两种处理器状态:用户态,核心态,区别是CPU的执行权限不同,用PSW(程序状态寄存)的某标志位来管理,0用户态,1核心态。
内核(KERNEL):最底层软件,是操作系统的核心部分。
中断机制
发生中断意味着操作系统介入,开展管理工作,这意味着操作系统要切换形态,切换到核心态,提高管理权限。
内中断:异常,指令中断,硬件故障(缺页),软件中断(整数除零)
外中断:狭义的中断,人工干预,外设请求
系统调用
向上提供简易的服务,包括命令接口,程序接口,程序接口由一组系统调用组成,系统中各种的共享资源都由操作系统统一掌管,由操作系统代为完成。发生在用户态,执行在核心态。
按管理功能分类:设备,文件,进程控制,进程通信,内存管理
进程
定义:通过PCB进程控制块,描述进程的各种信息。PCB,数据段,程序段组成进程实体(进程映像),PCB是进程存在的唯一标志
组成:
PCB:PID、UID、状态、优先级、程序段指针、数据段指针、各种处理器信息(寄存器信息);
程序段:存放代码;
数据段:存放数据;
组织方式:对成千上万的PCB进行管理,链接方式(根据进程状态将PCB分为多个队列,操作系统持有各个队列的指针);索引方式(建立索引表,操作系统持有指针)
特征:动态,并发,独立,异步,结构,是有生命的
进程三(五)状态
运行态:占有CPU
就绪态:已具备条件,但由于没有空闲的CPU,暂时不能运行,万事具备,只欠CPU
阻塞态(等待态):等待某一事件而暂时不能运行
创建态:系统完成1创建过程
终止态:进程运行结束,遇到不可修复的错误

进程的控制:以PCB为载体,用原语(特殊的程序)实现,执行期间不能中断,具体有“关中断指令”和“开中断指令”,属于特权指令,必然在核心态。
进程通信(各进程拥有的内存地址空间相互独立,一个进程不能直接访问另一个进程的地址空间):
共享存储:既然空间相互独立,不能互相访问,那就用共享空间,基于互斥原则。基于数据结构的共享,速度慢,低级通信;基于存储区,速度快,高级通信;
管道通信:用于连接读写进程的共享文件,半双工通信。当管道写满,写进程会被堵塞;管道变空,读进程被阻塞;
消息传递:消息头,消息体。直接通信,间接通信,间接通讯是先发到信箱里。
互斥:进入区,临界区,退出区,剩余区;空闲让进,忙则等待,有限等待,让权等待
1.单标志法:每个进程进入临界区的权限只能被另一个进程赋予,违背“空闲让进”,满足条件就会陷入循环中
2.双标志先检查法:标记各进程想进入临界区的意愿,可能会同时进入临界区,也就是说进入区的检查,上锁操作无法一气呵成

3.双标志后检查法:为了解决上一个方法的弊端,人们想到先变值,后判断,但会导致都进不去,死锁

4.Peterson算法:尝试孔融让梨,这里的进入区做了三个判断,中国人算法


5.信号量机制(重点)
信号量:表示系统中某种资源的数量,是一种变量,但只能做三种操作即初始化,P操作,V操作。wait,signal原语简称为PV(检测,增量)操作,java里也有相应的语句可以实现。
整型信号量:
记录型信号量:多一个队列来记录

进程同步:保证“一前一后”执行的两个操作,通过PV拆开两个进程,即使P2先执行也会被堵塞,等待V操作的加一。前操作后进行V操作,后操作前执行P操作

6.生产者,消费者(PV实现)
生产者进程生产进程到缓冲区,只要不满就可以继续放,类似管道
这两者看起来像一个环状的结构,我生产你才能消费,我消费你才能生产




7.管程
信号量机制编程难,易出错
管程是一种特殊的软件模块,对数据结构的一组函数,其实就是java的封装,你直接调接口就行

线程
轻量级进程,增加并发度。引入线程后,进程是资源分配的基本单位,线程是调度的基本单位。切换进程运行环境,开销大,而线程相对小很多。
用户级线程,内核级线程:操作系统只看得见内核级线程,因此,只有内核级线程才是处理机分配的单位。

多线程模型:多对一(并发弱,一个阻塞了会影响其他的),一对一(各不影响),多对多(组合模式)
处理机调度
概念:银行(vip优先),上厕所(时间短的优先),按照某种规则来决定处理这些任务的顺序
三个层次:
高级调度【作业调度,外存与内存,从外存队列挑选一个作业,建立PCB,获得竞争处理机的权利,作业调出时撤销PCB】
中级调度【内存调度,引入虚拟存储技术,可将暂时不能运行的进程调至外存等待,称为挂起状态,但PCB会常驻内存。中级调度就是决定哪个挂起状态的进程重新调入内 存,发生的频率比高级调度更高】
低级调度【进程调度,按照某种策略,从就绪队列选取一个进程放入CPU】
图解:
进程调度
进程切换的过程主要完成了对原有数据的保存,对新的进程数据的恢复。
非抢占方式:运行过程中,即便有紧迫的任务,当前进程依然会继续使用,直到进程终止或主动要求进入阻塞态
抢占方式:可优先处理紧迫的任务
进程调度算法指标:
CPU利用率:cpu利用时间/总时间
系统吞吐量:单位时间完成作业的数量
周转时间:作业提交给系统到作业完成
周转时间=等待时间+运行时间+(I/O操作时间)
平均周转时间:各作业周转时间之和/作业数
带权周转时间:周转时间/运行时间
平均带权周转时间:各作业带权周转时间/作业数
等待时间,平均等待时间,响应时间
调度算法
FCFS(先来先服务):用于作业调度,考虑谁先到后备队列(外存);用于进程调度,考虑谁先到就绪队列

SJF(短作业优先):会导致饥饿现象,如果一直有短作业插入的话
抢占式SJF:最短剩余时间优先
HRRN(高响应比优先Highest response ratio next):先计算响应比,选择响应比最高的,响应比=(等待时间+要求服务时间)/要求服务时间,不会导致饥饿

时间片轮转(RR,Round-Robin):根据到达就绪队列的顺序,轮流让各进程执行一个时间片(100ms),一个时间片内若未执行完,将进程重新放到就绪队列队尾。如果时间片分配的太长,就会退化为先来先服务,太小的话,切换太频繁会消耗系统资源
优先级:优先级高的先运行,看清题目中优先数与优先级的关系。就绪队列未必只有一个,可按不同的优先级来组织,也可把优先级更高的排在靠近队头的位置。系统的,前台的进程的优先级高于用户的,后台的,且操作系统更偏好I/O型进程
多级反馈队列:综合以上的优点,很骚气,折中权衡,抢占式,你等的时间多,那我就给你补偿,下次给你更多的时间片,UNIX就是这个算法

死锁🔒
在并发环境下,各进程竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象。
必要条件:互斥,不剥夺,请求和保持
饥饿:例如之前的短进程优先算法,有源源不断的短进程到来,长进程一直得不到处理,从而引发饥饿
预防死锁:破坏死锁的其中一个条件即可
死锁的检测:化简资源分配图,最后还连着边的进程就是死锁进程
死锁的解除:挂起某些死锁进程,但应防止饥饿现象;终止进程法;进程回退法
如何决定对谁动手:1.进程优先级;2.执行时间少的;3.还要多久;4.已经使用了多少资源;5.是交互式还是批处理
内存管理
装入模块装入内存:绝对装入(灵活性低,适用于单道程序环境,编译器完成);静态重定位(装入的起始物理地址为100,则所有地址参数都+100);动态重定位(运行时,在段寄存器的基础上加上逻辑地址)
链接方式:静态链接;装入时动态链接;运行时动态链接
内存的扩充:
覆盖技术:一个固定区,多个覆盖区,需要用到时调入内存,用不到时调出内存,必须由程序员声明覆盖,对用户不透明(单进程)
交换技术:内存与外存的交互,分为对换区,文件区,对换区的I/O速度比文件区的更快(多进程间)
连续分配(内存空间为进程连续分配,只需要维护头内存块地址+内存块数):
单一连续分配:整个用户程序独占用户区,无外部碎片,有内部碎片(分配给进程的内存区域,有些部分没有用上)
固定分区分配:每个分区只能装入一个作业,分为分区大小相等,大小不等
动态分区分配:根据实际大小再建立分区,两种常用的数据结构:空闲分区表,空闲分区链(双向链表),可通过紧凑(Compaction)技术解决外部碎片
动态分区分配算法:
1.首次适应(First Fit):从低地址开始查找,找到第一个满足大小的空闲分区
2.最佳:按容量递增排列,刚好满足即可。这样会导致留下越来越多的小内存块,会产生很多的外部碎片
3.最坏:按容量递减,优先使用最大的
4.邻近适应:首次适应会导致低地址部分出现很多小的空闲分区,若能从上次查找结束的位置开始检索,就是该算法的目的。此外,该算法的开销小,不需要排序
非连续分配(内存空间为进程非连续分配,):
1.基本分页:将内存细化,将进程也细化,利用微分思想,将内部碎片降低到尽可能地小。内存细化为等长的页框(大小一定为2的整数幂),相对应地,进程也细化为相同长度的页面,每个页面会离散的存放到页框中。一个进程对应一张页表,页表中存储的信息为页号(逻辑地址的起始位置)和内存块号(内存物理地址的起始位置)——页表项。


确定页面大小后,可以根据计算机以二进制进行存储的特性,确定每个页表项的大小(向上取2的整数幂),确定了页表项大小后,可以隐藏页号,根据起始地址和页表项长度即可找到所有进程对应的内存块地址,此处的页表项长度即为一个页面中包含的页表项数量。
局部性原理:时间局部性(某个数据被访问,不久之后很可能会被再次访问),空间局部性(一旦访问某个存储单元,不久之后其附近的存储单元很可能会被再次访问)
快表:相当于一个高速缓存,查询时先查快表,若是快表没有,再去慢表(内存中),之后向快表加一条记录
单级页表问题:由局部性原理可知,进程在一段时间内只需要访问某几个页面就可以正常运行了,没有必要让整个页表都常驻内存
两级页表:做个分组,整出二级页表,这样页表就变小了
2.基本分段:类似于分页,有段表。每个段的大小不一致,是按逻辑功能划分的。编程更方便,可读性强。

3.段页式:结合以上两种优点,先分段再分页。段号的位数决定每个进程分为多少段,页号位数决定每段最大多少页,页内偏移量决定页面大小,内存块大小。
虚拟内存
传统存储管理方式:作业必须一次性全部装入内存才能开始运行,大作业无法运行;驻留性:一旦作业进入内存,会一直驻留在内存。

在操作系统的管理下,用户看起来有一个比实际内存大得多的内存,这就是虚拟内存。磁盘参与存储,进程中未激活部分存入磁盘中,在激活后被调入内存中。
虚拟内存特性:多次行,对换性(允许作业的换入换出),虚拟性
请求分页方式:在基本分页的基础上加了几个表项,状态位(是否在内存),访问字段,修改位(修改过的页面才能置换到外存),外存地址
页面置换算法:内存不够时,将暂时不用的信息换到外存,追求更少的缺页率(频繁的换入换出会导致缺页)
1.最佳置换算法:最理想的算法,所以无法实现
2.先进先出:这个黄兄在黑板上讲过,谁在内存块的时间长,谁淘汰。会产生Belady异常(当为进程分配的物理块数增大时,缺页次数不减反增),实现简单,性能差
3.最近最久未使用(LRU):最近最久未使用的先淘汰,需要专门的硬件支持,算法开销大

3.时钟置换算法(CLOCK):设置访问位,连接成循环队列,是零,就将该页面换出
4.改进版时钟置换算法:优先淘汰没有修改过的页面,新加一位修改位,最多四轮扫描(00,01,10,11),条件依次放宽
文件管理
逻辑结构:无结构文件(流式文件);有结构文件(记录式文件)
FCB:文件控制块,文件的基本信息
文件的物理结构:
1.连续分配:

2.隐式链接分配:

3.显示链接分配:

4.索引分配:

索引分配的优化:

空间管理:
1.空闲表法:起始位置,空闲块长度,适用于连续分配
2.空闲链表法:盘块链(物理块之间链接),盘区链(多个连续物理块之间链接,每个连续物理块的信息维护在头物理块中)
3.位示图法:
4.成组链接法:UNIX采用的策略,适合大型文件系统


文件基本操作
新建:调用create系统调用,大小,路径,文件名
打开:查询系统里的打开文件表,打开计数器来记录有多少进程打开了该文件

共享:基于索引节点(硬链接)各用户指向同一个索引节点,索引节点需要有链接计数count,某用户删除文件时,只是删除该用户的目录项,且count–,只有当count==0时,才能真正删除文件数据和索引节点;基于符号链(软链接)类似快捷方式,当双击快捷方式时,系统判断是LINK类型的快捷方式文件时,会根据其中的路径信息检索目录,最终找到exe文件。
文件保护:口令保护,口令一般存放在FCB,索引节点中;加密保护,异或加密,对文件原始数据的加密 ,用户自己记住密码即可。
访问控制列表:分组,不同人有不同权限。
磁盘的结构
磁盘:表面是由磁性物质组成,可以记录二进制数据
磁道:磁盘上一圈一圈的,成千上万
扇区:磁道被分为一个个扇区,各扇区存放的数据量相同
磁盘调度算法
1.先来先服务;
2.最短寻找时间优先(SSTF)优先处理最近的磁道,只是选择眼前最优,但总体未必最优,可能会产生饥饿现象;
3.扫描算法(SCAN,电梯算法)只有磁头移动到最外侧才能往内移动,移动到最内层才能往外移动,电风扇摇头;
4.LOOK调度算法,改善扫描算法,如果在磁头方向上已经没有别的请求,就可以立即改变磁头方向;
5.C-SCAN循环算法,到最边上的磁道才改变磁头移动方向,快速返回到起始端,期间不做任何请求处理
减少延迟时间的方法:交替编号、错位命名(磁头读取一个扇区的数据后会有一定的处理延迟)
磁盘初始化:1.物理格式化 ,划分扇区2.分盘3.逻辑格式化,创建文件系统,初始化管理空间所用的数据结构
引导块:开机需要一系列初始化工作,通过初始化程序完成,ROM中的数据无法更改,集成在主板上,完整的自举程序放在启动块,启动块在固定位置
IO设备(外部的输入输出设备,鼠标键盘,显示器,移动硬盘)![在这里插入图片描述]()
I/O控制器:机械部件,电子部件,是CPU和设备的中介,控制寄存器,状态寄存器,数据寄存器
控制方式:
1.直接控制

2.中断驱动

3.DMA方式:direct memory access,直接存储器存取,数据的传送单位是“块”,直接存入内存,不需要CPU作为快递小哥,降低cpu干预。

DMA的组成:

4.通道控制:硬件,弱鸡版cpu,有通道指令,每次处理一组数据块。
软件层次:设备被看成特殊的文件

假脱机技术(SPOOLing)

缓冲区(单缓冲、双缓冲、循环缓冲)






浙公网安备 33010602011771号