操作系统---进程

一进程的定义:可并发执行的程序在数据集合上的运行过程;

进程具有的特点:
1.动态性: 动态性是进程的最基本特征,它是程序执行过程,它是有一定的生命期。它由创建而产生、由调度而执行,因得不到资源而暂停,并由撤消而死亡。而程序是静态的,它是存放在介质上一组有序指令的集合,无运动的含义。

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

  1. 独立性:进程是一个能独立运行的基本单位,即是一个独立获得资源和独立调度的单位.
  2. 异步性: 进程按各自独立的不可预知的速度向前推进,即进程按异步方式进行,正是这一特征,将导致程序执行的不可再现性,因此OS必须采用某种措施来限制各进程推进序列以保证各程序间正常协调运行。
  3. 结构特征: 从结构上,进程实体由程序段、数据段和进程控制块三部分组成,UNIX中称为“进程映象”。

二,进程的组成:

进程通常由三部分组成,一部分是程序,一部分是数据集合,一部分是进程控制块(PCB);各自功能如下:

程序:描述进程所要完成的功能;

数据集合:是进程的可修改部分,这部分只能为一个进程所专用;

进程控制块:是进程动态特性的集中反映; 对进程管理是通过对PCB管理来实现,所以进程控制块是进程存在的唯一实体。

三,进程的调度状态:

进程有三种调度状态:

  1. 就绪状态:如果进程已具备了运行条件,但由于处理机已被其他进程占据,因此暂时不能运行,而需要等待分配处理机,则称该进程处于就绪状态;
  2. 运行状态:进程已获取到必要的资源,并占有一个处理机,处理机正在执行该进程的程序;
  3. 阻塞状态:进程在运行过程中,因等待某一事件,暂时不能运行;

 

               三个基本状态之间可能转换和转换原因如下:

就绪态–>运行态:当处理机空闲时,进程调度程序必将处理机分配给一个处于就绪态的进程 ,该进程便由就绪态转换为运行态。

运行态–>阻塞态:处于运行态的进程在运行过程中需要等待某一事件发生后(例如因I/O请求等待I/O完成后),才能继续运行,则该进程放弃处理机,从运行态转换为阻塞态。

阻塞态–>就绪态:处于阻塞态的进程,若其等待的事件已经发生,于是进程由阻塞态转换为就绪态。

运行态–>就绪态:处于运行状态的进程在其运行过程中,因分给它的处理机时间片已用完,而不得不让出(被抢占)处理机,于是进程由运行态转换为就绪态。

而阻塞态–>运行态和就绪态–>阻塞态这二种状态转换不可能发生。

处于运行态进程:如系统有一个处理机,则在任何一时刻,最多只有一个进程处于运行态。

处于就绪态进程:一般处于就绪态的进程按照一定的算法(如先来的进程排在前面,或采用优先权高的进程排在前面)排成一个就绪队列RL。

处于阻塞态进程:处于阻塞态的进程排在阻塞队列中。由于等待事件原因不同,阻塞队列也按事件分成几个队列WLi。

 

四,进程控制:内核通过执行各种原语操作来实现其控制功能.以实现进程控制;

原语: 原语是一种特殊的广义指令,它的功能是由系统通过一段不可分割的指令操作来完成,它又称原子操作,原语在核心态下完成。进程控制操作(创建、撤消、阻塞……)大都为原语操作。

内核:内核中所包含的原语主要有进程控制原语,进程通信原语,资源管理原语进程激活面的原语等(而进程控制原语又可以细分为进程创建原语,进程撤销原语,进程挂起原语,进程激活原语,进程阻塞原语以及进程唤醒原语)

进程控制原语的划分:

进程创建原语: 一个进程可借助创建原语来创建一个新进程,该新进程是它的子进程,创建一个进程主要是为新进程创建一个PCB。创建原语首先从系统的PCB表中索取一个空白的PCB表目,并获得其内部标识,然后将调用进程提供的参数:如外部名、正文段、数据段的首址、大小、所需资源、优先级等填入这张空白PCB表目中。并设置新进程状态为活动/静止就绪态,并把该PCB插入到就绪队列RQ中,就可进入系统并发执行。

进程撤销原语: 对于树型层次结构的进程系统撤消原语采用的策略是由父进程发出,撤消它的一个子进程及该子进程所有的子孙进程,被撤消进程的所有资源(主存、I/O资源、PCB表目)全部释放出来归还系统,并将它们从所有的队列中移去。如撤消的进程正在运行,则要调用进程调度程序将处理器分给其它进程。

进程挂起原语: 调用挂起原语的进程只能挂起它自己或它的子孙,而不能挂起别的族系的进程。挂起原语的执行过程是:检查要挂起进程PCB的现行状态,若正处于活动就绪态,便将它改为静止就绪态;如是活动阻塞态则改为静止阻塞态。如是运行态,则将它改为静止就绪态,并调用进程调度程序重新分配处理机。为了方便用户或父进程考察该进程的运行情况,需把该进程的PCB复制到内存指定区域。

