知识框架
概念
进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码本身,还包括当前的活动, 通过程序计数器的值和处理寄存器的内容来表示。
进程控制块 (Process Control Block, PCB):一个专门的数据结构,为了使参与并发执行的程序(含数据)能独立地运行。系统利用 PCB 来描述进程的基本情况和运行状态,进而控制和管理进程。PCB是进程存在的唯一标志。
进程映像:也叫进程实体,是由程序段、相关数据段和PCB三部分构成。创建进程,实质上是创建进程映像中的PCB;而撤销进程,实质上是撤销进程的PCB。值得注意的是 ,进程映像是静态的,进程则是动态的。
进程的特征
动态性进程是程序的一次执行,它有着创建、活动、暂停、终止等过程,具有一定的生命周期,是动态地产生、变化和消亡的。 动态性是进程最基本的特征。
井发性:指多个进程实体,同存于内存中,能在一段时间内同时运行,并发性是进程的重要特征,同时也是操作系统的重要特征。引入进程的目的就是为了使程序能与其他进程的程序并发执行,以提高资源利用率。
独立性:指进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单位 。 凡未建立PCB的程序都不能作为一个独立的单位参与运行。
**异步性:**由于进程的相互制约,便进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进。异步性会导致执行结果的不可再现性,为此,在操作系统中必须配置相应的进程同步机制。
结构性:每个进程都配置一个PCB对其进行描述。从结构上看 , 进程实体是由程序段、 数据段和进程控制段三部分组成的。
通常进程有以下五种状态,前三种是进程的基本状态。
进程的状态
运行状态:进程正在处理机上运行。在单处理机环境下,每一时刻最多只有一个进程处于运行状态。
就绪状态:进程己处于准备运行的状态 , 即进程获得了除处理机之外的一切所需资源, 一旦得到处理机即可运行。
阻塞状态(又称等待状态):进程正在等待某一事件而暂停运行,如等待某资源为可用(不包括处理机)或等待输入/输出完成。即使处理机空闲,该进程也不能运行。
创建状态:进程正在被创建,尚未转到就绪状态。创建进程通常需要多个步骤 : 首先申请一个空白的PCB, 并向PCB中填写一些控制和管理进程的信息;然后由系统为该进程分配运行时所必需的资源;最后把该进程转入到就绪状态。
结束状态:进程正从系统中消失,这可能是进程正常结束或其他原因中断退出运行 。 当进程需要结束运行时,系统首先必须置该进程为结束状态,然后再进一步处理资源释放和回收等工作。
就绪状态和等待状态区别:就绪状态是指进程仅缺少处理机,只要获得处理机资源就立即执行;而等待状态是指进程需要其他资源(除了处理机)或等待某一事件。就绪状态和等待状态是进程生命周期中两个完全不同的状态。
进程状态转换
就绪状态→运行状态:处于就绪状态的进程被调用后,获得处理机资源(分派处理机时间片),于是进程由就绪状态转换为运行状态。
运行状态→就绪状态:处于运行状态的进程在时间片用完后,不得不让出处理机,从而进程由运行状态转换为就绪状态。此外,在可剥夺的操作系统中,当有更高优先级的进程就绪时,调度程度将正执行的进程转换为就绪状态,让更高优先级的进程执行。
运行状态→阻塞状态:当进程请求某一资源(如外设)的使用和分配或等待某一事件的发生 (如I/O操作的完成)时,它就从运行状态转换为阻塞状态。进程以系统调用的形式请求操作系统提供服务,这是一种特殊的、由运行用户态程序调用操作系统内核过程的形式。
阻塞状态→就绪状态:当进程等待的事件到来时,如I/O操作结束或中断结束时,中断处理程序必须把相应进程的状态由阻塞状态转换为就绪状态。
注意:一个进程从运行状态变成阻塞状态是一个主动的行为,而从阻塞状态变到就绪状态是一个被动的行为,需要其他相关进程的协助。
概述
进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程 、撤销己有进程、实现进程状态转换等功能。
在操作系统中,一般把进程控制用的程序段称为原语,原语的特点是执行期间不允许中断,它是一个不可分割的基本单位。
进程的创建
允许一个进程创建另一个进程。此时创建者称为父进程,被创建的进程称为子进程。子进程可以继承父进程所拥有的资源。当子进程被撤销时,应将其从父进程那里获得的资源归还给父进程。此外,在撤销父进程时,也必须同时撤销其所有的子进程。
操作系统创建一个新进程的过程如下(创建原语):
为新进程分配一个唯一的进程标识号,并申请一个空白的PCB (PCB是有限的)。若PCB申请失败则创建失败。
为进程分配资源,为新进程的程序和数据,以及用户栈分配必要的内存空间(在PCB中体现)。
初始化PCB,主要包括初始化标志信息、初始化处理机状态信息和初始化处理机控制信息,以及设置进程的优先级等。
如果进程就绪队列能够接纳新进程,就将新进程插入到就绪队列,等待被调度运行。
进程的终止
引起进程终止的事件主要有:
操作系统终止进程的过程如下(撤销原语):
根据被终止进程的标识符,检索PCB,从中读出该进程的状态。
若被终止进程处于执行状态,立即终止该进程的执行,将处理机资源分配给其他进程。
若该进程还有子进程,则应将其所有子进程终止。
将该进程所拥有的全部资源,或归还给其父进程或归还给操作系统。
将该PCB从所在队列 (链表) 中删除。
进程的阻塞和唤醒
进程的阻塞:
正在执行的进程,由于期待的某些事件未发生,如请求系统资源失败、等待某种操作的完成、 新数据尚未到达或无新工作可做等,则由系统自动执行阻塞原语(Block),使自己由运行状态变为阻塞状态。
进程的阻塞是进程自身的一种主动行为,也因此只有处于运行态的进程(获得CPU),才可能将其转为阻塞状态。
阻塞原语的执行过程:
进程的唤醒:
当被阻塞进程所期待的事件出现时,如它所启动的I/O操作己完成或其所期待的数据已到达,则由有关进程 (比如,提供数据的进程)调用唤醒原语 (Wakeup),将等待该事件的进程唤醒。
唤醒原语的执行过程:
注意:Block原语和Wakeup原语是一对作用刚好相反的原语,必须成对使用。Block原语是由被阻塞进程自我调用实现的,而Wakeup原语则是由一个与被唤醒进程相合作或被其他相关的进程调用实现的。
进程切换
任何进程都是在操作系统内核的支持下运行的,是与内核紧密相关的。
进程切换是指处理机从一个进程的运行转到另一个进程上运行,这个过程中, 进程的运行环境产生了实质性的变化。
进程切换的过程:
保存处理机上下文,包括程序计数器和其他寄存器。
更新PCB信息。
把进程的PCB移入相应的队列,如就绪、在某事件阻塞等队列。
选择另一个进程执行,并更新其PCB。
更新内存管理的数据结构。
恢复处理机上下文。
注意:
进程切换与处理机模式切换是不同的
模式切换时,处理机逻辑上可能还在同一进程中运行。如果进程因中断或异常进入到核心态运行,执行完后又回到用户态刚被中断的程序运行,则操作系统只需恢复进程进入内核时所保存的CPU现场,无需改变当前进程的环境信息。
但若要切换进程,当前运行进程改变了,则当前进程的环境信息也需要改变。
“调度”和“切换”的区别
调度是指决定资源分配给哪个进程的行为,是一种决策行为;切换是指实际分配的行为,是执行行为。
一般来说,先有资源的调度,然后才有进程的切换。
进程是操作系统的资源分配和独立运行的基本单位。它 一般由以下三个部分组成:
概念
进程创建时,操作系统就新建一个PCB结构,它之后就常驻内存,任一时刻可以存取,在进程结束时删除。 PCB是进程实体的一部分,是进程存在的唯一标志。
当创建一个进程时,系统未该进程建立一个PCB;当进程执行时,系统通过其PCB了解进程的现行状态信息,以便对其进行控制和管理;当进程结束时,系统回收其PCB,该进程随之消亡。操作系统通过 PCB 表来管理和控制进程。
包含信息
进程描述信息
进程标识符:标志各个进程,每个进程都有一个并且是唯一的标识号。
用户标识符:进程归属的用户,用户标识符主要为共享和保护服务。
进程控制和管理信息
进程当前状态:描述进程的状态信息,作为处理机分配调度的依据。
进程优先级:描述进程抢占处理机的优先级,优先级高的进程可以优先获得处理机。
资源分配清单
用于说明有关内存地址空间或虚拟地址空间的状况;所打开文件的列表和所使用的输入/输出设备信息。
处理机相关信息
主要指处理机中各寄存器值,当进程被切换时,处理机状态信息都必须保存在相应的PCB中,以便在该进程重新执行时,能再从断点继续执行。
组织方式
链接方式:将同一状态的PCB链接成一个队列,不同状态对应不同的队列,也可以把处于阻塞状态的进程的PCB,根据其阻塞原因的不同,排成多个阻塞队列。
索引方式:是将同一状态的进程组织在一个索引表中,索引表的表项指向相应的PCB, 不同状态对应不同的索引表,如就绪索引表和阻塞索引表等。
程序段就是能被进程调度程序调度到CPU执行的程序代码段。
注意:程序可以被多个进程共享,就是说多个进程可以运行同 一个程序。
一个进程的数据段,可以是进程对应的程序加工处理的原始数据,也可以是程序执行时产生时的中间或最终结果。
概述
进程通信是指进程之间的信息交换。PV操作是低级通信方式,高级通信方式是指以较高的程效率传输大量数据的通信方式。
高级通信方法主要有以下三个类:
概述
在通信的进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行写/读操作实现进程之间的信息交换。
在对共享空间进行写/读操作时,需要使用同步互斥工具(如P操作、V操作),对共享空间的写/读进行控制。
共享存储又分为两种:低级方式的共享是基于数据结构的共享;高级方式则是基于存储区的共享。
概述
若通信的进程之间不存在可直接访问的共享空间,则必须利用操作系统提供的消息传递方法实现进程通信。
进程通过系统提供的发送消息和接收消息两个原语进行数据交换。
分类
直接通信方式:发送进程直接把消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上,接收进程从消息缓冲队列中取得消息。
间接通信方式:发送进程把消息发送到某个中间实体中,接收进程从中间 实体中取得消息。
概述
管道通信是消息传递的一种特殊方式。
所谓 “管道“,是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件。
为了协调双方的通信,管道机制必须提供以下三方面的协调能力: 互斥、同步和确定对方的存在。
管道可以克服使用文件进行通信的两个问题 , 具体表现为 :
管道只能采用半双工通信,即某一时刻只能单向传输。 要实现父子进程双方互动通信,需要定义两个管道。
概念
就是 “轻量级进程”,它是一个基本的CPU执行单元,也是程序执行流的最小单元 ,由线程ID、程序计数器、寄存器集合和堆桔组成。
线程是进程中的一个实体,是被系统独立调度和分派的基本单位。
线程自己不拥有系统资源 ,只拥有一点在运行中必不可少的资源, 但它可与同属一个进程的其他线程共享进程所拥有的全部资源。
一个线程可以创建和撤销另一个线程 , 同一进程中的多个线程之间可以并发执行。
线程也有就绪、 阻塞和运行三种基本状态。
线程与进程的比较
线程的属性
线程是一个轻型实体,它不拥有系统资源,但每个线程都应有一个唯一的标识符和一个线程控制块,线程控制块记录了线程执行的寄存器和械等现场状态。
不同的线程可以执行相同的程序,即同一个服务程序被不同的用户调用时,操作系统为它们创建成不同的线程。
同一进程中的各个线程共享该进程所拥有的资源。
线程是处理机的独立调度单位,多个线程是可以并发执行的。
一个线程被创建后便开始了它的生命周期,直至终止,线程在生命周期内会经历阻塞态、就绪态和运行态等各种状态变化。
线程的实现方式
线程的实现可以分为两类:用户级线程(User-Level Thread, ULT)和内核级线程 (Kernel-Level Thread, KLT)。内核级线程又称为内核支持的线程。
用户级线程:有关线程管理的所有工作都由应用程序完成,内核意识不到线程的存在。
内核级线程:线程管理的所有工作由内核完成,应用程序没有进行线程管理的代码,只有一个到内核级线程的编程接口。内核为进程及其内部的每个线程维护上下文信息,调度也是在基于线程架构的基础上完成。
组合方式:线程创建完全在用户空间中完成,线程的调度和同步也在应用程序中进行。一个应用程序中的多个用户级线程被映射到一些(小于或等于用户级线程的数目) 内核级线程上。
多线程模型
有些系统同时支持用户线程和内核线程,由此产生了不同的多线程模型,即实现用户级线程和内核级线程的连接方式。
多对一模型。将多个用户级线程映射到一个内核级线程,线程管理在用户空间完成。此模式中,用户级线程对操作系统不可见(即透明)。
一对一模型。将每个用户级线程映射到一个内核级线程 。
多对多模型。将n个用户级线程映射到m个内核级线程上,要求 m ≤ n m\leq n m≤n。
基本概念
处理机调度:对处理机进行分配,从就绪队列中,按照一定的算法 (公平、 高效)选择一个进程并将处理机分配给它运行, 以实现进程并发地执行。
调度的层次
一个作业从提交开始直到完成,往往要经历以下三级调度
作业调度:又称高级调度,其主要任务是按一定的原则从外存上处于后备状态的作业中挑选一个(或多个)作业,给它(们)分配内存、输入/输出设备等必要的资源,并建立相应的进程,以使它(们) 获得竞争处理机的权利 。简言之,就是内存与辅存之间的调度。对于每个作业只调入一次、调出一次。
多道批处理系统中大多配有作业调度,而其他系统中通常不需要配置作业调度。作业调度的执行频率较低,通常为几分钟一次。
中级调度:又称内存调度。引入中级调度是为了提高内存利用率和系统吞吐量。为此, 应使那些暂时不能运行的进程,调至外存等待,把此时的进程状态称为挂起状态 。当它们己具备运行条件且内存又稍有空闲时,由中级调度来决定,把外存上的那些己具备运行条件的就绪进程, 再重新调入内存,并修改其状态为就绪状态,挂在就绪队列上等待。
进程调度:又称为低级调度,其主要任务是按照某种方法和策略从就绪队列中选取一个进程,将处理机分配给它。进程调度是操作系统中最基本的一种调度,在一般操作系统中都必须配置进程调度。进程调度的频率很高,一般几十毫秒一次。
三级调度的联系
进程调度和切换程序是操作系统内核程序。
不能进行进程调度与切换的情况
在处理中断的过程中:中断处理过程复杂,在实现上很难做到进程切换,而且中断处理是系统工作的一部分,逻辑上不属于某一进程,不应被剥夺处理机资源。
进程在操作系统内核程序临界区中:进入临界区后,需要独占式地访问共享数据,理论上必须加锁,以防止其他并行程序进入,在解锁前不应切换到其他进程运行,以加快该共享数据的释放。
其他需要完全屏蔽中断的原子操作过程中:如加锁、解锁、中断现场保护、恢复等原子操作。在原子过程中,连中断都要屏蔽,更不应该进行进程调度与切换。
应该进行进程调度与切换的情况
当发生引起调度条件 , 且当前进程无法继续运行下去时,可以马上进行调度与切换。如果操作系统只在这种情况下进行进程调度,就是非剥夺调度。
当中断处理结束或自陷处理结束后,返回被中断进程的用户态程序执行现场前,若置上请求调度标志,即可马上进行进程调度与切换 。 如果操作系统支持这种情况下的运行调度程序, 就实现了剥夺方式调度。
所谓进程调度方式是指当某一个进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要处理,即有优先权更高的进程进入就绪队列,通常有以下两种进程调度方式:
非剥夺调度方式,又称非抢占方式 。 是指当一个进程正在处理机上执行时,即使有某个更为重要或紧迫的进程进入就绪队列,仍然让正在执行的进程继续执行, 直到该进程完成或发生某种事件而进入阻塞状态时,才把处理机分配给更为重要或紧迫的进程。
在非剥夺调度方式下, 一旦把CPU分配给一个进程,那么该进程就会保持CPU直到终止或转换到等待状态。 这种方式的优点是实现简单、系统开销小,适用于大多数的批处理系统,但它不能用于分时系统和大多数的实时系统 。
剥夺调度方式,又称抢占方式。 是指当一个进程正在处理机上执行时,若有某个更为重 要或紧迫的进程需要使用处理机,则立即暂停正在执行的进程,将处理机分配给这个更为重要或紧迫的进程。
CPU利用率:CPU是计算机系统中最重要和昂贵的资源之一,所以应尽可能使CPU保持“忙”状态,使这一资源利用率最高。
系统吞吐量:表示单位时间内CPU完成作业的数量。长作业需要消耗较长的处理机时间,因此会降低系统的吞吐量。而对于短作业,它们所需要消耗的处理机时间较短,因此能提高系统的吞吐量。调度算法和方式的不同,也会对系统的吞吐量产生较大的影响。
周转时间:是指从作业提交到作业完成所经历的时间,包括作业等待、在就绪队列中排队、在处理机上运行以及进行输入/输出操作所花费时间的总和。
等待时间:是指进程处于等处理机状态时间之和, 等待时间越长,用户满意度越低。 处 理机调度算法实际上并不影响作业执行或输入/输出操作的时间,只影响作业在就绪队列中等待所花的时间。因此,衡量一个调度算法的优劣,常常只需简单地考察等待时间。
晌应时间:是指从用户提交请求到系统首次产生响应所用 的时间。在交互式系统中,周转时间不可能是最好的评价准则, 一般采用响应时间作为衡量调度算法的重要准则之一。从用户角度看,调度策略应尽量降低响应时间,使响应时间处在用户能接受的范围之内。
先来先服务( FCFS)调皮算法
在进程调度中,FCFS调度算法每次从就绪队列中选择最先进入该队列的进程,将处理机分配给它,使之投入运行,直到完成或因某种原因而阻塞时才释放处理机。
FCFS调度算法属于不可剥夺算法。它不能作为分时系统和实时系统的主要调度策略。但它常被结合在其他调度策略中使用 。
FCFS调度算法的特点是算法简单,但效率低;对长作业比较有利, 但对短作业不利(相对SJF和高响应比);有利于CPU繁忙型作业, 而不利于I/O繁忙型作业。
短作业优先( SJF)调皮算法
短作业优先 (SJF) 调度算法:从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。
短进程优先(SPF)调度算法:是从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它 ,使之立即执行 ,直到完成或发生某事件而阻塞时,才释放处理机。
SJF调度算缺点:
该算法对长作业不利:由于调度程序总是优先调度那些(即使是后进来的)短作业 , 将导致长作业长期不被调度( “饥饿 ”现象,注意区分“死锁 ”。后者是系统环形等待 , 前者是调度策略问题 )。
优先级调皮算法
在作业调度中,优先级调度算法每次从后备作业队列中选择优先级最高的一个或几个作业, 里 将它们调入内存,分配必要的资源,创建进程井放入就绪队列。
在进程调度中,优先级调度算法每次从就绪队列中选择优先级最高的进程,将处理机分配给它,使之投入运行。
根据新的更高优先级进程能否抢占正在执行的进程,可将该调度算法分为:
而根据进程创建后其优先级是否可以改变,可以将进程优先级分为以下两种:
高响应比优先调度算法
高响应比优先调度算法主要用于作业调度,该算法是对FCFS调度算法和SJF调度算法的一种综合平衡,同时考虑每个作业的等待时间和估计的运行时间。在每次进行作业调度时,先计算后备作业队列中每个作业的响应比,从中选出响应比最高的作业投入运行。
响应比的变化规律:响应比 R p = 等 待 时 间 + 要 求 服 务 时 间 要 求 服 务 时 间 R_p=\frac{等待时间+要求服务时间}{要求服务时间} Rp=要求服务时间等待时间+要求服务时间
当作业的等待时间相同时,则要求服务时间越短,其响应比越高,有利于短作业。
当要求服务时间相同时,作业的响应比由其等待时间决定, 等待时间越长,其响应比越高,因而它实现的是先来先服务。
对于长作业,作业的响应比可以随等待时间的增加而提高,当其等待时间足够长时,其响应比便可升到很高,从而也可获得处理机 。克服了饥饿状态,兼顾了长作业。
时间片轮转调皮算法
时间片轮转调度算法主要适用于分时系统。
在时间片轮转调度算法中 ,时间片的大小对系统性能的影响很大。此时间片的大小应选择适当。
时间片的长短通常由以下因素确定:系统的响应时间、就绪队列中的进程数目和系统的处理能力。
多级反馈队到调度算法 (集合了前几种算法的优点)
通过动态调整进程优先级和时间片大小,多级反馈队列调度算法可以兼顾多方面的系统目标。
多级反馈队列调度算法的实现思想:
多级反馈队列的优势:
终端型作业用户:短作业优先。
短批处理作业用户:周转时间较短。
长批处理作业用户:经过前面几个队列得到部分执行,不会长期得不到处理。
临界资源
临界资源:一次仅允许一个进程使用的资源。许多物理设备都属于临界资源,如打印机等。 此外,还有许多变量、数据等都可以被若干进程共享,也属于临界资源。对临界资源的访问,必须互斥地进行。
临界区:访问临界资源的那段代码。
临界资源访问过程:
进入区:为了进入临界区使用临界资源,在进入区要检查可否进入临界区 ,如果可以进入临界区,则应设置正在访问临界区的标志,以阻止其他进程同时进入临界区 。
临界区:进程中访问临界资源的那段代码 ,又称临界段。
退出区:将正在访问临界区的标志清除。
剩余区:代码中的其余部分。
同步
同步亦称直接制约关系,它是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系。
进程间的直接制约关系就是源于它们之间的相互合作。
互斥
互斥亦称间接制约关系。当一个进程进入临界区使用临界资源时 , 另一个进程必须等待,当占用临界资源的进程退出临界区后,另一进程才允许去访问此临界资源。
为禁止两个进程同时进入临界区,同步机制应遵循以下准则:
空闲让进:临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区。
忙则等待:当已有进程进入临界区时,其他试图进入临界区的进程必须等待。
有限等待:对请求访问的进程,应保证能在有限时间内进入临界区。
让权等待:当进程不能进入临界区时,应立即释放处理器,防止进程忙等待。
软件实现方法
在进入区设置和检查一些标志来标明是否有进程在临界区中,如果己有进程在临界区,则在进入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志。
算法一:单标志法
算法二:双标志法先检查
算法三:双标志法后检查
算法四:Peterson’s Algorithm。
硬件实现方法
计算机提供了特殊的硬件指令,允许对一个宇中的内容进行检测和修正,或者是对两个字的内容进行交换等。通过硬件支持操实现临界段问题的低级方法或称为元方法。
中断屏蔽方法:当一个进程正在使用处理机执行它的临界区代码时,要防止其他进程再进入其临界区访问的最简单方法是禁止一切中断发生,或称之为屏蔽中断、关中断。
硬件指令方法
硬件方法的优点:
硬件方法的缺点:进程等待进入临界区时要耗费处理机时间,不能实现让权等待。
从等待进程中随机选择一个进入临界区,有的进程可能一直选不上,从而导致“饥饿”现象。
概念
信号量机构是一种功能较强的机制,可用来解决互斥与同步的问题,它只能被两个标准的原语 wait(S)和 signal(S)来访问,也可以记为“P操作” 和 “V操作”。
分类
整型信号量
记录型信号量
利用信号量实现同步
利用信号量实现进程互斥
利用信号量实现前驱关系
分析进程同步和互斥问题的方法步骤
概念
是由一组数据以及定义在这组数据之上的对这组数据的操作组成的软件模块,这组操作能初始化并改变管程中的数据和同步进程。
组成
局部于管程的共享结构数据说明。
对该数据结构进行操作的一组过程。
对局部于管程的共享数据设置初始值的语句。
基本特性
局部于管程的数据只能被局部于管程内 的过程所访问。
一个进程只有通过调用管程 内的过程才能进入管程访问共享数据。
每次仅允许一个进程在管程内执行某个内部过程。