第二章进程管理

2018-10-28  本文已影响0人  可以对瓶吹的男人

2.1进程的基本概念

1.程序顺序执行时的特征:

(1)顺序性

    处理机的操作严格按程序规定顺序执行。

   (2)   封闭性

    程序一旦开始执行,其计算结果不受外界因素影响。

   (3) 可再现性

    程序执行只要初始条件一样,不论如何停顿,重复执行多少次结果都一样。


2.并发程序执行时的特征:

    间断性(运行表现)

        多道->程序并发执行->要共享系统的资源 ->形成相互制约的关系->  相互制约导致并发程序具有“执行——暂停——执行”这种间断性的活动规律。

不可再现结果的并发无意义

3.进程

定义:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。

特征:①结构性特征,进程的根本——PCB

            ②动态性

                    进程实质上是进程实体的一次有生命期的执行过程。程序只是静态的一组有序指令。

                    进程最基本特征

            ③并发性

                    多个进程实体同存于内存中,在一段时间内同时运行。

                    有PCB的程序才能并发。

            ④独立性

            ⑤异步性

基本状态:

(1)就绪状态(Ready)

      进程获得除CPU之外的所有必需资源,一旦得到CPU控制权,可立即运行。

(2)运行状态(Running)

      进程已获得所有运行必需的资源,正在处理机上执行。

(3)阻塞状态(Blocked)

      正在执行的进程由于发生某事件(请求I/O、申请缓冲、时间片到)而暂时无法执行时,便放弃CPU后暂停。

进程的三基态的转换

各种状态下的进程队列

单处理机系统,执行态的进程只有一个;

就绪态、阻塞态的进程可有多个。一般讲它们分别排称一个队列,称就绪队列、阻塞队列。

阻塞队列有的会根据不同原因再排成多个队列。

引入挂起状态的状态转换图

4.进程控制块PCB

进程实体:代码段+数据段+PCB

定义:存放进程的管理和控制信息的数据结构称为进程控制块。

OS对进程进行控制和管理围绕PCB进行

分析OS调度某进程的过程

1)、查该进程的PCB,获取其状态、优先级;

2)、根据PCB保存的处理机状态信息,恢复现场;

3)、根据PCB中程序和数据的内存始址,找到其程序和数据;

4)、执行中的同步信号等也要查阅PCB,暂停时进程执行的处理机环境保存回PCB。

重要性

1)、进程控制块是进程存在的唯一标志:进程创建时,PCB建立并伴随进程运行的全过程,直到进程撤消而撤消。PCB就象我们的户口。

2)、进程管理和控制的最重要的数据结构。


2.2进程控制

基本过程:进程的创建、进程的终止、进程的阻塞与唤醒、进程的挂起和激活;

1.进程的创建

1)一个进程创建另一进程的事件(原因)

(1)用户登录:分时情况下用户的请求

(2)作业调度:批处理中

(3)提供服务:运行中的用户程序提出功能请求,要创建服务进程(如打印服务)

(4)应用请求:应用程序自己创建进程,完成特定功能的新进程。(木马程序)

2)创建过程#*#

(1)申请空白PCB

(2)为新进程分配资源

      主要是内存资源的处理

(3)初始化进程控制块

      标识符(包括父进程的)、程序计数器指向程序入口地址,就绪态、优先级等信息的填写。

(4)将新进程插入就绪队列

注:上述过程很关键,不能被打断!!!


2.进程的终止

1)引起进程终止的事件

2)终止过程

对上述事件,OS调用内核终止原语,执行下列过程:

(1)根据进程标示符,检索出该进程PCB,读其状态。

      *IF 执行态,立即终止该进程,置调度标志为真,指示重新进行调度。

      *IF 有子孙进程,亦应予以终止,以防成为不可控进程。

(2)归还全部资源至其父进程或系统。

(3)将该进程PCB从所在队列或链表中移出。


3.进程的阻塞与唤醒

1)引起进程阻塞和唤醒的事件

(1)请求系统服务的满足情况;

(2)启动某种需等待(I/O)操作;

(3)合作需要的新数据尚未到达;

(4)执行某功能的进程暂时无新工作可做(如发送数据进程)。

2)阻塞和唤醒过程

由进程调用阻塞原语阻塞自己,是主动行为:

(1)将PCB中的状态改为阻塞

(2)该PCB加入到阻塞队列中

(3)转进程调度,将处理机分配给另一进程

(4)进行进程切换,即根据两切换进程的PCB,保护与重新设置处理机状态。

    阻塞与唤醒原语作用相反,成对使用

      阻塞进程等待的事件发生时,有关进程(如放弃该资源的进程)调用唤醒原语把等待该事件的进程唤醒。

(1)把阻塞进程从等待该事件的阻塞队列中移出;

(2)将其PCB中的现行状态改为就绪;

(3)将PCB插入到就绪队列中。


4.进程的挂起与激活

  挂起原语将指定进程或阻塞进程挂起。

(1)检查被挂起进程的状态,活动就绪则改为静止就绪,活动阻塞则改为静止阻塞。

(2)将该PCB复制到内存(方便检查)/外存(对换)指定区域。

(3)*若挂起的进程是执行态,则需重新进行进程调度。

注意:进程只能挂起自己或其子孙进程。

激活原语的执行过程

(1)若挂起进程在外存上,将其调入内存;

(2)检查进程状态,若处于静止就绪,则改为活动就绪,若处于静止阻塞,则改为活动阻塞。

*关于调度

(1)进程控制中,状态转换和调度密切相关。

(2)运行态进程的改变必然产生调度行为

(3)只要产生新就绪态进程,就需考虑调度策略

