实习以后开始搞底层的东东,与之前搞的上层的东东相差甚远,突然搞这些,什么都不会,都得从头来过,不过接触这么久了,依然没什么感觉,那又能怎么样,还得坚持着来。从服务器端clone下来的代码中,经常出现任务(又叫进程)管理、任务优先级的管理,PV操作等方面的代码,而自己一直搞不清楚这之间的联系,于是决定搞清楚进程管理的相关知识,希望对自己有所帮助。
操作系统的基本特征:并发与共享,即在系统(内存)中同时存在几个相互独立的程序,这些程序在系统中既要交叉运行又要共享一些资源,这就会引起一系列的问题,包括对系统资源的竞争、运行程序之间的通信、程序之间的合作与协同等等。基于这些问题,我们引入了“进程”的概念。
程序的特性:
1. 顺序性,程序都是顺序执行的,每个操作必须在下一个操作执行之前结束。
2. 封闭性,程序一旦开始,其结果不受外界影响。
3. 可再现性,程序执行的结果与初始条件有关,与执行时间无关,即只要程序执行的初始条件相同,则其结果相同,不论其执行时间,也不论计算机的运行速度。
程序的并发进行
定义:若干个程序段同时在系统中执行,这些程序的执行在时间上时重迭的,即一段程序的执行尚未结束,另一段程序便开始执行,即使这种重迭非常的小,也称这些程序段是并发执行的。
进程的定义:进程是执行中的程序
进程与程序
程序是一系列指令的集合,可以作为资料长期存储在计算机中,是静态的概念,而进程是程序在处理机上一次执行的过程,是动态的概念,进程是有生命周期的。进程是一个独立的单位,能够与其他的进程并发进行。进程是竞争计算机系统有限资源的基本单位,也是进程处理机调度的基本单位。一个程序运行于多个进程中,一个进程也可以运行多个程序。
进程的特征:
结构特征:进程实体=程序段+相关数据段+PCB
动态性:进程的实质是进程实体的一次执行过程,因此动态性是进程最基本的特征。
并发性:多个进程实体同时存在于内存中,且能在一时间内同时运行,是最重要的特征。
独立性:进程实体是一个能独立运行、独立分配资源、独立接受调度的基本单位。
异步性:进程按各自独立的、不可预知的速度向前推进。
进程的类型:系统进程和用户进程
系统进程:进行资源管理和控制或者执行操作系统核心代码的进程。
用户进程:执行用户程序的进程。
系统进程与用户进程的区别:
系统进程被分配一个初始的资源集合,被它独享或者以最高优先权的资格使用,用户进程只能通过系统服务请求的手段竞争使用系统资源,用户进程不能直接做I/O操作,而系统进程可以做显示的、直接的I/O操作。系统进程在管态(系统态或核心态)下活动,核心态是操作系统内核所运行的模式,运行在该模式的代码,可以无限制地对系统存储、外部设备进行访问。而用户进程在目态(用户态)下活动。系统进程处于管态时可以执行系统特权指令,用户进程处于用户态下不能执行系统特权指令,特权指令它主要用于系统资源的分配和管理,包括改变系统工作方式,检测用户的访问权限,修改虚拟存储器管理的段表、页表,完成任务的创建和切换等。常用的特权指令有如有关对I/O设备的使用指令、有关访问程序状态的指令、存取特殊寄存器指令等。
进程的组成:进程控制块、进程的执行程序、数据集合
进程控制块PCB:系统为了管理进程设置了一个专门的数据结构,用它来记录进程的外部特征和描述进程的运动变化过程,系统利用PCB来管理和控制进程,因此PCB是系统感知进程存在的唯一标志。PCB经常被系统访问,如,调度程序、资源分配程序、中断处理程序等,所以PCB应常驻内存。
进程控制块结构如下图所示:在创建进程时,建立PCB,并伴随进程进行的全过程,直到进程的撤销而撤销。
进程标识符name:每个进程必须有一个唯一的标识符,可以是字符串,也可以是一个数字。
进程当前的状态status:说明进程当前所处的状态,如就绪状态、执行状态或者阻塞状态等。
进程队列:为了管理的方便,系统设计时会将相同的状态的进程组成一个队列,如就绪进程队列,等待进程则要根据等待的事件组成多个等待队列,如等待打印机队列、等待磁盘I/O完成队列等等。
进程的状态
就绪状态:存在于处理机调度队列中,它们已经就绪状态,一旦得到CPU,则立即执行,这些进程处于就绪状态。(有多个进程处于次状态)
执行状态:当进程由调度程序调度后,得到CPU的控制权,它的程序正在运行,该进程所处的状态为执行状态。
阻塞状态:当进程等待某一事件发生时,而暂停执行,这时即使给他们CPU时间,他们也无法执行,该进程处于阻塞状态。
如下是进程状态变迁图:
挂起:当进程由内存进入外存时,或者可以理解为暂时被淘汰出内存的进程。并有以下几种状态
活动就绪状态:进程在内存中且可以立即进入运行状态。
活动阻塞状态:进程在内存中等待某一事件的发生。
静止阻塞状态:进程在外存中等待某一事件的发生。
静止就绪状态:进程在外存中,但只要进入内存,即可立即执行。
激活:当进程由外存进入内存时,有以下几种状态
静止就绪----活动就绪:没有就绪进程或静止就绪进程优先级高于活动就绪进程时,发生转换


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