进程管理

来源:互联网 发布:南京软件谷绿皮火车 编辑:程序博客网 时间:2024/06/05 01:06

进程的引入

  • 程序:指令或语句序列的集合,体现了某种算法。计算机运行程序有顺序执行和并发执行,即单道和多道。

  • 程序顺序执行的特征:①顺序性:处理机的操作严格按照程序所规定的顺序执行,即每一个操作必须在下一个操作之前结束。
    ②资源独占性(封闭性):运行程序独占全机资源。系统资源状态由运行的这个程序决定和改变。执行过程中不受外界因素影响。
    ③结果无关系(可再现性):程序运行结果与程序执行速度无关,只要环境和初始条件相同,程序重复执行总能得到相同结果。

  • 程序的并发执行的特征:若干个程序同时在系统中运行,这些程序在执行的时间上是重叠的,一个程序的执行尚未结束,另一个程序的执行已经开始。
    ①失去了程序的封闭性和可再现性:程序在并发执行时,多个程序共享系统中的各种资源,因而这些资源的状态将由多个程序来改变,致使程序的运行失去了封闭性;由于失去了封闭性,也将导致失去其可再现性。
    ②并发执行的程序间产生了相互制约关系:因共享资源或协调完成同一任务,使得并发程序之间发生了相互制约关系,有间接制约(竞争相同资源),直接制约(需要协同完成同一个任务)。
    ③程序与CPU执行活动之间不再一一对应:CPU活动是一个动态概念,是程序的执行过程,单道运行时是一一对应的,在多道运行时即并发执行时是不存在一一对应。

  • 在由顺序执行发展到并发执行时,程序这个静态概念,已不再如实反映系统中的活动情况。为此,引入进程概念。

进程的概述

  • 进程的定义:进程是为了描述系统中各种并发活动而引入的,具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的独立单位。又称为任务(Task)。

  • 进程的特征:①动态性:进行的实质是进程实体的一次执行过程,因此,动态性是进程最基本的特性,进程实体是有一个的生命周期,而程序则只是一组有序指令的集合,并存放在某种介质上(如硬盘),其本身不具有运动的含义,因而是静态的。
    ②并发性:多个进程实体同存于内存中,并且能够在一段时间内同时运行。并发性是进程的重要特征, 同时也成为OS的重要特征。
    ③独立性:进程实体是一个能独立运行、独立分配资源和独立接受调度的基本单位。
    ④异步性:进程按各自独立的、不可预知的速度向前推进,或者说进程实体按照异步方式运行。
    ⑤结构特性:为使程序能够独立运行,应为之配置一进程控制块,即PCB(Process Control Block)。而程序段、相关的数据段和PCB三部分构成进程实体。所谓创建进程,实质上是创建进程实体中的PCB,撤销进程也是撤销进程中的PCB。PCB是动态特征的集中反映,程序段是描述要完成的功能,数据段是操作对象及工作区。

  • 进程的基本状态:①就绪状态:当进程已分配到除CPU以外的所有必要资源后,只要再获得CPU,就可以立即运行,进程这时的状态称为就绪状态。在一个系统中可能多个进程处于就绪状态,通常将它们排成一个队列,称为就绪队列。
    ②阻塞状态:处于执行状态的线程由于发生某事件而暂停无法继续执行时,便放弃处理机而处于暂停状态,此时进程的状态称为阻塞状态,或等待状态或封锁状态。
    ③执行状态:执行状态,进程已获得CPU,其程序正在执行。在单处理机系统中,只有一个进程处于执行状态,在多处理机系统中,则有多个进程处于执行状态。
    进程的状态
    说明:上图表示三种基本状态之间的相互转化。

