目录
本文图片均来源于王道考研计算机操作系统
【王道计算机考研 操作系统】https://www.bilibili.com/video/BV1YE411D7nH?p=41&vd_source=70586cfbe12502eb00ef1b5feee78bc7
一.概念
1.程序:静态的,就是个存放在磁盘里的可执行文件,就是一系列的指令集合
·
2.进程:是动态的,是程序的一次执行过程,同一个程序多次执行会对应多个进程,进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
·
3.进程实体:指进程在运行过程中的某一瞬间的映像
·
4.PID:当进程被创建时,操作系统为每一个进程分配一个唯一的,不重复的“身份证号”
·
5.进程控制块PCB:记录保存进程的运行情况
·
进程由PCB,程序段,数据段组成
程序段:程序的代码(指令序列)
数据段:运行过程中产生的各种数据
·
6.进程控制:实现进程状态的转换,用原语实现
·
7.原语:是一种特殊的程序,它的执行具有原子性,即程序的运行必须是一气呵成的不可中断
·
8.原子性:由“关中断指令”和“开中断指令”两个特权指令实现,即使CPU不受中断命令,直到执行完成再恢复中断,由于不受中断的行为很危险所以必须是特权指令
·
9.进程间通信IPC:指两个进程之间产生数据交互
·
进程通信分为:共享存储,消息传递,管道通信
共享存储:操作系统在内存中划出一块共享存储区,数据的形式,存放位置都由通信进程控制而非操作系统,为避免出错,各个进程对共享空间的访问应该是互斥的
·
消息传递:进程间的数据交换以格式化的消息为单位,进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换
·
消息传递分为直接通信方式和间接通信方式
直接通信方式:消息发送进程要指明接收进程的PID。
间接通信方式:以“信箱”作为中间实体进行消息传递,即在操作系统内核的地址空间内创建一个“信箱”,发送进程发送到信箱,接收进程在从信箱取出
·
管道通信:在内存中开辟一个大小固定的内存缓冲区--“管道”,与共享存储的区别就是管道通信是一个数据流的形式,类似队列,先进先出,共享存储无限制,随意读取,管道通信只能采用半双工通信,要实现全双工通信需要两个管道,各进程要互斥访问管道
·
10.线程:使线程可以并发的执行多个操作,一个进程内有多个线程,线程是程序执行流的最小单位,是调度的基本单位
·
11.作业:一个具体的任务
·
12.低级调度(进程调度,处理机调度):按照某种策略从就绪队列中选取一个进程,将处理机分配给它
·
13.挂起状态:暂时调到外存等待的进程状态
·
14.挂起队列:被挂起的进程PCB会被组织成挂起队列
·
15.中级调度(内存调度):按照某种策略决定将哪个处于挂起状态的进程重新调入内存
·
16.高级调度(作业调度):按一定的原则从外存的作业后备队列中挑选一个作业调入内存,并创建进程。每个作业只调入一次,调出一次。作业调入时会建立PCB,调出时才撤销PCB
·
17.系统吞吐量:单位时间内完成作业的数量
·
18.周转时间:指作业被提交给系统开始,到作业完成为止的这段时间间隔
周转时间=完成时间-到达时间
带权周转时间=周转时间/运行时间(实际就是周转时间为运行时间的几倍,权值越大代表等待的时间越久,满意度越低,即本可以马上运行完却要等待长时间)·
19.等待时间:指进程/作业处于等待处理机状态时间之和,等待时间越长,用户满意度越低
·
20.响应时间:指从用户提交请求到首次产生响应所用的时间
21.调度算法分为先来先服务(FCFS),短作业优先(SJF),高响应比优先(HRRN)
·
22.交互式算法:时间片轮转调度算法(RR),优先级调度算法,多级反馈队列调度算法
·
23.同步(直接制约关系):指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调他们的工作次序而产生的制约关系,进程间的直接制约关系就是源于它们之间的相互合作
·
24.进程互斥分为:进入区,临界区,退出区,剩余区
进入区:负责检查是否可进入临界区,若不可进入则设置正在访问临界资源的标志(上锁),阻止其他进程进入
临界区:进程中访问临界资源的代码段
退出区:负责解除正在访问临界资源的标志(解锁)
剩余区:做其他处理·
25.进程互斥的软件实现方法:单标志法,双标志先检查法,双标志后检查法,Peterson算法
·
26.进程互斥的硬件实现方法:中断屏蔽方法,TestAndSet(TS指令/TSL指令),Swap指令(XCHG指令)
·
27.信号量机制:用户进程通过操作系统提供的一对原语来对信号量进行操作,从而很方便的实现了进程互斥,进程同步
·
28.信号量:是一个变量,用来表示系统中某种资源的数量
·
29.整型信号量:用一个整数型的变量作为信号量来表示系统中某种资源的数量
二.关键点
PCB是给操作系统用的,程序段和数据段是给进程自己用的
PCB是进程存在的唯一标志
在单核CPU情况下,同一时刻只会有一个进程处于运行态,多核才可能有多个进程处于运行态
进程控制原语所要做的三类事情:
更新PCB中的信息,将PCB插入合适的队列,分配/回收资源
为了保证安全,一个进程不能直接访问另一个进程的地址空间,需要通过操作系统的管理(即进程间通信IPC)
.管道中的数据一旦被读出,就彻底消失,所以当多个进程读同一个管道时,可能会错乱。解决方案有两种:(1)一个管道允许多个写进程,一个读进程(2)允许多个写进程和多个读进程,但系统会让各个进程轮流从管道中读数据
进程调度(低级调度)是操作系统中最基本的一种调度,在一般的操作系统中都必须配置进程调度,进程调度频率很高
不能进行进程调度的情况
(1)在处理中断的过程中(2)进程在操作系统内核程序临界区中
(3)在原子操作过程中
进程切换是有代价的,所以如果过于频繁的进行进程调度或切换,必然会使整个系统的效率降低,使系统大部分时间都花在了进程切换上,而真正用于进程的时间减少
三.进程的状态转换
进程的三个基本状态为运行态,就绪态和阻塞态
四.线程的实现方式
线程的属性:
线程的实现方式:一对一,多对一,多对多
用户级线程:
内核级线程:
在用户级线程和内核级线程的基础上实现线程的三种模型方法
一对一线程模型:
多对一线程模型:
多对多线程模型:
五.调度算法
调度算法分为先来先服务(FCFS),短作业优先(SJF),高响应比优先(HRRN)
先来先服务(FCFS)
短作业优先(SJF)
高响应比优先(HRRN)
响应比=等待时间+要求运行时间/要求运行时间
响应比越高,则等待时间越大,要求运行时间越小,即等了越久且运行时间越短的进程会优先被选择,更合理
这三种算法不关心“响应时间”,也不区分任务的紧急程度,对于用户来说交互性很糟糕,只适用于早期的批处理系统
交互式算法:时间片轮转调度算法(RR),优先级调度算法,多级反馈队列调度算法
时间片轮转调度算法(RR)
如果时间片太大,使得每个进程都可以在一个时间片内就完成,则时间片轮转调度算法退化为先来先服务调度算法,且会增大进程响应时间,所以时间片不能太大
时间片太小会导致进程的切换过于频繁,这是有代价的
优先级调度算法
静态优先级:创建进程时确定,之后一直不变
动态优先级:创建进程时有一个初始值,之后会根据情况动态地调整优先级
通常系统优先级高于用户优先级;前台进程优先级高于后台进程;操作系统更偏好I/O型进程
多级反馈队列调度算法
六.进程互斥的软件实现方法
进程互斥的软件实现方法:单标志法,双标志先检查法,双标志后检查法,Peterson算法
单标志法
主要问题:违背“空闲让进”原则
双标志先检查法
问题:违背“忙则等待”原则(原因是进入区的“检查”和“上锁”两个处理不是一气呵成的,所以当并发时会有问题)
双标志后检查法
Peterson算法
问题:遵循了空闲让进,忙则等待,有限等待三个原则,但未遵循让权等待原则(即进程进不了临界区就应该立即释放处理机资源,不继续在CPU上等待)
七.进程互斥的硬件实现方法
进程互斥的硬件实现方法:中断屏蔽方法,TestAndSet(TS指令/TSL指令),Swap指令(XCHG指令)
中断屏蔽方法:利用开/关中断指令实现,简单高效,但不适用于多处理机,只适用操作系统内核进程,不适用于用户进程
TestAndSet(TS指令/TSL指令)
Swap指令(XCHG指令)
无论是软件实现进程互斥还是硬件实现进程互斥都不能实现“让权等待”原则
八.信号量
整型信号量
利用原语避免了进程并发导致都不能进入临界区或都进入了临界区的问题,但仍未解决让权等待问题
记录型信号量
记录型信号量实现了“让权等待”,基本遵循进程互斥的原则
信号量机制实现进程互斥
信号量机制实现进程同步
管程:为解决信号量机制编程麻烦(频繁P,V操作),易出错的问题
九.锁
互斥锁
死锁:在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象
饥饿:指由于长期得不到想要的资源,某进程无法向前推进的现象
发生死锁的进程至少有两个,饥饿可能只有一个
死锁产生的必要条件
即互斥条件,不剥夺条件,请求和保持条件,循环等待条件
死锁的处理
预防死锁利用破坏死锁产生的必要条件来实现,但都有明显的缺点,有的会造成资源浪费,有的会使资源利用率低,有的会有安全隐患
避免死锁
1.安全序列和死锁的关系
2. 银行家算法
死锁的检测