进程管理

实习以后开始搞底层的东东,与之前搞的上层的东东相差甚远,突然搞这些,什么都不会,都得从头来过,不过接触这么久了,依然没什么感觉,那又能怎么样,还得坚持着来。从服务器端clone下来的代码中,经常出现任务(又叫进程)管理、任务优先级的管理,PV操作等方面的代码,而自己一直搞不清楚这之间的联系,于是决定搞清楚进程管理的相关知识,希望对自己有所帮助。


操作系统的基本特征:并发与共享,即在系统(内存)中同时存在几个相互独立的程序,这些程序在系统中既要交叉运行又要共享一些资源,这就会引起一系列的问题,包括对系统资源的竞争、运行程序之间的通信、程序之间的合作与协同等等。基于这些问题,我们引入了“进程”的概念。


程序的特性:

1. 顺序性,程序都是顺序执行的,每个操作必须在下一个操作执行之前结束。

2. 封闭性,程序一旦开始,其结果不受外界影响。

3. 可再现性,程序执行的结果与初始条件有关,与执行时间无关,即只要程序执行的初始条件相同,则其结果相同,不论其执行时间,也不论计算机的运行速度。


程序的并发进行

定义:若干个程序段同时在系统中执行,这些程序的执行在时间上时重迭的,即一段程序的执行尚未结束,另一段程序便开始执行,即使这种重迭非常的小,也称这些程序段是并发执行的。


进程的定义:进程是执行中的程序


进程与程序

程序是一系列指令的集合,可以作为资料长期存储在计算机中,是静态的概念,而进程是程序在处理机上一次执行的过程,是动态的概念,进程是有生命周期的。进程是一个独立的单位,能够与其他的进程并发进行。进程是竞争计算机系统有限资源的基本单位,也是进程处理机调度的基本单位。一个程序运行于多个进程中,一个进程也可以运行多个程序。


进程的特征:

结构特征:进程实体=程序段+相关数据段+PCB

动态性:进程的实质是进程实体的一次执行过程,因此动态性是进程最基本的特征。

并发性:多个进程实体同时存在于内存中,且能在一时间内同时运行,是最重要的特征。

独立性:进程实体是一个能独立运行、独立分配资源、独立接受调度的基本单位。

异步性:进程按各自独立的、不可预知的速度向前推进。


进程的类型:系统进程和用户进程

系统进程:进行资源管理和控制或者执行操作系统核心代码的进程。

用户进程:执行用户程序的进程。

系统进程与用户进程的区别:

系统进程被分配一个初始的资源集合,被它独享或者以最高优先权的资格使用,用户进程只能通过系统服务请求的手段竞争使用系统资源,用户进程不能直接做I/O操作,而系统进程可以做显示的、直接的I/O操作。系统进程在管态(系统态或核心态)下活动,核心态是操作系统内核所运行的模式,运行在该模式的代码,可以无限制地对系统存储、外部设备进行访问。而用户进程在目态(用户态)下活动。系统进程处于管态时可以执行系统特权指令,用户进程处于用户态下不能执行系统特权指令,特权指令它主要用于系统资源的分配和管理,包括改变系统工作方式,检测用户的访问权限,修改虚拟存储器管理的段表、页表,完成任务的创建和切换等。常用的特权指令有如有关对I/O设备的使用指令、有关访问程序状态的指令、存取特殊寄存器指令等。


进程的组成:进程控制块、进程的执行程序、数据集合

进程控制块PCB:系统为了管理进程设置了一个专门的数据结构,用它来记录进程的外部特征和描述进程的运动变化过程,系统利用PCB来管理和控制进程,因此PCB是系统感知进程存在的唯一标志。PCB经常被系统访问,如,调度程序、资源分配程序、中断处理程序等,所以PCB应常驻内存。

进程控制块结构如下图所示:在创建进程时,建立PCB,并伴随进程进行的全过程,直到进程的撤销而撤销。