进程控制块

  • 进程控制块的定义及作用:①为了描述和控制进程的运行,系统为每个进程定义了一个数据结构,进程控制块PCB,它是进程实体的一部分,是操作系统中最重要的记录型数据结构,PCB中记录了操作系统所需的,用于描述进程当前情况以及控制进程运行的全部信息。
    ②进程控制块的作用是使一个在多道程序环境下能独立运行的程序,成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。或者说,OS是根据PCB来对并发执行的进程进行控制和管理的。PCB是进程存在的唯一标识。
    ③当创建一个进程时,就为它创建一个PCB,进程结束时又回收其PCB,进程于是随之消亡,PCB可以被操作系统中的多个模块读或修改,如被调度程序、资源分配程序、中断处理程序及监督分析程序等读或修改,因为PCB是经常被系统访问,尤其是被运行频率很高的进程及分派程序访问,故PCB应常驻内存。系统将所有的PCB组织成若干个链表(或队列),存放在操作系统中专门开辟的PCB区内。

  • 进程控制块的内容:① 进程标识符,用于唯一地标识一个进程,有内部标识符(由系统赋予的唯一一个数字,通常为进程的序号,为方便系统使用)和外部标识符(由创建者提供,可描述进程的家族关系)。
    ② 处理机的状态,当处理机被中断时,其寄存器的信息都必须保存在进程的PCB中,以便该进程重新执行时,能从断点继续执行。
    ③ 进程调度信息,包括进程状态(指明进程的当前状态,作为进程调度和对换时的依据),进程优先级(用于描述进程使用处理机的优先级别,优先级高的进程应该优先获取处理机),进程调度所需的其他信息(与进程调度算法有关,如进程已等待CPU的时间总和,进程已执行的时间总和等),事件(进程由执行状态转变为阻塞状态所等待发生的事件,即阻塞原因)。
    ④ 进程控制信息,包括程序和数据的地址(进程的程序和数据所在的内存或外存首址,以便在调度该进程时,能从PCB中找到其程序和数据),进程同步和通信机制(实现进程同步和进程通信时必需的机制,如消息队列指针,信号量等),资源清单(除CPU以外的进程所需的全部资源以及已经分配到该进程的资源的清单),链接地址(本进程PCB所在队列中的下一个进程的PCB的首地址)。

  • 进程控制块的组织方式:为了有效的对PCB进行管理,应该用适当的方式将这些PCB组织起来,常用的组织方式如下:
    ① 链接方式,把具有同一状态的PCB,链接成一个队列,这样可以形成若干就绪队列、阻塞队列和空白队列等,优先级高的进程的PCB排在前面。
    ② 索引方式,系统根据所有进程的状态建立几张索引表,如就绪索引表,阻塞索引表等,并把各索引表在内存的首地址记录在内存的一些专用单元中,在每个索引表的表目中,记录具有相应状态的某个PCB在PCB表中的地址。