进程激活原语: 用户进程或父进程通过调用激活原语将被挂起的进程激活。激活原语执行过程是:检查被挂起进程PCB中的现行状态,若处于静止就绪态,则将它改为活动就绪态,若处于静止阻塞态,则将它改为活动阻塞态。

进程阻塞原语: 当前进程因请求某事件而不能执行时(例如请求I/O而等待I/O完成时),该进程将调用阻塞原语阻塞自己,暂时放弃处理机。进程阻塞是进程自身的主动行为。阻塞过程首先立即仃止原来程序的执行,把PCB中的现行状态由运行态改为活动阻塞态,并将PCB插入到等待某事件的阻塞队列中,最后调用进程调度程序进行处理机的重新分配。

进程唤醒原语: 当被阻塞的进程所期待的事件发生时(例如I/O完成时),则有关进程和过程(例如I/O设备处理程序或释放资源的进程等)调用wakeup原语,将阻塞的进程唤醒,将等待该事件的进程从阻塞队列移出,插入到就绪队列中,将该进程的PCB中现行状态,如是活动阻塞态改为活动就绪态,如是静止阻塞态改为静止就绪态。

五,进程同步通信的方式:

  1. 信号量:

用于进程间传递信号的一个整数值。在信号量上只有三种操作可以进行:初始化,P操作和V操作,这三种操作都是原子操作。

     P操作(递减操作)可以用于阻塞一个进程,V操作(增加操作)可以用于解除阻塞一个进程。

 

     基本原理是两个或多个进程可以通过简单的信号进行合作,一个进程可以被迫在某一位置停止,直到它接收到一个特定的信号。该信号即为信号量s。

     为通过信号量s传送信号,进程可执行原语semSignal(s);为通过信号量s接收信号,进程可执行原语semWait(s);如果相应的信号仍然没有发送,则进程被阻塞,直到发送完为止。

     可把信号量视为一个具有整数值的变量,在它之上定义三个操作:

  •  一个信号量可以初始化为非负数
  • semWait操作使信号量s减1.若值为负数,则执行semWait的进程被阻塞。否则进程继续执行。
  • semSignal操作使信号量加1,若值大于或等于零,则被semWait操作阻塞的进程被解除阻塞。

P,V操作过程:

信号量:用来解决进程同步和互斥问题的机制。(其值仅能由P,V操作来改变)

公用信号量:通常用于实现进程之间的互斥,初值为1,它所联系的一组并发进程均可对其实施P,V操作。

私有信号量:一般用于实现进程之间的同步,初值为0或为某个正整数,仅允许拥有它的进程对其实施P操作。

P,V操作:

P(s):1.S:=S-1

         2.若S>=0,则调用P(s)得进程继续执行

         3.若S<0,则调用P(s)的进程被阻塞,并把它插入到等待信号量S的阻塞等待队列中

V(s):1. S:=S+1

         2.若S>0,则调用V(s)的进程继续执行

         3.若S<=0,从等待信号量的阻塞队列中唤醒头一个进程,然后调用V(s)的进程继续运行。

.过程:

        Procedure P(Var S: Semaphore);

        begin S:= S-1;

             if S<0 then W(s)

        end;{P}

        Procedure V(Var S:Semaphore);

        begin S:= S+1;

            if S<=0 then R(s)

        end;{V}

其中,W(s)表示将调用该过程的进程置成等待信号量S的阻塞状态,并插入相应呢阻塞队列中。R(s)表示要唤醒等待信号量S阻塞队列中的头一个进程。

  1. 管程

管程是由一个或多个过程、一个初始化序列和局部数据组成的软件模块,其主要特点如下:

局部数据变量只能被管程的过程访问,任何外部过程都不能访问。

一个进程通过调用管程的一个过程进入管程。

在任何时候,只能有一个进程在管程中执行,调用管程的任何其他进程都被阻塞,以等待管程可用。

     管程通过使用条件变量提供对同步的支持,这些条件变量包含在管程中,并且只有在管程中才能被访问。有两个函数可以操作条件变量:

cwait(c):调用进程的执行在条件c上阻塞,管程现在可被另一个进程使用。

csignal(c):恢复执行在cwait之后因为某些条件而阻塞的进程。如果有多个这样的进程,选择其中一个;如果没有这样的进程,什么以不做。

  1. 消息队列:

消息传递的实际功能以一对原语的形式提供:

send(destination,message)

receive(source,message)

     这是进程间进程消息传递所需要的最小操作集。

     一个进程以消息的形式给另一个指定的目标进程发送消息;

     进程通过执行receive原语接收消息,receive原语中指明发送消息的源进程和消息。

所有进程同步机制所要遵循的四条准则:

  空闲让进
当无进程进入临界区时,相应的临界资源处于空闲状态,因而允许一个请求进入临界区的进程立即进入自己的临界区。

  忙则等待
当已有进程进入自己的临界区时,即相应的临界资源正被访问,因而其它试图进入临界区的进程必须等待,以保证进程互斥地访问临界资源。

  有限等待
对要求访问临界资源的进程,应保证进程能在有限时间进入临界区,以免陷入“饥饿”状态。

  让权等待
当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入忙等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值