进程标识符name:每个进程必须有一个唯一的标识符,可以是字符串,也可以是一个数字。

进程当前的状态status:说明进程当前所处的状态,如就绪状态、执行状态或者阻塞状态等。

进程队列:为了管理的方便,系统设计时会将相同的状态的进程组成一个队列,如就绪进程队列,等待进程则要根据等待的事件组成多个等待队列,如等待打印机队列、等待磁盘I/O完成队列等等。

当前队列指针 next:登记与本进程处于同一队列的下一个进程的PCB的地址

执行程序开始地址 start-addr

进程优先级 priority:进程的优先级反映进程的紧迫程度,通常由用户指定和系统设置。UNIX系统采用用户设置和系统计算相结合的方式确定进程的优先级。

CPU现场保护区 cpustatus:当进程因某种原因不能继续占用CPU时(等待打印机),释放CPU,这时就要将CPU的各种状态信息保护起来,为将来再次得到处理机恢复CPU的各种状态,继续运行。例如,我们下课,这时我要记住这次讲到什么地方,下次课接着讲。

通信信息 communication information:是指某个进程在运行的过程中要与其它进程进行通信,该区记录有关进程通信方面的信息。

家族联系 process family:有的系统允许一个进程可创建自已的子进程,子进程还可以创建,一个进程往往处在一个家族之中,就需要记录进程在家族中位置的信息。

占有资源清单 own-resource:进程占用系统资源的情况,不同的系统的处理差别很大,UNIX系统中就没有此项。

进程的状态

就绪状态:存在于处理机调度队列中,它们已经就绪状态,一旦得到CPU,则立即执行,这些进程处于就绪状态。(有多个进程处于次状态)

执行状态:当进程由调度程序调度后,得到CPU的控制权,它的程序正在运行,该进程所处的状态为执行状态。

阻塞状态:当进程等待某一事件发生时,而暂停执行,这时即使给他们CPU时间,他们也无法执行,该进程处于阻塞状态。

如下是进程状态变迁图:



挂起:当进程由内存进入外存时,或者可以理解为暂时被淘汰出内存的进程。并有以下几种状态

活动就绪状态:进程在内存中且可以立即进入运行状态。

活动阻塞状态:进程在内存中等待某一事件的发生。

静止阻塞状态:进程在外存中等待某一事件的发生。

静止就绪状态:进程在外存中,但只要进入内存,即可立即执行。

激活:当进程由外存进入内存时,有以下几种状态

静止就绪----活动就绪:没有就绪进程或静止就绪进程优先级高于活动就绪进程时,发生转换

静止阻塞----活动阻塞:当一个进程释放足够内存时,系统会把一个高优先级静止阻塞(系统认为会很快出现所等待的事件)进程变为活动阻塞


进程的控制:
进程的创建:由系统程序模块统一创建
UNIX系统:

进程的撤销:进程完成其任务,希望终止时,调用撤消进程的系统调用(进程撤消原语)撤消进程,以便释放资源和PCB结构本身。
进程的撤消有三种情况:1.该进程已完成所要求的功能而正常终止 2.由于某种错误导致非正常终止 3.祖先进程要求撤消某个子进程
UNIX系统中是exit():自我终止当前进程。
释放所占用的所有资源:释放内外存空间、关闭所有打开文件、释放当前目录、释放共享内存段和各种锁定lock。
进程撤销原语流程图:

进程阻塞:
引起进程阻塞的事件:请求系统服务、启动某种操作、新数据尚未到达、无新工作可做
进程由运行状态转换为阻塞状态是由进程原语来控制的,因此调用进程阻塞操作是进程出在运行状态时进行的,它的执行引起等待某事件队列的改变。

