【基础】操作系统-处理器管理-进程-01

操作系统-处理器管理-进程

 


1、处理器管理背景:

以下两种OS中,程序的并行运行对系统资源的竞争 
1) 单用户多任务的OS 
2) 多用户多任务的OS


2、进程状态:

 

(1)、进程的定义: 

 

一个具有一定独立功能的程序,关于某个数据集合的一次运行活动。它是操作系统动态执行基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的调度、执行、管理单元(最小单位)。 

 

注意,线程是指处理机分配、调度、执行的最小单元,二者在定义上有一定的区别。

解释:进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。


进程的概念主要有两点:
第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。
     ->文本区域:存储处理器执行的代码 
     ->数据区域:存储变量和进程执行期间使用的动态分配的内存 
     ->堆栈区域:存储着活动过程调用的指令和本地变量
第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。

 

(2)、进程的组成: 

 

静态观点:程序 + 数据 + 进程控制块(PCB) = 进程

动态观点:计算机状态的一个有序集合

 

注意:进程存在的唯一标志->PCB, 
内容包括:调度信息和执行信息 
      调度信息->供进程调度使用包括进程当前的一些基本属性 
      执行信息->现场,刻画进程的执行情况 
生命周期:进程的产生到完成。

 

(3)、进程的特征: 

 

   ->动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。 
   ->并发性:任何进程都可以同其他进程一起并发执行 
   ->独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位; 
   ->异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进 
   ->结构特征:进程由程序、数据和进程控制块三部分组成。

多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果;但是执行过程中,程序不能发生改变。

 

(4)、进程的状态模型:

 

1)、三态模型(假设所有进程都在内存中)
进程一般有三种基本状态:运行、就绪和阻塞。
->运行:当一个进程在处理机上运行时,称该进程处于运行状态。
->就绪:一个进程获得了除处理机外的一切资源,一旦得到处理机即可运行,则称该进程处于就绪状态。
->阻塞:也称等待或睡眠状态,一个进程正在等待某一事件发生而暂时停止运行,这时即使把处理机分配给该进程,它也无法运行,故称该进程处于阻塞状态。

2)、五态模型
引入新建态和终止态。
->新建态:对应于进程刚刚被创建且没有被提交的状态,并等待系统完成创建进程的所有必要信息。因为创建进程分为两个阶段,第一个阶段为一个新进程创建必要的管理信息,第二个阶段让该进程进入就绪状态。由于有了新建态,操作系统可以根据系统的性能和内存容量的限制推迟新建态进程的提交。
->进程的终止:也可分为两个阶段,第一个阶段等待操作系统进行善后处理,第二个阶段释放内存。

3)、具有挂起功能系统的进程状态及其转换(某些挂起、阻塞或定期启动的进程在磁盘镜像中)
->活跃就绪:进程在主存并且可被调度的状态
->静止就绪:进程被对换到辅存时的就绪状态,是不能被直接调度的状态;只有当主存中没有活跃就绪态进程,或者挂起就绪态进程具有更高的优先级,系统将把挂起就绪态进程调回主存并转换为活跃就绪
->活跃阻塞:进程进入主存,一旦等待的事件产生便进入活跃就绪状态
->静止阻塞:进程被对换到辅存时的阻塞状态,一旦等待的事件产生便进入静止就绪状态

 

 

3、进程的控制:

      进程控制是指对系统中所有进程从创建到消亡的全过程实施有效的控制。其主要功能包括创建一个新进程,撤销一个已经运行完的进程,改变进程的状态,实现进程间的通信。进程控制是由操作系统内核中的原语实现的。

     ◆原语:是指由若干条机器指令组成的、用于完成特定功能的程序段。特点是在执行时不能被分割,即原子操作要么都做,要么都不做。
     ->内核中包含的原语主要有:进程控制原语、进程通信原语、资源管理原语以及其他原语。
     ->属于进程控制原语有:进程创建原语、进程撤销原语、进程挂起原语、进程激活原语、进程阻塞原语以及进程唤醒原语等。 

 

(1)、同步与互斥 

 

1)、进程间的同步:指进程间完成一项任务时直接发生互相作用的关系。 
2)、进程间的互斥:在多道程序系统中,各进程可以共享各类资源,但有一些资源一次只能供一个进程使用,称为临界资源。进程间的互斥是指系统中各进程互斥使用临界资源(一次只允许一个进程访问资源)。 
3)、临界区管理原则:有空即进,当无进程处于临界区时,允许进程进入临界区,并且只能在临界区运行有限的时间。无空则等,当有一个进程在临界区时,其他需要进入临界区的进程必须等待,以保证进程互斥的访问临界资源。有限等待,对要求访问临界资源的进程,应保证进程等待有限时间后进入临界区,以免陷入”饥饿“状态。让权等待,当进程不能进入自己的临界区时,应立即释放处理机,以免陷入”忙等“状态。 

 

(2)、信号量与PV操作 

 

信号量是最早出现的用来解决进程同步与互斥问题的机制(也可实现进程通信),包括一个称为信号量的变量对它进行的两个原语操作。信号量为一个整数,我们设这个信号量为:sem。很显然,我们规定在sem大于等于零的时候代表可供并发进程使用的资源实体数,sem小于零的时候,表示正在等待使用临界区的进程的个数。根据这个原则,在给信号量附初值的时候,我们显然就要设初值大于零。 

 

