首页 > 代码库 > 计算机操作系统学习笔记_2_进程管理 --进程与线程(上)
计算机操作系统学习笔记_2_进程管理 --进程与线程(上)
进程管理
--进程与线程(上)
一、 进程的概念
1.进程概念的定义[一个动态的概念]
进程是并发程序的动态运行,是多道程序系统中程序的动态运行过程。
进程是一个活动的实体,除了指令代码,进程通常还包括进程堆段、栈段(包含临时数据,如方法参数、返回地址和局部变量)和数据段(包含常量或全局变量等)。
进程是程序在数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
进程的元素:代码、数据、进程表(进程控制块,是与程序相比特有的元素)
2.进程的特征
动态性:动态性是进程最基本的特征。即进程由创建而产生,由调度而运行,因得不到资源而暂停运行,以及由撤销而消亡。
并发性:多进程同时存在于内存中,在一段时间内,同时运行。
独立性:进程是自我封闭的,有共享代码段的进程互相之间也是独立的。
异步性:进程按各自独立的、不可预知的速度向前推进,导致程序具有不可再现性。因此,在操作系统中,必须采取某种措施来保证各程序之间能协调运行。
结构性:由程序代码(段)、数据(段)和进程控制块组成。
二、 进程的状态与转换
1.进程的基本状态包括有以下几种(三状态模型):
运行状态(Running):进程占用处理机正在运行其程序。单处理机系统中只能有一个进程处于运行状态,多处理机系统中可能有多个进程处于运行状态。
阻塞状态(Blocked):也叫等待或睡眠状态,是进程由于等待某种事件的发生而处于暂停运行的状态。如进程因等待输入/输出的完成、等待数据到达、等待缓冲空间等。[注意:处于阻塞状态的进程是不参与调度的!]分为被动阻塞和自我阻塞。
就绪状态(Ready):进程已分配到除处理机以外的所有必要资源,具备了运行的条件,可能会有多个进程处于就绪状态,排成就绪队列,“万事俱备,只欠东风”。
三状态进程模型
进程还有五状态和七状态模型[添加了进程的挂起与激活],需要作一般了解。而三状态的模型是最基本的模型。
七状态进程模型
作业调度与进程调度
2.三状态进程状态的转换
(1)就绪状态 -> 运行状态:调度程序为就绪状态的进程分配处理机后,进入运行状态。
(2)运行状态 -> 阻塞状态:正在运行的进程因需要等待某事件而无法运行,让出处理机。
(3)阻塞状态 -> 就绪状态:进程所等待的事件发生了,进程就从阻塞状态进入就绪状态。
(4)运行状态 -> 就绪状态:正在运行的进程因时间片用完而被暂停运行;或者在可抢先式调度方式中,一个优先级高的进程到来后,正在运行的优先级低的进程被强制撤下处理机,转换为就绪状态。
三、 进程控制
【进程原语:即原子操作,要么全做,要么不做,一般是通过屏蔽中断来完成的】
1)进程创建
创建原语扫描系统的PCB链表,在找到一定PCB表之后,填入调用者提供的有关参数,最后形成代表进程的PCB结构。这些参数包括:进程名、进程优先级P0、进程正文段起始地址D0、资源清单R0等。
进程创建的典型事件:
(1)用户登录
(2)作业调度
(3)提供服务
(4)应用请求
特点:
(1)由系统程序模块统一创建,例如在批处理系统中,由操作系统的作业调度程序为用户作业创建相应的进程以完成用户作业所要求的功能。
(2)由父进程创建,例如在层次结构的系统中,父进程创建子进程以完成并行工作。
由系统统一创建的进程之间的关系是平等的,它们之间一般不存在资源继承关系。而在父进程创建的进程之间则存在隶属关系,且互相构成树型结构的家族关系。属于某个家族的一个进程可以继承其父进程所拥有的资源。另外,无论是哪一种方式创建进程,在系统生成时,都必须由操作系统创建一部分承担系统资源分配和管理工作的系统进程。无论是系统创建方式还是父进程创建方式,都必须调用创建原语来实现。
进程创建的过程:
申请空白PCB→ 为新进程分配资源 → 初始化进程控制块→ 将新进程插入就绪队列
2)进程撤销
以下几种情况导致进程被撤消:
(1)该进程已完成所要求的功能而正常终止。
(2)由于某种错误导致非正常终止。
(3)祖先进程要求撤消某个子进程。
无论哪一种情况导致进程被撤消,进程都必须释放它所占用的各种资源和PCB结构本身,以利于资源的有效利用。另外,当一个祖先进程撤消某个子进程时,还需审查该子进程是否还有自己的子孙进程,若有的话,还需撤消其子孙进程的PCB结构和释放它们所占有的资源。
撤消原语首先检查PCB进程链或进程家族,寻找所要撤消的进程是否存在。如果找到了所要撤消的进程的PCB结构,则撤消原语释放该进程所占有的资源之后,把对应的PCB结构从进程链或进程家族中摘下并返回给PCB空队列。如果被撤消的进程有自己的子进程,则撤消原语先撤消其子进程的PCB结构并释放子进程所占用的资源之后,再撤消当前进程的PCB结构和释放其资源。
3)进程阻塞
阻塞原语在一个进程期待某一事件发生,但发生条件尚不具备时,被该进程自己调用来阻塞自己。阻塞原语在阻塞一个进程时,由于该进程正处于执行状态,故应先中断处理机和保存该进程的CPU现场。然后将被阻塞进程置“阻塞”状态后插入等待队列中,再转进程调度程序选择新的就绪进程投入运行。
4)进程唤醒
唤醒一个进程有两种方法:一种是由系统进程唤醒。另一种是由事件发生进程唤醒。
当由系统进程唤醒等待进程时,系统进程统一控制事件的发生并将“事件发生”这一消息通知等待进程。从而使得该进程因等待事件已发生而进入就绪队列。
由事件发生进程唤醒时,事件发生进程和被唤醒进程之间是合作关系。因此,唤醒原语既可被系统进程调用,也可被事件发生进程调用。称调用唤醒原语的进程为唤醒进程。唤醒原语首先将被唤醒进程从相应的等待队列中摘下,将被唤醒进程置为就绪状态之后,送入就绪队列。在把被唤醒进程送入就绪队列之后,唤醒原语既可以返回原调用程序,也可以转向进程调度,以便让调度程序有机会选择一个合适的进程执行。
引起进程阻塞和进程唤醒的事件:
1)请求系统服务
2)启动某种操作
3)新数据尚未到达[如:scanf等待]
4)无新工作可做
5)进程挂起
将进程交换到外存储区挂起,释放其在内存中占用的资源。
6)进程激活
将进程从外存重新加载到内存(需要有内存的申请),进行内存重定位。