(4)只要是采用抢占式调度,要检查新就绪进程是否可抢占CPU,引起新的调度。


2.3进程同步

两种制约关系:

(1).间接相互制约关系:主要源于资源共享,表现为

    进程A---打印机资源---进程B(互斥)

(2).直接相互制约关系:主要源于进程合作,表现为

    进程A写缓冲---进程B读缓冲(有序)

1.进程同步的基本概念

1)进程同步的主要任务:

   使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。

调度。

2)临界资源

理解同步

同步

3)临界区

每个进程中访问临界资源的那段代码叫临界区。为了正确同步,对临界区的代码要增加控制

(1)进入区:对欲访问的临界资源进行检。若此刻未被访问,设正在访问的标志

(2)临界区:访问临界资源的代码。

(3)退出区:将正在访问的标志恢复为未被访问的标志

(4)剩余区:其余部分

同步控制的关键

主要涉及”判断”和”修改标志”操作

(1)不应被打断(原语,OS核心态运行)

(2)如何制定一种写法,使标志的使用适用于各种具体应用情况?

2.信号量机制

1) 整型信号量

最初的信号量机制,两个原子操作对一个共享整型量进行操作。

信号量定义为一个整型量;根据初始情况赋相应的值;仅能通过两个原子操作来访问。

P操作  wait(S): 

              While S<=0 do no-op;

              S:=S-1;

V操作  signal(S):   

              S:=S+1;

�2)记录型信号量

(1)整型信号量符合“有限等待”原则

    lsignal释放资源后,当CPU被分配给等待进程后,等待进程仍可继续执行,可以符合“有限等待”。

(2)但整型信号量不符合“让权等待”原则

    整型信号量的wait操作,当s≤0时,当前进程会占着CPU不断测试;

    信号量原语不能被打断,这个占有CPU的进程会一直不断的占据CPU循环下去,陷入忙等。

*信号量结构信息发生变化

(1)不仅要有值的处理,还有队列的处理。

(2)此时形成记录型数据结构,包括两部分:

    整型变量value(代表资源数目)

    进程链表L(链接所有等待进程):

(3)代码描述:

                type 

                    Semaphore=record

                               value:

                               integer;

                               L:list  of PCB;

                    end;

(4)操作:S.Value,S.L

    Value>0,表示当前可用资源的数量;

    Value≤0,其绝对值表示等待使用该资源的进程数,即在该信号量队列上排队的PCB的个数。

*P、V操作也有所变化

(1)不仅修改资源数,还要处理进程的阻塞、唤醒等操作。先修改资源数,再判断处理。

    •定义信号量semaphore代表可用资源实体的数量。又叫信号灯。

    •当≥0,代表可供并发进程使用的资源实体数

    •当<0,表示正在等待使用该资源的进程数。

(2)建立一个信号量必须经过说明,包括

    •信号量所代表的意义

    •赋初值

    •建立相应的数据结构,以便指向等待使用临界区的进程。

(3)除初值外,信号量的值仅能由标准原子操作P、V操作来改变。PV操作是荷兰语通过和释放的意思。

3)信号量的基本应用

(1)实现进程互斥

(2)实现进程间的前趋关系(有序)

实现多个进程互斥

设置一互斥信号量mutex,初值为1。

互斥信号量注意点:

1.互斥信号量mutex初值为1;

2.每个进程中将临界区代码置于P(mutex)和V(mutex)原语之间

3.必须成对使用P和V原语(在同一进程中),不能次序错误、重复或遗漏:

    遗漏P原语则不能保证互斥访问

    遗漏V原语则不能在使用临界资源之后将其释放(给其他等待的进程);

实现有序

前趋关系:

      并发执行的进程P1和P2中,分别有代码C1和C2,要求C1要在C2开始前完成;

      为每对前趋关系设置一个同步信号量S12,并赋初值为0。则只有V操作所在进程获得cpu时能运行

控制同步顺序的注意点:

(1)信号量值为0的点是限制的关键所在;

(2)成对使用P和V原语(在有先后关系的两个进程中),不能次序错误、重复或遗漏,否则同步顺序出错。

4)AND型信号量

(1)出现原因:一些应用往往需要两个或多个共享资源,而不是前述的一个资源。进程同时要求的共享资源越多,发生死锁可能性越大。

(2)解决思想:一次性分配给进程所需资源,用完一起释放。Wait操作时对它所有需要的资源都要判断,有AND条件,故称“AND同步”、“同时wait”。

5)信号量集

(1)引入原因:

    每次只能获得或释放一个单位的资源,低效;某些时候资源分配有下限的限制;修改:在大于可分配设置的下界值t前提下,每次可分配d个。

(2)信号量集的一个特例

只有一个信号量S的几种特殊情况:lSwait(S,d, d),允许每次申请d个资源,若现有资源数少于d,不予分配。lSwait(S,1, 1),蜕化为一般的记录型信号量,一次申请一个,至多分配一个(S>1时可计数,或S=1时可控制互斥)。lSwait(S,1, 0),当S>=1时,允许多个进程进入某特定区,当S变为0后,阻止任何进程进入特定区,相当于可控开关。并不对S资源的数量产生影响。

(3)*体验Swait(S,1, 0)的开关作用(选看)

给车库位数定义资源信号量S=5通行证p=0

*信号量题目做题一般方法:

1.分析问题,找出同步、互斥关系

2.根据资源设置信号量变量

3.写出代码过程,并注意P、V操作的位置

4.检查代码,模拟机器运行,体验信号量的变化和程序运行过程是否正确。

上一篇 下一篇

猜你喜欢

热点阅读