进程阻塞原语:入口--保存当前进程的CPU现场--置该进程的状态--被阻塞的进程进入队列--转进程调度(很重要,否则处理机将出现空转,浪费资源)
进程唤醒:
当一个进程由于等待某个事件的发生,而由运行状态转入阻塞状态,当事件发生过后,这个进程将由阻塞状态转换为就绪状态,这种转换由进程唤醒来完成。
一个处于阻塞状态的进程不可能唤醒自己
唤醒一个进程有两种方式:1是由系统进程唤醒 2是由事件发生进程唤醒
当由系统进程唤醒等待进程时,系统进程统一控制事件的发生并将“事件发生”这消息通知等待进程。从而使得该进程因等待事件已发生而进入就绪队列
等待进程也可由事件发生进程唤醒。
由事件发生进程唤醒时,事件发生进程和被唤醒进程之间是合作关系。因此.唤醒原语既可被系统进程调用,也可被事件发生进程调用。我们称调用唤醒原语的进程为唤醒进程

进程唤醒原语:入口---从等待队列中摘下被唤醒的进程--将被唤醒进程置于就绪状态--将被唤醒进程置于就绪队列--转进程调度或返回

进程的调度
进程的调度方式:非剥夺(抢先)方式、可剥夺(抢先)方式
常用进程调度的方法:先来先服务(FCFS)、短进程优先(SPF)、静态优先权法、动态优先权法、轮转法、多级反馈队列法

进程的同步:指系统中多个进程发生的事件间存在着某种时序的关系,需要相互合作,共同完成一项任务。具体的说一个进程运行到某一点需要另一伙伴进程为他提供消息,在未获得消息之前该进程处于等待状态,获得消息后被唤醒进入就绪队列。
进程的互斥: 由于各进程要共享资源,而有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系成为进程的互斥。

临界资源:系统中某些资源一次只能被一个进程使用,称这样的资源为临界资源或互斥资源。
临界区:系统中访问临界资源的代码段成为临界区或称为互斥段。
相关临界区:临界区分布在不同的进程中,但这些临界区对同一共享变量进行操作,这些临界区称为相关临界区。

信号量和PV操作:
信号量:一整型变量,它只能由两个标准的原语所访问,分别记作P操作原语和V操作原语。 P,V操作是由操作系统实现,可供外部调用的两条原语。OS利用信号量对进程和资源进行管理和控制
信号量的分类
公用信号量:实现进程间的互斥,初值为1
私用信号量:实现进程间的同步,初值为0或n,仅拥有私用信号量的进程可对其进行P操作

如何用PV原语实现进程间的互斥与同步
PV原语的含义 
P操作和V操作是不可中断的程序段,称为原语。PV原语及信号量的概念都是由荷兰科学家E.W.Dijkstra提出的。信号量sem是一整数,sem大于等于零时代表可供并发进程使用的资源实体数,但sem小于零时则表示正在等待使用临界区的进程数。 
P原语操作的动作是: 
(1) sem减1; 
(2) 若sem减1后仍大于或等于零,则进程继续执行; 
(3) 若sem减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度。 
V原语操作的动作是: 
(1) sem加1; 
(2) 若相加结果大于零,则进程继续执行; 
(3) 若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。 
PV操作对于每一个进程来说,都只能进行一次,而且必须成对使用。在PV原语执行期间不允许有中断的发生。 


用PV原语实现进程的互斥 
由于用于互斥的信号量sem与所有的并发进程有关,所以称之为公有信号量。公有信号量的值反映了公有资源的数量。只要把临界区置于P(sem) 和V(sem)之间,即可实现进程间的互斥。就象火车中的每节车厢只有一个卫生间,该车厢的所有旅客共享这个公有资源:卫生间,所以旅客间必须互斥进入卫生间,只要把卫生间放在P(sem) 和V(sem)之间,就可以到达互斥的效果。以下例子说明进程的互斥实现。

写到这里,关于进程管理的相关知识,还差“死锁”,后续会继续将这部分的笔记也呈上。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值