进程控制

  • 进程控制:指系统使用一些具有特定功能的程序段来创建、撤销进程以及完成进程各状态间的转换。这些功能由OS的内核来实现的。

  • 原语:由若干条指令组成。这些指令,要么全做,要么全不做,不允许中断。是不可分割的操作。用于进程控制的原语有:创建原语、撤销原语、阻塞原语、唤醒原语、挂起原语、解挂原语等等。

  • 进程的创建:一个进程可以创建一个子进程,子进程会继承父进程所拥有的资源,如继承父进程打开的文件、分配到的缓冲区等,当子进程被撤销时,应该讲其从父进程哪里获得的资源归还给父进程,此外,撤销父进程时,也必须同时撤销其所有的子进程。
    引起创建进程的事件如下:
    ① 用户登录。② 作业调度。③ 提供服务。④ 应用请求。
    创建步骤如下:
    ① 申请空白PCB,为新进程申请获得唯一的数字标识符,并从PCB集合中索取一个空白的PCB。
    ② 为新进程分配资源,为新进程的程序和数据以及用户栈分配必要的内存空间。
    ③ 初始化进程控制块,PCB的初始化包括:初始化标识信息,将系统分配的标识符和父进程标识符填入新的PCB中;初始化处理机状态信息,使程序计数器指向程序的入口地址,使栈指针指向栈顶;初始化处理机控制信息,将进程的状态设置为就绪状态或静止就绪状态。
    ④ 将新进程插入到就绪队列,如果进程就绪队列能够接纳新进程,便将新进程插入就绪队列。

  • 进程的终止
    引起进程终止的事件如下:
    ① 正常结束,在任何计算机系统中,都应有一个用于表示进程已经运行完成的指示。
    ② 异常结束,在进程运行期间,由于出现某些错误和故障而迫使进程终止。如越界错误(程序所访问的存储区已越出该进程的区域),保护错(进程试图去访问一个不允许访问的资源或文件,或者以不当的方式进行访问,如写一个只读文件),非法指令(进程试图去执行一个不存在的指令),特权指令错(进程试图执行一条只允许OS执行的指令),等待超时(进程等待谋事件的时间超过了规定的最大值),算术运算错(进程试图执行一个被禁止的运算,如被0除),I/O故障(I/O过程中发生了错误)。
    ③ 外界干预,进程应外界的请求而终止运行,如操作员或操作系统干预,父进程请求(父进程具有终止自己任何子孙进程的能力),父进程终止(父进程终止,其所有子孙进程也将终止)。
    终止进程的步骤如下:
    ① 根据被终止的进程的标识符,从PCB集合汇总检索除该进程的PCB,从中读出该进程的状态。
    ② 若被终止的进程正处于执行状态,应立即终止该进程的执行,并置调度标志位真,用于指示该进程被终止后应重新进行调度。
    ③ 若该进程还有子孙进程,还应将其子孙进程予以终止,以防他们成为不可控的进程。
    ④ 将被终止的进程所拥有的全部资源,或者归还给其父进程,或者归还给操作系统。
    ⑤ 将被终止的进程PCB从所在队列或链表中移出,等待其他程序来搜集信息。

  • 进程的阻塞与唤醒
    引起进程阻塞与唤醒的事件如下:
    ① 请求系统服务,当正在执行的进程请求操作系统提供服务时,由于某种原因,操作系统并不立即满足该进程的要求,该进程只能转变为阻塞状态来等待。
    ② 启动某种操作,当进程启动某种操作后,如果该进程必须在该操作完成之后才能继续执行,则必须先使该进程阻塞,以等待该操作完成。
    ③ 新数据尚未到达,对于相互合作的进程,如果其中一个进程需要先获得另一合作进程提供的数据后才能对数据进行处理,则只要其所需数据尚未到达,该进程只有(等待)阻塞。
    ④ 无新工作可做,系统往往设置一些具有某些特定功能的系统进程,每当这种进程完成任务后,便把自己阻塞起来以等待新任务到来。
    进程阻塞步骤如下:
    正在执行的进程发现上述某件事情时,由于无法继续运行,于是进程便通过调用阻塞原语block把自己阻塞,可见,进程的阻塞是进程自身的一种主动行为,之后进程会停止执行,并将进程控制块的状态由执行改为阻塞,并将PCB插入阻塞队列,如果系统中设置了因不同事件而阻塞的多个阻塞队列,则应将本进程插入到具有相同事件的阻塞队列中,最后,转调度程序进行重新调度,将处理机分配给另一就绪进程并进行切换。即保留被阻塞进程的处理机状态到PCB中,再按新进程的PCB中的处理机状态设置CPU环境。
    进程唤醒步骤如下:
    当被阻塞进程所期待的时间出现时,如I/O完成获其所期待的数据已经到达,则由有关进程(如用完并释放I/O设备的进程)调用唤醒原语wakeup,将等待该事件的进程唤醒,首先将被阻塞的进程从等待该事件的阻塞队列中移出,将其PCB中的现行状态由阻塞改为就绪,然后再将该PCB插入到就绪队列中。值得注意的是,block原语与wakeup原语应该在不同进程中执行。

  • 进程的挂起与激活
    进程挂起步骤:
    当出现引起进程挂起的事件时,如用户进程请求将自己挂起或父进程请求将自己的某个子进程挂起,系统将利用挂起原语suspend将指定进程或处于阻塞状态的进程挂起。 检查被挂起进程的状态,若处于活动就绪状态,便将其改为静止就绪,对于活动阻塞状态的进程,则将其改为静止阻塞,若被挂起的状态正在执行,则转向调度程序重新调度。
    进程激活步骤:
    当发生激活进程的事件时,例如,父进程或用户进程请求激活指定进程,若该进程驻在外存而内存中已有足够的空间时,则可将在外存处于静止就绪状态的该进程换入内存,这时,利用激活原语active将指定进程激活,激活原语先将进程从外存调入内存,检查该进程的现行状态,由对应的静止状态改为活动状态,若使用抢占式调度策略,则有新进程如就绪队列时,应检查是否要进行重新调度,即由调度程序将被激活进程与当前进程进行优先级的比较,如果被激活进程的优先级更低,就不必重新调度,否则,立即剥夺当前进程的运行,把处理机分配给刚被激活的进程。

进程同步

  • 进程同步:进程同步主要是对多个相关进程在执行次序上进行协调,以使并发执行的诸进程之间能有效共享资源和相互合作,而从使程序的执行具有可再现性。在多道程序环境下,当程序并发执行时,由于资源共享和进程合作,使处于一个系统中的诸进程之间可能存在着以下两种形式的制约关系。
    ① 间接相互制约关系,同处于一个系统中的进程,通常都共享着某种系统资源,如共享CPU、I/O设备等,间接相互制约即源于这种资源共享。
    ② 直接相互制约关系,这种制约主要源于进程间的合作,如A进程通过缓冲向B进程提供数据,当缓冲为空时,B阻塞,待A输入数据后,B被唤醒,缓冲满时,A阻塞,待B取出数据后,A被唤醒。

  • 临界区:许多硬件资源如打印机,磁带机等,都属于临界资源,诸进程应该采取互斥方式,实现对这种资源的共享。人们把在每个进程中访问临界资源的那段代码成为临界区,显然,若能保证诸进程互斥地进入自己的临界区,便可实现诸进程对临界资源的互斥访问。

  • 同步机制遵循的原则
    ① 空闲让进,当无进程处于临界区时,表明临界资源处于空闲状态,应允许一个请求进入临界区的进程立即进入自己的临界区,以有效的利用临界资源。
    ② 忙则等待,当已有进程进入临界区时,表明临界资源正在被访问,因而其他视图进入临界区的进程必须等待,以保证对临界资源的互斥访问。
    ③ 有限等待,对要求访问临界资源的进程 ,应保证在有限时限内能进入自己的临界区,以免陷入死等状态。
    ④ 让权等待,当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入忙等状态。

  • 进程同步进程问题:生产者/消费者问题、哲学家进餐问题、读写问题。

进程通信

  • 进程通信:是指进程之间的信息交换,进程的互斥和同步,由于只能交换很少量的信息而被归结为低级通信,目前的高级通信机制可归结为三大类
    ① 共享存储器系统:相互通信的进程共享某些数据结构或共享存储区,进程之间能够通过这些空间进行通信,基于此,又可以分为如下两种类型:基于共享数据结构的通信方式,在这种通信中,要求诸进程共用某些数据结构,借此实现进程间的信息交换。基于共享存储区的通信方式,为了传输大量数据,在存储器中划出一块共享存储区,诸进程可通过对共享存储区中的数据的读或写来实现通信。
    ② 消息传递系统:进程间的数据交换是以格式化的消息为单位,程序员直接利用操作系统提供的一组通信命令(原语),不仅能实现大量数据的传递,而且还隐藏了通信的实现细节,使通信过程对用户是透明的,从而大幅减少通信程序编制的复杂性。
    ③ 管道通信:连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件,向管道(共享文件)提供输入的发送进程,以字符流形式将大量的数据送入管道;而接受管道输出的接受进程,则从管道中接受数据,由于发送和接受进程是利用管道进行通信的,因此叫做管道通信。管道通信需要具有三方面的协调能力:互斥(当一个进程正在对pipe执行读/写时,其他进程必须等待),同步(当写进程把一定数量的数据写入pipe,便去睡眠等待,到读进程取走数据后,再把它唤醒,当读进程读一个空pipe时,也应该睡眠等待,直到有数据写入管道,才将其唤醒),确定对方是否存在,只有确定了对方已存在时,才能进行通信。

进程调度

  • 进程调度的基本概念:就是系统按照某种算法动态、合理地把CPU分配给某一就绪进程。在多道程序系统中,用户进程数往往超过处理机数,另外,操作系统还要建立若干个系统进程完成系统功能。多进程竞争处理机,将处理机动态地分配给系统中系统中的各个就绪进程,使之执行,这就需要实现进程调度。进程调度完成分配处理机的任务。

  • 进程调度的功能:
    ①记录系统中各个进程的执行状况:管理系统中各个进程的进程控制块,将进程的状态变化以及资源需求情况及时地记录到进程控制块中。
    ②根据进程调度算法分配CPU:按照系统规定的调度策略从就绪队列中选择一个进程让其占有CPU执行,并记录相关信息。
    ③从进程收回处理机:正在运行的进程,当时间片用完、等待某种资源或者有更高优先级的进程需要处理机,必须交出处理机。

  • 进程调度方式:非剥夺式,一旦把CPU分配给某一进程后,便让它一直运行下去,直到进程完成或发生某种事件而不能运行时,才将CPU分给其它进程。剥夺式,允许调度程序基于某种策略剥夺现行进程的CPU给其他进程。

  • 进程调度时机:
    ①现行进程完成或错误终止
    ②现行进程提出I/O请求,等待I/O完成时,转进程调度。
    ③在分时系统,按照时间轮片,分给进程的时间片用完时。
    ④优先级调度时,有更高优先级进程变为就绪时。
    ⑤在进程通讯中,执行中的进程执行了某种原语操作,如阻塞原语、唤醒原语,都可能引起进程调度。

进程调度算法

  • 先来先服务(FCFS):该方法按照进程到达的先后顺序排队,每次调度队首的进程。FCFS算法属于非剥夺调度方式,实现简单,看似公平,但对于那些后进入队列而运行时间比较短的进程,或I/O型的进程而言,可能需要长时间等待。

  • 短作业优先(SJF):该方法要求每个作业的进程提供所需的运行时间,每次调度时总是选取运行时间最短的进程运行。保证响应时间最快,平均周转时间最短。保证了CPU的利用率,但是可能使得长进程没有机会运行。

  • 响应比高者优先(HRN):当调度作业时,都要计算各个作业的响应比总是选择响应比高的作业运行。响应比=(作业等待时间+作业估计运行时间)/作业估计运行时间,通常情况下,优先运行短作业,当长作业等待时间足够长时,它也就变为可优先运行的作业了。

  • 轮转调度:时间片轮转调度法,在分时联机系统中,n个进程循环地获得时间片而执行。从系统中来看它们是交替执行的,但是就每个终端用户而言,都感觉到自己独占了一台主机,不受其它用户影响。这是通过进程并发执行实现的。如果用户数太多,主机处理进程将会急剧增加,进程排队等待的时间也会很长,进程的响应时间也可能增长,用户将明显感觉到主机的速度变慢。另外,时间片的大小也会影响到进程的响应时间。

  • 优先级法:基于优先级的调度算法,当发生进程调度时,将CPU分配给就绪队列中优先级最高的进程。静态优先级,在进程创建时确定,运行时保持不变,通常赋予系统进程较高优先级,申请资源少量的赋予较高优先级。动态优先级,进程的优先级可随着进程的推进而改变,以便获得更好的调度性能。

  • 分计轮转调度:将先前的一个就绪队列,根据进程的优先级不同,划分两个或两个以上的就绪队列,并赋予给每个队列不同的优先级。

线程

  • 线程的基本概念:为了减少程序并发执行时系统付出的时空开销,是操作系统更加有效。80年代引入了线程。线程是进程中的一个执行单位。同一进程中的各个线程分别有一组CPU指令、一组CPU寄存器和一个堆栈。它们共享进程的主存和文件。这些线程被操作系统调度执行。每个进程至少拥有一个线程。进程在逻辑上表示操作系统必须做的一个作业,线程表示完成该作业的许多可能的子任务。由于线程拥有较少的资源,又具有传统进程的许多特性,因此有的把线程叫做轻型进程。

  • 线程的组成
    ①有一个唯一的标识符。
    ②有一组表示处理机状态的寄存器。
    ③有两个堆栈,分别用于用户状态执行和核心状态执行。
    ④有一个独立的程序计数器。

  • 线程与进程的对比
    ① 调度:线程作为调度和分派的基本单位,而进程作为资源拥有的基本单位。同一进程中,线程的切换不会引起进程的切换,但从一个进程中的线程切换到另外一个进程中的线程时,将会引起进程切换。
    ② 并发性:不仅进程间可以并发执行,同一个进程中的多个线程之间亦可并发执行,是的操作系统具有更好的并发性,从而能更加有效地提高系统资源利用率和系统吞吐率。
    ③ 拥有资源:线程一般不拥有系统资源(除少量必不可少的资源),但它可以访问其隶属的进程的资源,即一个进程的代码段,数据段以及拥有的系统资源,如已打开的文件、I/O设备等。
    ④ 系统开销:在创建和撤销进程时,系统都要为之创建和回收进程控制块,分配或回收资源,操作系统付出的开销明显大于线程创建或撤销时的开销,在进程切换时,涉及到当前进程CPU环境的保存和新被调度运行进程的CPU环境的设置,而线程的切换则仅需保存和设置少量寄存器内容,不涉及存储器管理方面的操作,所以线程的切换开销远小于进程切换开销,以外,由于一个进程中的多个线程具有相同的地址空间,在同步和通信的实现上也比较容易,在一些操作系统中,线程的切换,同步和通信都无需操作系统内核的干预。

  • 线程的属性
    ① 轻型实体,每个线程都具有一个用于控制线程运行的线程控制块TCB,用于指示被执行指令序列的程序计数器,保留局部变量,少量状态参数合返回地址等。
    ② 独立调度和分派的基本单位,线程是能独立运行的基本单位,切换非常迅速且开销小。
    ③ 可并发执行,一个进程、不同进程的线程均可并发执行。
    ④ 共享进程资源,同一进程中的线程共享该进程所拥有的资源,所有线程拥有相同的地址空间(进程的地址空间),这意味着线程可以访问该地址空间中的每一个虚地址,此外,还可以访问进程所拥有的已打开文件,定时器,信号量机构等。

  • 线程的状态
    ① 状态参数,每一个线程可利用线程标识符和一组状态参数进行描述。状态参数包括寄存器状态(包括程序计数器和堆栈指针中的内容)、堆栈(保存的局部变量和返回地址)、线程运行状态、优先级、线程专有存储器(保存线程自己的具有变量拷贝)、信号屏蔽(对某些信息加以屏蔽)。
    ② 线程运行状态,运行状态包括执行状态、就绪状态、阻塞状态。

  • 线程的创建和终止
    ①在创建新线程时,需要利用一个线程创建函数(或系统调用),并根据相应的参数,如指向线程主程序的入口指针、堆栈的大小、调度的优先级等。在线程创建函数执行完后,将返回一个线程标识符供以后使用。
    ②终止线程的方式有两种,线程完成工作后自愿退出或者线程在运行中出现错误或由于某种原因而被其他线程强行终止。在大多数OS中,线程被终止后并不立即释放它所占有的资源,只有当进程中的其他线程执行了分离函数后,被终止的线程才与资源分离,此时的资源才能被其他线程利用。虽然已被终止但尚未释放资源的线程,仍可以被需要它的线程所调用,以使被终止线程重新恢复运行。

  • 多线程OS中的进程
    ① 作为系统资源分配的单位,任一进程中所拥有的资源包括受到分别保护的用户地址空间、用于实现进程间和线程间同步和通信的机制、已打开的文件和已申请到的I/O设备,以及一张由核心进程维护的地址映射表,该表用于实现用户程序的逻辑地址到内存地址的映射。
    ③ 进程不是一个可执行的实体,进程仍具有与执行相关的状态,如执行状态,表示进程中的某个线程正在执行,对进程所施加的与进程状态有关的操作,也对其线程其作用,例如,把某个进程挂起时,该进程中的所有线程也都将被挂起,激活某个进程时,属于该进程的所有线程也都将被激活。

  • 线程间的同步和通信
    ① 互斥锁,互斥锁是一种比较简单的、用于实现线程间对资源互斥访问的机制。由于操作互斥锁的时间和空间开销较低,因为较适合高频度使用的关键共享数据和程序段。
    ② 条件变量,创建一个互斥锁时便联系着一个条件变量,单纯的互斥锁用于短期锁定,主要用来保证对临界区的互斥进入,条件变量则用于线程的长期等待,直至所等待的资源成为可用的资源。
    ③ 信号量机制,包括私有信号量(同一进程的不同线程需要同步时,可调用创建信号量的命令来创建私有信号量,其数据结构存放在应用程序的地址空间中,私有信号量属于特定的进程所有,OS并不知道私有信号量的存在,当发生私有信号量的占用者异常或正常结束,但并未释放私有信号量所占有的空间的情况时,系统将无法使它恢复为0,也不能将它传送到下一个请求它的线程),公用信号量(其实现不同进程间或不同进程中各线程之间的同步而设置,由所有进程使用,其数据结构放在手保护的系统存储区中,由OS为它分配空间并进行管理,也称为系统信号量,OS会自动回收其空间,其是一种比较安全的同步机制)

原创粉丝点击