P,V原语中P是荷兰语的Passeren,相当于英文的pass, V是荷兰语的Verhoog,相当于英文中的incremnet。 P操作和V操作是不可中断的程序段,称为原语。

 

◆注意:在P,V愿语执行期间不允许有中断的发生。对于具体的实现,方法非常多,可以用硬件实现,也可以用软件实现。这种信号量机制必须有公共内存,不能用于分布式操作系统,这是它最大的弱点。

 

首先应弄清PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下: 
P(S):
①将信号量S的值减1,即S=S-1;
②如果0<=S,则该进程继续执行;0>S则该进程置为等待状态,排入等待队列。
V(S):
①将信号量S的值加1,即S=S+1;
②如果0<S,则该进程继续执行;0>=S则唤醒队列中第一个等待信号量的进程。 

PV操作的意义:我们用信号量及PV操作来实现进程的同步和互斥。PV操作属于进程的低级通信。P操作和V操作是低级通信原语,在执行期间不可分割。其中,P操作表示申请一个资源,V操作表示释放一个资源

P操作可表示如下,其中Semaphore表示所定义的变量是信号量:

1: Produre P(Var S:Semaphore);
2: Begin
3: S:=S-1;
4: If S < 0 then W(S) // 没有资源了,执行P操作的进程插入等待队列
5: End;



       V操作可表示如下:

1: Procedure C(Var S:Semaphore);
2: Begin
3: S:=S+1;
4: If S <= 0 then R(S) // 有空闲资源了,从阻塞队列唤醒一个进程
5: End;

 

1)、利用PV操作实现进程的互斥

 

令信号量mutex的初值为1,进入临界区时执行P操作,推出临界区时执行V操作,这样,进入临界区的代码段如下:

 

1: P(mutex)//申请资源
2: 临界区
3: V(mutex)//释放资源

一个例子:两个并发执行的程序段完成交通流量的统计,其中P1识别通过的车辆数,P2定时将计数值清0.用PV操作实现的交通流量统计程序如下:

1: P1
2: if 有车通过 then
3: begin
4: P(mutex) //锁定COUNT管理权
5: COUNT := COUNT + 1; // 临界区
6: V(mutex); //释放COUNT管理权
7: end
8: GOTO L1;

1: P2
2: begin
3: P(mutex) //锁定COUNT管理权
4: PRINT COUNT; //临界区
5: COUNT := 0;
6: V(mutex); //释放COUNT管理权
7: end
8: GOTO L2;

通常情况下,在互斥控制中,设置S信号量的初始值为1,即允许一个进程进入。 

 

2)、利用PV操作实现进程的同步

 

进程的同步是由于进程间的合作而引起的相互制约问题。实现进程同步的一种方法是将一个信号量与消息相联系,当信号量的值为0时表示希望的消息未产生,否则表示希望的消息已经到来。 

 

通常情况下,在同步控制中,设置S信号量的初始值为0,即有一个进程先进入就绪态就停止(S=S-1),等待另一个进程运行后(S=S+1),再运行。 

 

3)、生产者-消费者问题 

 

问题关键点: 
     解决生产者进程与消费者进程的同步关系 
     处理缓冲区的互斥关系 

最少需要三个信号量实现 
     empty——表示缓冲区是否为空,初值为n。 
     full——表示缓冲区中是否为满,初值为0。 
     mutex1——保证同时只有一个进程在写缓冲,初值为1。 

 

 

例:生产者进程P1不断的生产产品送入缓冲去,消费者进程P2不断的从缓冲区中取出产品消费。为了实现进程P1与P2之间的同步问题,需要设置一个信号量S1,表示缓存区是否空闲,初值为1,表示可以将产品送入缓冲区;设置另一个信号量S2,表示缓冲区有无产品,初值为0,P1和P2的同步过程如下: 

 

进程P1 L1: 生产一个产品 P(S1) 产品送缓冲区 V(S2) GOTO:L1 

进程P2 L2: 生产一个产品 P(S2) 从缓冲区取一个产品 V(S1) 消费 GOTO:L2。

 

 

(3)、死锁:

 

1)、死锁:多个进程因为竞争资源,或执行时推进的顺序不当,或相互通信而永久阻塞现象。 

 

2)、引起死锁的原因:

产生死锁的四个必要条件(互斥、占有且等待、非剥夺、循环等待)。 

 

3)、解决死锁的方法:

预防死锁、避免死锁、检测并解除死锁。

 

◆预防死锁:
1)、禁止“互斥”条件
2)、禁止“占有且等待”条件:一次性分配策略
3)、禁止“不剥夺”条件:剥夺资源法
4)、禁止“循环等待”条件:资源有序分配策略

 

◆避免死锁
1)、银行家算法

 

◆检测并解除死锁

 

 

 

总结:有时候仅看概念和原理经常不知所云,其实其中的道理很简单,你一定懂的...

实际应用中可能会复杂很多,尤其是同步和互斥操作都有,进程很多,并且有顺序或触发要求,而且牵扯很多临界资源时,表面上的很多显示的关系容易理清,但往往只是浮云,隐式的关系需要仔细考虑才能发现,这时候最好多推导几遍运行情况,多考虑临界的各种可能性,逐步简化问题约束,最后总结出规律!

猜你喜欢

转载自stefyn.iteye.com/blog/1157460