进程
进程的概念
进程是正在运行的程序实例,是系统资源分配和调度的基本单位.
进程的特征
动态性,并发性
进程的构成
程序块+PCB+数据块
其中PCB是进程存在的唯一标志,描述了进程的基本状况,系统通过进程的PCB来调度和控制进程.PCB一般是常驻内存的,这样系统就可以方便及时地管理进程(而程序和数据可能因为进程挂起而移到外存)
PCB的组成:
进程ID
进程状态
等待原因
进程程序存放位置
进程数据存放位置
通用寄存器内容
控制寄存器内容
程序状态字寄存器内容
进程优先数
队列指针
说明信息、现场信息、管理信息
在创建进程时首先创建进程的PCB,然后才能根据PCB中的信息有效的控制进程;
当进程完成任务时,系统释放PCB,进程也随之消亡(通过撤销原语)
进程的状态
PCB中的状态字段描述了进程的当前状态,这些状态可以用下图描述
运行:当前进程获得了包括CPU在内的所有资源,占有CPU开始运行
就绪:其它资源都已拥有,等待CPU的调度,具备执行的条件(刚创建的进程处于就绪状态)
阻塞:等待除CPU外的其它资源,不具备执行的条件(进程因等待某事件的发生而主动放弃CPU)
挂起:将进程由内存移到外存
注意:
1、阻塞状态的进程不能直接进入运行状态
2、就绪状态的进程不能直接进入阻塞状态
进程控制原语:
创建原语:创建一个进程
阻塞原语
撤销原语:将执行完毕的进程撤销(回收资源)
唤醒原语:唤醒阻塞队列具备运行条件的一个进程,使其回到就绪队列
优先级原语
调度原语:按调度算法,从就绪队列中选择一个进程执行
进程的队列
处于不同状态的进程位于不同的队列,系统通常有三种队列(队列由PCB中的队列指针连成)
运行队列:单CPU系统运行队列内只有一个进程
就绪队列:有多个进程等待被调度
阻塞队列:根据阻塞的原因,分为多个阻塞队列;队列的个数取决于阻塞原因的个数
进程调度与死锁
进程调度的算法
先来先服务:就绪队列按先来后到排序,执行完一个再执行另一个
优先数调度:就绪队列按优先级排队
轮转法:就绪队列按FIFO排队,但是每个进程被执行一个时间片后就让出CPU,然后排在就绪队列末尾
注:
前两种算法不能用于分时操作系统的主调度算法
进程占有CPU的方式有两类:剥夺式和非剥夺式
死锁
死锁产生的必要条件:
1、互斥条件:指各进程间竞争临界资源
2、保持和等待条件:进程处于阻塞状态时,会一直保持已拥有的资源不放
3、不剥夺条件:已拥有的资源不会被剥夺
4、环路等待条件:每个进程都占有对方要申请的资源
解决死锁的策略:
- 预防:破坏死锁产生的必要条件
- 避免:分配资源时,看是否安全(如银行家算法),如果分配完后该进程能执行则证明是安全的。
- 检测
- 消除
希望通过这篇文章能让大家了解到进程和程序的区