概念
操作系统
组织和管理计算机系统中的软件和硬件,组织计算机系统工作流程、控制程序执行,提供给用户工作环境和友好的接口。
3个作用:
- 管理计算机中运行的程序和分配各种软硬件资源
- 为用户提供友善的人机洁界面
- 为应用程序的开发和运行提供一个高效的平台
4个特征:
- 并发行、共享性、虚拟性、不确定性
操作系统功能:
- 进程管理: 对CPU执行时间进行管理 ,包括进程控制、进程同步、进程通讯、进程调度。
- 文件管理:对硬盘上的存储空间管理,目录管理,文件的读写和存取控制。
- 存储管理:对主存内存进行管理,包括存储分配和回收、存储保护、存储映射、存储扩充
- 设备管理:对硬件设备的管理,包括对输入输出的分配、启动、完成、回收。
- 作业管理:包括任务、界面管理、人机交互、图形界面、语音控制、虚拟现实等。
操作系统的分类:
- 批处理操作系统:单道批处理和多道批处理,单个任务执行发展到同时多个任务执行。
- 分时操作系统:将CPU的工作时间进行切分,轮流为各个终端用户服务,要求交互高。
- 实时操作系统:要求较快的进行处理相应,并在被控对象允许的时间内快速反应,要求可靠性,交互不高。
- 网络操作系统:使计算机联网共享资源,有集中模式、客户端/服务器模式(CS)、对等模式(P2P)。
- 分布式操作系统:多个分散的计算机连接而成的计算机系统,无主次之分,都能互现通讯交换信息。
- 微型计算机操作系统:windows、linux、mac
嵌入式操作系统:(物联网设备,智能家居)
-
微型化:性能和成本考虑,占用资源和系统代码量少
-
可定制:成本和研发考虑,兼容不同的处理器,对硬件变化进行结构与功能上的配置,满足不同的需求。
-
实时性:实时响应高,过程控制、数据采集、传输通讯、媒体信息。 可靠性:提供容错和防故障措施。
-
易移植性:采用硬件抽象层和板级支撑包的底层设计技术。
嵌入式系统初始化过程按照自底向上,片级初始化(芯片)-板级初始化(外设)-系统初始化(bios引导)
进程组成和状态
进程的组成:进程控制块PCB、程序、数据
进程的状态:
- 运行态:CPU正在执行进程
- 就绪态:等待被调度分配CPU
- 阻塞态:磁盘读写数据、打印机等,CPU不会等着浪费资源,阻塞态事件结束必须进入就绪态
前趋图:
用来表示那些任务可以并行执行,哪些之间有顺序关系
进程资源图:
进程和资源之间的分配和请求关系,下图箭头向下为分配,向上为请求
资源分配和请求都满足后执行结束,资源会回收,释放资源
进程的同步和互斥
- 临界资源:各进程互斥的方式访问资源,同一时间只能有一个进程使用资源
- 临界区:本质是一段代码,进程对临界资源实施操作那段代码
- 互斥:临界资源需要加锁,使用完后解锁给其他进程使用
- 同步:多个任务可以并发执行,速度上有差异
- 互斥信号量:临界资源使用互斥,初始值为1
- 同步信号量:对共享资源访问控制(数量上限),初始值一般为共享资源的数量
信号量操作:
- P(S):申请资源,资源减一,S>=0才能继续执行,S<0表示没有资源,进入阻塞状态
- V(S):释放资源,资源加一,S>0才能继续执行,S<=0表示从阻塞态唤醒一个进程
进程调度
当有优先级高的进程来时如何分配CPU
- 可剥夺:有高优先级,强制将运行的CPU分配给到高优先级进程
- 不可剥夺:必须等到当前进程自动释放再分配给高优先级进程
一个作业从提交到完成需要经历高、中、低三级调度:
- 高级调度:作业调度,决定哪个后备作业可以调入主系统做好运行准备。
- 中级调度:对换调度,它决定处于交换区中的哪个进程可以调入内存,以便直接参与CPU竞争。
- 低级调度:进程调度,处于内存中哪个就绪进程可以占用CPU,最活跃重要的进程调度。
调度算法:(低级调度)
- 先来先服务FCFS:先到达的进程分配CPU 时间片轮转:分配每一个进程CPU时间片,轮流使用CPU
- 优先级调度:每一个进程都有优先级,优先级高的先分配CPU,区分是否可以剥夺。
- 多级反馈调度:时间片轮转+优先级调度结合而成,设置多个就绪队列,每个队列不同的优先级,分配不同时间片长度,新进程先进入1队列末尾,执行时间片,未执行完就进入队列2的末尾,如此重复。
死锁:
当一个进程在等待永远不可能发生的事件,系统中多个进程死锁,会造成系统死锁。
死锁的四个必要条件:
- 资源互斥
- 占有资源,并等待其他资源
- 系统不能剥夺进程资源
- 进程资源图是一个环路
打破死锁:
- 死锁预防:采用策略限制并发进程对资源的请求,破坏死锁产生的四个条件之一
- 死锁避免:银行家算法,提前计算出不会死锁的分配方法才分配资源,否则不分配
- 死锁检测:允许死锁产生,定期运行程序检测死锁的程序,使用死锁解除。 死锁解除:强制剥夺资源,撤销进程等。
死锁资源的计算:系统内有N个进程,每个进程都需要R个资源
- 发生死锁的最大资源:N*(R-1)
- 发生死锁的最小资源:N*(R-1)+1
线程:
传统进程的2个属性:可独立的调度和分配资源的单位。
线程就是继承进程的可独立的调度,各自管理,改善进程一系列问题,进程切换的资源消耗、程序可并发执行。
线程基本不拥有资源,只有必不可少的资源(程序计数器、一组寄存器和栈),进程里所有线程资源共享,但不能共享独有资源。
计算
前趋图计算:
先P申请资源,执行后V释放资源,S为信号量,一条箭头就代表一个信号量
题目一:
- 题目有5个信号量,计算假设一般编号从上到下,从左到右,后续根据条件进行验证
- P1执行后释放2个信号量,假设上面是s1,下面是s2,P2执行条件是P(s1)就验证了上方为s1
- P2执行需要P(s1),执行后释放1个信号量,假设为s3,P4执行条件是P(s3)就验证了为s3
- P3执行需要P(s2),执行后释放1个信号量,上方已经验证,这边为s4 5、P4执行需要P(s3),执行后释放1个信号量,为s5
题目二:
1、先假设8个S信号量序号
2、P1执行后,释放2个信号量,V(s1)V(s2),P3执行需要P(s2),验证下方为s2,上方为s1。
3、P2执行后,需要p(s1),释放2个信号量,V(s3)V(s4),P3执行需要s2,s3,s3为P操作,选择题都为P(s3)。
4、P3执行后,释放2个信号量,V(s5)V(s6),P4执行需要2个P,上面是为s4固定,下方就是s5了,另一个就s6
5、P4执行后,释放1个信号量,V(s7)
6、P5执行,想要p(s6),执行后释放V(s8),验证上方为7
题目三:死锁计算
求死锁最小资源,3*(5-1)+1=13
题目四:信号量计算
互斥信号量:信号量=资源总数=3。
S 为 -3,S 为负值说明有线程在等待资源;S 的绝对值即是等待资源的线程数。
题目五:银行家算法
- 求剩余资源数量R1=2 R2=0 R3=1
- 安全执行就是不要发生死锁,求出P1-5需要资源
- 第一个P5,然后P5执行完后回收资源,剩余资源就是P5分配资源+剩余资源=3 1 1,再一次进行计算匹配,可以满足P2和P3