第二章 进程管理


为了描述个和控制进程的运行,系统为每个进程定义了一数据结构——进程控制块PCB(Process Control Block)。PCB中主要包括下述四方面的信息:

进程标识符:内部标识符,外部标识符

处理机状态

进程调度信息

进程控制信息

PCB的作用:

① PCB是系统只为每个进程定义的一个数据结构,是为了使程序(含数据)能独立运行,为之配置的一进程控制块(Process Control Block);

② PCB、程序段和相关的数据段三部分构成了进程实体,创建进程,实质上是创建进程和实体中的PCB,而撤销进程,实质上是撤销进程的PCB;PCB是为了保证程序的并发执行;

③ PCB使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其它进程并发执行的进程。

一言以蔽之,使一个在多道程序环境下不能独立运行的程序(含数据)成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。

新进程的创建过程

1)申请空白PCB,为新进程申请获得唯一的数字标识符,并从PCB集合中索取一个空白PCB

2)为新进程分配其运行所需的资源

3)初始化PCB

4)如果进程就绪队列能够接纳新进程,便将新进程插入就绪队列。

临界区:每个进程中访问的临界资源的那段代码成为临界区。

信号量进程的同步和互斥问题

界资源与临界区的概念:临界资源就是一次只允许一个进程访问的资源,一个进程在使用临界资源的时候,另一个进程是无法访问的,操作系统也不能够中途剥夺正在使用者的使用权利,正所谓“泼出去的女儿嫁出去的水”。即临界资源是不可剥夺性资源。所谓临界区就是进程中范文临界资源的那段程序代码,注意,是程序代码,不是内存资源了,这就是临界资源与临界区的区别。临界区的使用原则(也即同步机制应遵循的准则)十六字诀:“空闲让进,忙则等待,有限等待,让权等待”。

(1)空闲让进:临界资源空闲时一定要让进程进入,不发生“互斥礼让”行为。

(2)忙则等待:临界资源正在使用时外面的进程等待。

(3)有限等待:进程等待进入临界区的时间是有限的,不会发生“饿死”的情况。

(4)让权等待:进程等待进入临界区是应该放弃CPU的使用。

  进程间通常存在着两种制约关系:直接制约关系和间接制约关系,就是所说的进程的同步与互斥。顾名思义,一个是合作关系,一个是互斥关系。进程互斥说白了就是“你用的时候别人都不能用,别人用的时候,你也不能去用”,是一种源于资源共享的间接制约关系。进程同步指的是“我们大家利用一些共同的资源区,大家一起合作,完成某些事情,但是我在干某些小事的时候,可能要等到你做完另一些小事”,是一种源于相互合作的直接制约关系。两者区别在于互斥的进程间没有必然的联系,属于竞争者关系,谁竞争到资源(的使用权),谁就使用它,直到使用完才归还。就比如洗衣房的洗衣机这个资源,去洗衣的同学并不需要有必然联系,可以互不认识,但是谁竞争到洗衣机的使用权,就可以使用,直到洗完走人。而同步的进程间是有必然联系的,即使竞争到使用权,如果合作者没有发出必要的信息,该进程依然不能执行。

 信号量是Dijkstra提出的用于解决进程同步的有效工具。信号量是一个数据结构以及对其的操作。除初始化外,仅能通过两个标准的原子操作wait(S)he signal(S)来访问。两个语句在执行到一半的时候不能被中断。

什么是P操作、什么是V操作(P、V操作的处理流程,以记录型信号量为例)

P(S):wait(S)

每次wait操作,意味着进程请求一个单位的该类资源,使系统可供分配的该类资源数减少一个。

① 将信号量S的值减1,即S.value:=S.value-1;

② 当S.value<0时,表示该类资源分配完毕,进程调用block原语,进行自我阻塞,放弃处理机,并插入到信号量链表中。

V(S):signal(S)

每次signal操作,表示执行进程释放一个单位资源,使系统中可供分配的该类资源数增加一个

① 将信号量S的值加1,即S.value:=S.value+1;

② 如果S.value<=0,表示在该信号量链表中,仍有等待该资源的进程被阻塞,故还应调用wakeup原语,将链表中的第一个等待进程唤醒。

wait(S){   while(S<=0);  S--;}

signal(S){   S++; }

用信号量和P、V操作机制实现互斥和同步的方法,信号量取值的含义

利用信号量和PV操作实现进程互斥时应该注意的是:

(1)每个程序中用户实现互斥的P,V操作必须成对出现,先做P操作,进临界区,后做V操作,出临界区。若有多个分支,要认真检查其成对性。

(2)P,V操作应分别紧靠临界区的头尾部,临界区的代码应尽可能短,不能有死循环。

(3)互斥信号量得初值一般为1

其中信号量S用于互斥,初值为1。

利用信号量和P V操作实现进程同步

PV操作是典型的同步机制之一。用一个信号量与一个消息联系起来,当信号量的值为0时,表示期望的消息尚未产生;当信号量的值非0时,表示期望的消息已经存在。用PV操作实现进程同步时,调用P操作测试消息是否到达,调用V操作发送消息。

使用PV操作实现进程同步时应该注意的是:

(1)分析进程间的制约关系,确定信号量种类。在保持进程间有正确的同步关系情况下,哪个进程先执行,那些进程后执行,彼此间通过什么资源(信号量)进行协调,从而明确要设置那些信号量。

(2)信号量的初值与相应资源的数量有关,也与P,V操作在程序代码中出现的位置有关。

(3)同一信号量的P,V操作要成对出现,但他们分别在不同的进程代码中。

  (4)互斥信号量一般要在资源信号量之后。

  PV操作特点:简单而且表达能力强能解决任何进程同步问题,缺点:不安全,容易出现死锁现象。

进程是资源拥有者,而线程是为了提高程序并发执行的调度(调度和分派的基本单位)。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一上午熟悉又陌生的C语言学习! 程序设计的实质:数据表示(存储)和数据处理 int a; 定义变量,执行时会分配...
    TG帅阅读 121评论 0 0
  • 森林学校 三、扩音器 第二天,小学生们都按时来学校上课了。大葫芦把一叠叠的新书搬到教室里,发现有些学生站着,有些学...
    苏本子阅读 127评论 0 2