一、什么是进程
1、概念
进程(Process),是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行【资源分配和调度】的一个独立单位。
几个要点:
进程是『程序』的『一次执行』,an instance of a computer program that is being executed(进程是计算机正在进行的一个实例);
进程是一个程序及其数据在处理机上顺序执行时所发生的『活动』;
进程是程序在一个『数据集合』上运行的过程;
进程是系统进行『资源分配和调度』的一个『独立』单位(或者说基本单位);
进程的结构:
控制块(PCB): Process Control Block, 进程唯一标识;
数据段:存放原始数据、中间数据;
程序段:存放在文本区域,可被多个进程共享;
2、特征
动态性:由创建而生,由撤销而亡;
并发性:多个进程同时运行;
独立性:独立资源分配;
异步性:相互独立、互不干扰;
3、进程与线程
重点:线程相对于进程,大大降低了创建、撤销和切换可执行实体的成本和难度。
什么是线程?
Thread,进程的轻型实体,也叫“轻量级进程”,是一系列活动按事先设定好的顺序依次执行的过程,是一系列指令的集合;
是一条执行路径,不能单独存在,必须包含在进程中;
线程是OS中运算调度的最小单位;
线程的结构:
控制块(TCB):Thread Control Block,线程唯一标识;
数据段:存放原始数据,中间数据;
程序段:存放在文本区域,可被多个线程共享;
为什么引入线程?
提高OS的并发性;
线程的属性:
轻型实体; 独立调度和分派的基本单位;可并发执行; 共享进程资源;
线程的实现方式:
用户级线程(ULT);内核级线程(KLT);![](https://img-blog.csdnimg.cn/b5ca57a3976940ceaf6fbd0d3f86b01c.png)
二、进程是怎么运行的
1、进程的状态
进程的生命周期:从创建到终止的过程;
三种基本状态:
就绪(Ready):可运行而未运行的状态,等待CPU的调度(就绪队列);
执行(Running):由CPU调度正在执行的进程;
阻塞(Blocked):由I/O请求、进程同步、进程通信等引起的阻塞(阻塞队列);
创建和终止状态:
创建(New):将磁盘上的文件加载到内存中,由系统内核创建一个新进程;
终止(Terminated):程序自然结束、严重错误、外部因素直接停止程序;
状态转换
2、进程的控制
即OS对进程实现有效的管理,包括创建新进程、撤销已有进程、挂起、阻塞和唤醒、进程切换等多种操作。OS通过原语(Primitive)操作实现进程控制。
原语(Primitive):
由若干条指令组成,完成特定的功能,是一种原子操作(Action Operation);原子操作,要么全做,要么全不做,执行过程不会被中断在管态/系统态/内核态下执行,常驻内存;是内核三大支撑功能(中断处理/时钟管理/原语操作)之一;
进程控制![](https://img-blog.csdnimg.cn/c39b0d4d371e4828b5a5f2aa029f8bb1.png)
创建原语:create
阻塞原语:block
唤醒原语: wakeup
撤销原语: destroy
挂起与激活:为了系统和用户观察和分析进程;![](https://img-blog.csdnimg.cn/7af0eb208f54485b9b1f49fe41e7a95a.png)
挂起原语: suspend,静止就绪:放外存,不调度;静止阻塞:等待事件;
激活原语: active,活动就绪:等待调度;活动阻塞:等待唤醒;
创建和终止:
阻塞和唤醒:
进程挂起:
进程切换:
状态转换:
3、进程的调度
调度的概念:CPU调度,根据一定的算法和原则将CPU资源进行重新分配的过程;
前提:作业/进程数远远大于处理机数;
目的:提高资源利用率,减少处理机空闲时间;
调度程序:一方面要满足特定系统用户的需求(快速响应),另一方面要考虑系统整体效率(系统平均周转时间)和调度算法本身的开销;
调度的层次:
高级调度/作业调度:把后备作业调入内存只调入一次,调出一次;
中级调度/内存调度:将进程调至外存,条件合适再调入内存在内、外存对换区进行进程对换;
低级调度/进程调度:从就绪队列选取进程分配给处理机;最基本的调度,频率非常高(相当于一个时间片完成);
进程调度方式:
剥夺式/抢占式调度:
立即暂停当前进程;
分配处理机给另一个进程;
原则:优先权/短进程优先/时间片原则;
非剥夺/非抢占式调度:
若有进程请求执行;
等待直到当前进程完成或阻塞;
缺点:适用于批处理系统,不适用分时/实时系统;
调度的时机、切换与过程:
进程运行完毕;进程时间片用完;进程要求I/O操作;执行某种原语操作;高优先级进程申请运行(剥夺式调度);
过程:
1.保存镜像:记录进程现场信息;
2.调度算法:确定分配处理机的原则;
3.进程切换:分配处理机给其它进程;
4.处理机回收:从进程收回处理机
调度的基本准则:
调度算法指标:
CPU利用率↑忙碌时间/总时间;
系统吞吐量↑完成作业数/总时间;
周转时间↓作业完成时间-提交时间:带权周转时间:周转时间/实际运行时间;
等待时间↓作业等待处理机调度时间:关注平均值;
响应时间↓提交请求到首次响应间隔;
典型的调度算法:
1.先来先服务(FCFS,First Come First Served);![](https://img-blog.csdnimg.cn/7d62e4d668f4484e90d8d6e856562022.png)
2.短作业优先 (SJF,Shortest Job First);![](https://img-blog.csdnimg.cn/83facb2a4e164c1799e19f97f4b4bee6.png)
3.高响应比优先调度(HRRN,Highest Response Ratio Next);![](https://img-blog.csdnimg.cn/33919710340e4c06b63c1610549ef68c.png)
4.优先级调度(PSA,Priority-Scheduling Algorithm);![](https://img-blog.csdnimg.cn/1637e201a94247308bbfdcd374009a3b.png)
5.时间片轮转调度(RR,Round-Robin);![](https://img-blog.csdnimg.cn/6e5659a1b35a4107aa90736424bafb79.png)
6.多级反馈队列调度(MFQ,Multileveled Feedback Queue);![](https://img-blog.csdnimg.cn/cb7b81cd9cc24e52b9dad5b78f1b5207.png)
![](https://img-blog.csdnimg.cn/56cba602ab394265a95d61f4bda9ae71.png)
三、进程之间是怎么协作的
1、进程通信
进程通信即进程间的信息交换,进程是资源分配的基本单位,各进程内存空间彼此独立一个进程不能随意访问其它进程的地址空间;
1、共享存储![](https://img-blog.csdnimg.cn/be5182b4fed446b290c6bc1d14549813.png)
2、消息传递![](https://img-blog.csdnimg.cn/922f391fe792402d8225f83e6002ef72.png)
![](https://img-blog.csdnimg.cn/6dccf403f6fb4ac9bb4791ac257dd5d3.png)
3、管道通信![](https://img-blog.csdnimg.cn/7dafbf40b1bc42bdbbd14b93eebe863a.png)
2、进程同步
1、进程同步的基本概念
协调进程间的相互制约关系,使它们按照预期的方式执行的过程;
前提:进程是并发执行的,进程间存在着相互制约关系;并发的进程对系统共享资源进行竞争;进程通信,过程中相互发送的信号称为消息或事件;
两种相互制约形式:
间接相互制约关系(互斥)︰进程排他性地访问共享资源;
直接相互制约关系(同步)︰进程间的合作,比如管道通信;
2、实现临界区互斥的基本方法
访问过程
1.进入区:尝试进入临界区,成功则加锁(lock)
2.临界区:访问共享资源
3.退出区:解锁(unlock),唤醒其它阻塞进程
4.剩余区:其它代码
访问原则
空闲让进:临界区空闲,允许一个进程进入;
忙则等待:临界区已有进程,其它进程等待(阻塞状态);
有限等待:处于等待的进程,等待时间有限;
让权等待:等待时应让出CPU执行权,防止“忙等待”;![](https://img-blog.csdnimg.cn/2695b9375e3f4fba9e090d3d422934c0.png)
![](https://img-blog.csdnimg.cn/406b36f553d64563bfe1ad226e3d09c7.png)
3、信号量 ![](https://img-blog.csdnimg.cn/f21b7604213f4dae8a25eb3be5b8d670.png)
分析进程同步和互斥问题的方法步骤:
1、分析关系:
进程的数量
进程间的同步或互斥关系
前驱关系
2、整理思路:
根据进程的操作流程确定P操作、V操作的大致顺序
3、设置信号量:
根据前两步分析和整理、设置信号量初始值
4、管程(Monitor,监视器) ![](https://img-blog.csdnimg.cn/deb09e12b6a14242807574a5eb4acd21.png)
![](https://img-blog.csdnimg.cn/3e6aff3bda0e4a4f9d758558afd899fb.png)
5、经典同步问题
四、如何处理死锁问题
1、死锁的概念
1、死锁的定义
多个进程由于竞争资源而造成的阻塞现象,若无外力作用,这些进程将无法继续推进;
相似概念:饥饿:等待时间过长以至于给进程推进和响应带来明显影响,“饿而不死”;
2、死锁产生的原因
系统资源的竞争;
进程推进顺序非法;
3、死锁产生的必要条件
互斥条件:共享资源的排他性;
不剥夺条件:访问时该共享资源不会被剥夺;
请求并保持条件:保持当前资源时请求另外一个资源;
循环等待条件:存在共享资源的循环等待链;
2、死锁处理策略
1、预防死锁
破坏互斥条件;![](https://img-blog.csdnimg.cn/3e12febf8e054f18beeb6fb9c08116c4.png)
破坏不剥夺条件;![](https://img-blog.csdnimg.cn/01ebfd34118147f6a888dea7c7e973f8.png)
破坏请求并保持条件;![](https://img-blog.csdnimg.cn/a10e38521c6a402c890b276f0a47f944.png)
破坏循环等待条件;![](https://img-blog.csdnimg.cn/1586e76c655149209cdee1bcbbbdb22b.png)
2、避免死锁![](https://img-blog.csdnimg.cn/1ddcd5d7f30c4712a0163554efa9e28e.png)
3、死锁的检测与解除
死锁检测:
需要一种数据结构,保存有关资源的请求和分配信息;
提供一种算法,利用这些信息检测是否形成死锁;![](https://img-blog.csdnimg.cn/812c2cb49f90427ebdba168ab263c7ac.png)
死锁解除: