• 1. 操作系统二、进程管理
    • 2. 程序进程管理 程序是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的有序集合。(此处的程序是指包含了线程、进程、程序的抽象概念)(1)顺序执行 顺序性:只有前一操作结束后才能执行后续操作; 封闭性:程序一旦运行,其执行结果不受外界因素的影响; 可再现性:初始条件相同,其结果一定相同。(2)并发执行 失去封闭性 程序和执行不再对应 并发程序间相互制约
    • 3. 操作系统 由于早期的系统(如单道批处理系统)中程序是顺序执行的,然而这种方式浪费资源、系统资源利用率较低,从而出现了多道批处理系统。内存中可以同时装入多个程序,使其共享资源、并发执行。为了能使程序并发执行,并且可以对并发执行的程序加以描述和控制,于是引入了“进程” 进程
    • 4. 进程 进程是程序的一次执行过程。由程序段,数据段,进程控制块PCB三部分组成,这三部分统称为“上下文”。进程和程序的区别: (1)程序是是静态的,本身只是一组有序指令的集合,保存在硬盘上;进程是动态的,是程序的一次执行,有创建有撤销,具备生命周期,存在是暂时的; (2)程序并不能单独执行,只有将程序加载到内存中,系统为他分配资源后才能够执行,这种运行中的程序称之为进程。 (3)进程和程序不是一一对应的:一个程序可对应多个进程(即多个进程可执行同一程序,比如双开QQ);一个进程可以执行一个或几个程序(最典型的例子就是几乎所有程序都需要显卡驱动进程支持)。进程管理
    • 5. 进程的特点1、动态性:进程是程序的一次动态执行过程,由创建而产生,由调度而执行,由撤消而消亡。 2、并发性:引入进程目的就是为了使程序能与其他程序并发执行,以便提高资源利用率。 3、独立性:进程是一个能独立运行的基本单位,是系统进行资源分配和调度的基本单位。 4、异步性:进程运行时各自独立。 5、结构性:进程=PCB(进程控制块)+程序段+数据段进程管理
    • 6. 进程管理进程的状态三态模型 1) 就绪(Ready)状态   当进程已分配到除CPU以外的所有必要资源后,只要再获得CPU,便可立即执行,进程这时的状态称为就绪状态。在一个系统中处于就绪状态的进程可能有多个,通常将它们排成一个队列,称为就绪队列。 2) 运行状态   进程已获得CPU,其程序正在执行。在单处理机系统中,只有一个进程处于执行状态;在多处理机系统中,则有多个进程处于执行状态。3) 阻塞状态   正在执行的进程由于发生某事件而暂时无法继续执行时,便放弃处理机而处于暂停状态,亦即进程的执行受到阻塞,把这种暂停状态称为阻塞状态,有时也称为等待状态或睡眠状态。致使进程阻塞的典型事件有:请求I/O,申请缓冲空间等。
    • 7.  (1) 就绪→执行 处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态转变成执行状态。  (2) 执行→就绪 处于执行状态的进程在其执行过程中,因分配给它的一个时间片已用完而不得不让出处理机,于是进程从执行状态转变成就绪状态。  (3) 执行→阻塞 正在执行的进程因等待某种事件发生而无法继续执行时,便从执行状态变成阻塞状态。  (4) 阻塞→就绪 处于阻塞状态的进程,若其等待的事件已经发生,于是进程由阻塞状态转变为就绪状态。进程的状态三态模型进程管理
    • 8. 进程管理进程的状态 为满足进程控制块对数据及操作的完整性要求、以及增强调度的灵活性,通常再引入两种状态:创建状态和终止状态 创建态对应于进程刚刚被创建的状态。创建一个进程要通过两个步骤, 1. 为一个新进程创建必要的管理信息。 2. 让该进程进入就绪态。 进程的终止也要通过两个步骤, 1. 等待操作系统进行善后。 2. 退出主存,释放内存。五态模型
    • 9. 进程管理进程控制进程控制:就是系统使用一些具有特定功能的程序段来创建、撤销进程以及完成进程各个状态的转换,从而达到多进程高效率并发执行。由系统内核中的原语实现。原语:由若干条机器指令组成、用于完成特定功能的程序段。特点是执行期间不允许被分割。
    • 10. 进程管理进程通信一个盘子,最多能容纳1个苹果,此时盘子为空,父亲负责放苹果,儿子负责从盘子中拿走苹果且只有盘子中有苹果时,儿子才可以拿苹果。 同步与互斥同步:指在并发进程之间存在一种制约关系,一个进程的执行依赖另一个进程的消息,当一个进程没有得到另一个进程的消息时应等待,直到消息到达才被唤醒。 举例:如上,盘中只能放一个苹果,只用父亲放了,儿子才能拿,此时即协作关系(同步)。
    • 11. 进程管理进程通信互斥:指当有若干个进程都要使用某一共享资源时,任何时候最多只允许一个进程去使用该资源,其他要使用它的进程必须等待,直到该资源的占用者释放了该资源。 举例:学校有多台打印机,但此时只有一个打印机处于空闲状态,甲和乙同时想使用,但只能一人先用,直到甲用完,乙才能使用----(互斥) 注意事项: 同步:当有且只有一个资源时。如果同上,盘子中最多可以容纳4个苹果的话即不是同步,因为此时父亲和儿子之间并不相互制约,可以独立操作。 互斥:当仅剩一个资源时。不是说只有一个资源而是仅剩下一个资源,多人要使用时为互斥。
    • 12. 进程管理进程通信信号量机制用信号量及PV操作来实现进程的同步和互斥。什么是信号量? 信号量的数据结构为一个值和一个指针。 指针指向等待该信号量的下一个进程。 信号量的值与相应资源的使用情况有关。 当它的值S>=0时,表示当前可用资源的数量; 当它的值S<0时,其绝对值表示等待使用该资源的进程个数。 注意,信号量的值仅能由PV操作来改变。
    • 13. 进程管理进程通信PV操作 PV两个字母是荷兰文 Passeren(通过),Vrijgeven(释放)的简称。     P操作(申请资源):将信号量S减去1,若结果小于0,则把调用P操作的进程置成等待信号量的状态(阻塞)。     V操作(释放资源):将信号量加1,若结果不大于0,则释放一个等待信号量S的进程。     原语:PV操作是低级通信原语,说明原子性,即不可拆分的整体。
    • 14. 进程管理进程通信同步与互斥 PV操作举例说明:一个盘子,最多能容纳1个苹果,此时盘子为空,父亲负责放苹果,儿子负责从盘子中拿走苹果且只有盘子中有苹果时,儿子才可以拿苹果。设:S1=1,S2=0(即盘子中没有苹果,父亲可以放,儿子不能拿)
    • 15. 进程管理进程通信同步与互斥父:  P操作(申请资源,查看自己是否能放苹果)       S1=S1-1; S1=0;       V操作(通知儿子盘子里有苹果,可以来拿)       S2=S2+1; S2=1; 子: P操作:(查看自己能不能拿苹果)      S2=S2-1; S2=0;      V操作:(通知父亲又可以来放苹果)      S1=S1+1; S1=1;  注意事项:       PV操作是同时存在的(有P必有V)。 P操作和V操作的绝对值相加等于盘子的最大容量。
    • 16. 进程管理进程通信同步与互斥 本质上父亲和儿子都是对盘子来操作,我们使用PV算法,将信号量S分成S1和S2。 S1表示的是父亲看盘子的状态,S2表示的是儿子看盘子的状态。 其实他们两者都是看盘子的状态是否能满足自身的需求,只是父亲和儿子的看法是对立的。 父亲认为盘子中没有苹果,我可以工作,儿子认为盘子中有苹果,我才可以工作。 这样我们分别设S1和S2,使得父亲和儿子只需观察自己的信号量是否得到满足,不必考虑对方,这样减少了复杂的联系.
    • 17. 进程管理进程通信理解信号量与PV操作信号量的作用: (1)控制共享资源的使用权(满足互斥条件); (2)使两个或两个以上的进程的行为同步。 信号量的实质: 像是一把钥匙,进程要运行下去,需要先拿到这把钥匙,通俗点来讲就是在允许的信号量下,进程才能够执行。
    • 18. 进程管理进程通信信号量如何做到线程同步? 比如当前信号量为-1,进行P操作,信号量为-2,说明没有得到资源,线程等待,取值为-2,说明当前有两个进程等待资源。 这个时候,如果有其他线程进行V操作,释放了资源,信号量加1,为-1,信号量通知等待的进程中,第一个进程继续执行,第二个进程继续等待。 理解信号量与PV操作
    • 19. 进程管理进程通信 P操作:减1后,信号量S<0,说明没有资源,进程进入信号量等待状态。 进程继续执行的情况有两种: a、减1后,信号量S>=0,不需等待,直接执行; b、信号量S<0,进程等待中。如果有其他人进行了V操作,释放出一个资源,则通知这个线程(等待队列中排第一)继续执行。 V操作: 信号量S=S+1,如果S>=0,说明没有等待的进程,那么不用执行唤醒等待进程的操作(因为压根就没有等待进程); 如果S<0,说明有等待的进程,执行唤醒等待进程的操作。 当信号量最大为1,发生线程互斥现象。理解信号量与PV操作
    • 20. 进程管理进程通信P操作(申请资源):S=S-1 信号量S>=0, 还有资源供使用,信号量值减1,任务继续运行; 信号量S<0,没有资源了,等待信号量的进程被列入等待信号量进程列表。 可以理解为: if ( (s = s - 1) >= 0 ) 继续执行本进程; else 挂起本进程/本进程等待; end理解信号量与PV操作
    • 21. 进程管理进程通信理解信号量与PV操作V操作(释放资源):S=S+1 若S>0,表明没有进程等待资源; 若S<=0,表明有进程等待资源,等待队列中优先级最高的进程获得资源,并执行。 可以理解为: if ( (s = s + 1) >0 ) 没有等待进程; else 有等待进程,唤醒队列中优先级最高的等待进程; end
    • 22. 进程管理用PV操作实现多进程的同步与互斥是非常简单的,只要考虑逻辑处理上合理严密,而不用考虑具体技术细节。比如有多个进程P1、P2、 ……PN,它们要互斥的访问一个资源。用PV操作来实现就非常方便直观。下面是PV操作代码: 设置信号量为S,初值为1。各进程的操作流程如下: 进程P1 进程P2 …… 进程Pn P(S); P(S); P(S); 访问资源; 访问资源; 访问资源; V(S); V(S); V(S); 可以看出PV操作会忽略具体的编程细节,让程序员的主要精力放在进程同步互斥的逻辑处理上。因此,通过练习PV操作能快速有效提高程序员对多进程的逻辑思维能力,达到强化“内功”的目的。进程通信理解信号量与PV操作
    • 23. 进程管理一些疑问(1)S>0表示有临界资源可供使用,为什么不唤醒进程?(V操作) S大于0的确表示有临界资源可供使用,也就是说这个时候没有进程被阻塞在这个资源上,所以不需要唤醒。 (2)S<0表示没有临界资源可供使用,为什么还要唤醒进程?(V操作) V原语操作的本质在于:一个进程使用完临界资源后,释放临界资源,使S加1,以通知其它的进程,这个时候如果S<0,表明有进程阻塞在该类资源上,因此要从阻塞队列里唤醒一个进程来“接手”该类资源。 比如,有两个资源,四个进程A、B、C、D要用该类资源,最开始S=2,当A进入,S=1。当B进入S=0,表明该类资源刚好用完。当C进入时S=-1,表明有一个进程被阻塞了。D进入,S=-2。当A用完该类资源时,进行V操作,S=-1,释放该类资源。因为S<0,表明有进程阻塞在该类资源上,于是唤醒一个。
    • 24. 进程管理一些疑问(3)如果是互斥信号量的话,应该设置信号量S=1。当有5个进程都访问的话,最后在该信号量的等待队列里会有4个在等待,也是说S=-4。如果第一个进程执行了V操作使S加1,释放了资源,下一个应该能够执行,但唤醒的这个进程在执行P操作时因S<0,也还是执行不了,这是怎么回事呢? 当一个进程阻塞了的时候,它已经执行过了P操作,并卡在临界区那个地方。当唤醒它时就立即进入它自己的临界区,并不需要执行P操作了,当执行完了临界区的程序后,就执行V操作。
    • 25. 进程管理一些疑问(4)S的绝对值表示等待的进程数,同时又表示临界资源,这到底是怎么回事? 当信号量S小于0时,其绝对值表示系统中因请求该类资源而被阻塞的进程数目。S大于0时表示可用的临界资源数。当等于0时,表示资源刚好用完。注意在不同情况下所表达的含义不一样。
    • 26. 进程管理PV操作实例第一题 放水果(南京大学计算机考研真题) 桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。 先考虑同步情况即所有“等待”情况: 第一、爸爸要等待盘子为空。 第二、儿子要等待的盘中水果是桔子。 第三、女儿要等待的盘中水果是苹果。 接下来考虑要互斥处理的资源,看起来盘子好像是要作互斥处理的,但由于题目中的爸爸、儿子、女儿均只有一个,并且他们访问盘子的条件都不一样,所以他们根本不会同时去访问盘子,因此盘子也就不用作互斥处理了。
    • 27. 进程管理PV操作实例 先设置三个信号量,信号量Orange表示盘中是否有桔子,初值为0。信号量Apple表示盘中是否有苹果,初值为0。信号量EmptyDish表示盘子是否为空,初值为1。三个人的操作流程如下所示:1.爸爸 P(EmptyDish) if (rand()%2==0) { 放桔子 V(Orange) } else { 放苹果 V(Apple) }2.儿子 P(Orange) 取桔子 V(EmptyDish)3.女儿 P(Apple) 取苹果 V(EmptyDish)
    • 28. 进程管理PV操作实例第二题 安全岛(南开大学考研真题) 在南开大学至天津大学间有一条弯曲的路,每次只允许一辆自行车通过,但中间有小的安全岛M(同时允许两辆车),可供两辆车在已进入两端小车错车,设计算法并使用P,V实现。 同步:(考虑所有“等待”情况)进入通道之前都需要等待在岛上的位置,有位置才可以进入。 互斥:两个路段K、L都需要互斥。
    • 29. 进程管理PV操作实例用信号量M来记录安全岛M上空位个数,初值为2。每个进入道路前的人都要先预订安全岛上的空位,订到后再互斥的进入道路。否则就要等待安全岛上有空位。信号量K和L表示道路,初值均为1。然后从N到T的车和从T到N的车的行驶流程如下:从N到T的车 从T到N的车 P(M) P(M) P(K) P(L) 由N到M 由T到M V(K) V(L) P(L) P(K) V(M) V(M) 由M到T 由M到T V(L) V(K)
    • 30. 进程管理PV操作实例PV操作的总结 1.在多线程编程中使用PV操作能忽略代码具体的实现细节,这样确保总体思路的正确性。 2.分析PV操作时紧紧抓住同步和互斥。 同步主要分析:谁在等待?等待什么?分析清楚了,同步就出来了; 互斥主要分析:哪些资源是共享的、唯一的,然后进一步思考会不会产生互斥,比如放水果问题中果盘是共享资源,但是果盘操作并不会产生互斥;
    • 31. 进程管理进程通信根据进程通信时信息量大小的不同,可以将进程通信划分为两大类型:控制信息的通信(低级通信)和大批数据信息的通信(高级通信)。 低级通信主要用于进程之间的同步、互斥、终止和挂起等等控制信息的传递。 高级通信主要用于进程间数据块数据的交换和共享,常见的高级通信有管道、消息队列、共享存储、套接口(socket){可用于不同机器之间的进程间通信}等。进程通信分类
    • 32. 进程管理进程通信 (1)共享存储。指两个或多个进程共享一个给定的存储区或数据结构。最快的方法。 (2)消息传递。不借助任何共享存储区或数据结构,而是以格式化的消息为单位,将通信的数据封装在消息中,并利用操作系统提供的一组通信命令(原语),在进程间进行信息传递,完成进程间的数据交换。 (3)管道通信。所谓“管道”,是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件。向管道(共享文件)提供输入的发送进程(即写进程)以字符流形式将大量的数据送进管道;而接受管道输出的接受进程(即读进程)则从管道中接收(读)数据。进程通信分类高级通信分类:
    • 33. 进程管理进程通信Send(A, message) 发送消息到信箱A Receive(A, message) 从信箱A接受消息 其中消息传递模式可分为直接通信和间接通信。系统为进程提供了两个高级通讯原语send和receive。 (1)直接通信 发送进程发消息时要指定接收进程的名字,反过来,接收时要指明发送进程的名字。 Send(receiver,message) 给指定进程发送消息 Receiver(sender,message) 从约定进程接收消息 (2)间接通信 发送进程发消息时不指定接收进程的名字,而是指定一个中间媒介,即信箱或端口。进程间通过信箱或端口实现通信。 进程通信分类
    • 34. 进程管理死锁是进程死锁的简称,是指多个进程循环等待它方占有的资源而无限期地僵持下去的局面。由Dijkstra于1965年研究银行家算法时首先提出来的。它是计算机操作系统乃至并发程序设计中最难处理的问题之一。在计算机系统中,软件、硬件资源都可能发生死锁。例如:系统中只有一台CD-ROM驱动器和一台打印机,某一个进程占有了CD-ROM驱动器,又申请打印机;另一进程占有了打印机,还申请CD-ROM。结果,两个进程都被阻塞,永远也不能自行解除。进程通信死 锁
    • 35. 进程管理(1)竞争资源 当系统中供多个进程共享的资源如打印机、公用队列等,其数目不足以满足诸进程的需要时,会引起诸进程对资源的竞争而产生死锁。 (2)进程推进顺序不当 进程在运行过程中,请求和释放资源的顺序不当(PV操作不当),也同样会导致产生进程死锁。产生死锁的原因进程通信
    • 36. 进程管理产生死锁的必要条件 如果在计算机系统中同时具备下面四个必要条件时,那麽会发生死锁。换句话说,只要下面四个条件有一个不具备,系统就不会出现死锁。 (1)互斥条件。即某个资源在一段时间内只能由一个进程占有,不能同时被两个或两个以上的进程占有。这种独占资源如CD-ROM驱动器,打印机等等,必须在占有该资源的进程主动释放它之后,其它进程才能占有该资源。这是由资源本身的属性所决定的。如独木桥就是一种独占资源,两方的人不能同时过桥。 (2)不可剥夺条件。进程所获得的资源在未使用完毕之前,资源申请者不能强行地从资源占有者手中夺取资源,而只能由该资源的占有者进程自行释放。如过独木桥的人不能强迫对方后退,也不能非法地将对方推下桥,必须是桥上的人自己过桥后空出桥面(即主动释放占有资源),对方的人才能过桥。进程通信
    • 37. 进程管理 (3)占有且请求条件。进程至少已经占有一个资源,但又申请新的资源;由于该资源已被其他进程占有,此时该进程阻塞;但是,它在等待新资源之时,仍继续占用已占有的资源。还以过独木桥为例,甲乙两人在桥上相遇。甲走过一段桥面(即占有了一些资源),还需要走其余的桥面(申请新的资源),但那部分桥面被乙占有(乙走过一段桥面)。甲过不去,前进不能,又不后退;乙也处于同样的状况。 (4)循环等待条件。存在一个进程等待序列{P1,P2,...,Pn},其中P1等待P2所占有的某一资源,P2等待P3所占有的某一源,......,而Pn等待P1所占有的的某一资源,形成一个进程循环等待环。就像前面的过独木桥问题,甲等待乙占有的桥面,而乙又等待甲占有的桥面,从而彼此循环等待。死锁的预防:只要确保至少有一个必要条件不成立,就能预防死锁发生。进程通信产生死锁的必要条件
    • 38. 进程管理进程调度三级调度 1) 高级调度。又称作业调度。其主要任务是按一定的原则从外存上处于后备状态的作业中挑选一个(或多个)作业,并做好运行的准备,成为一个或多个就绪进程。对于每个作业只调入一次、调出一次。 2) 中级调度。又称内存调度。引入中级调度是为了提高内存利用率和系统吞吐量。为此,应使那些暂时不能运行的进程,调至外存等待,把此时的进程状态称为挂起状态。把外存上的那些已具备运行条件的就绪进程,再重新调入内存,并修改其状态为就绪状态,挂在就绪队列上等待。 3) 低级调度。又称为进程调度。其主要任务是按照某种方法和策略从就绪队列中选取一个进程,将处理机分配给它。进程调度是操作系统中最基本的一种调度,在一般操作系统中都必须配置进程调度。进程调度的频率很高,一般几十毫秒一次。
    • 39. 进程管理进程调度 一般情况下,用户进程数都多于处理机数。这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。进程调度虽然是在系统内部的低级调度,但进程调度的优劣直接影响作业调度的性能。三级调度
    • 40. 进程管理进程调度(1)不可剥夺方式。分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生。不可剥夺式即不可抢占式non_preemptive,即使在就绪队列存在有优先级高于当前执行进程时,当前进程仍将占用处理机,直到该进程自己因调用原语操作或等待I/O而进入阻塞、睡眠状态,或时间片用完时,才重新发生调度让出处理机。 (2)可剥夺方式。当一个进程正在运行时,系统可以基于某种原则,剥夺已分配给它的处理机,将之分配给其它进程。剥夺原则有:优先权原则、短进程优先原则、时间片原则。可剥夺式即可抢占式preemptive,就绪队列中一旦有优先级高于当前执行进程优先级的进程存在时,便立即发生进程调度,转让处理机。进程调度方式
    • 41. 进程管理进程调度(1)先来先服务(FIFS) 进程调度总是把处理机分配给最先进入就绪队列的进程。刚进入就绪队列的进程排在队尾,每次调度总是从就绪队列中,选择队首进程为之分配处理机。该进程一直运行到完成或发生阻塞后,才让出处理机。 特点:算法简单,但是效率低;有利于长作业,不利于短作业;有利于CPU繁忙型作业而不利于I/O繁忙型作业。(2)时间片轮转(RR) 时间片轮转调度算法主要适用于分时系统。该算法采用可剥夺策略,处于执行状态的进程时间片用完后即被剥夺CPU的使用权,并排到就绪队列的末尾。包括固定时间片与可变时间片两种模式。进程调度算法
    • 42. 进程管理进程调度(4)多级反馈 将时间片轮转与优先级调度相结合,把进程按优先级分成不同的队列,先按优先级调度,优先级相同的,按时间片轮转。优点是兼顾长短作业,有较好的响应时间,可行性强,适用于各种作业环境。(3)优先级(HPF) 在进程等待队列中选择优先级最高的来执行。包括静态优先级与动态优先级。最高优先权可在进程创建时设定,并在进程的生存期内保持不变;也可在进程创建时给一个初值,随进程的推进或随其等待时间的增加而改变。前者称为静态优先权,后者称为动态优先权。进程调度算法
    • 43. 进程管理进程与线程对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就启动了一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程,打开一个Word就启动了一个Word进程。 许多进程还不止同时干一件事,比如Word,它可以同时进行打字、拼写检查、打印等事情。在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”称为线程(Thread)。线程的引入进程让操作系统的并发性成为可能,而线程让进程的内部并发成为可能。进程是操作系统进行资源分配的基本单位,而线程是操作系统进行调度的基本单位。
    • 44. 进程管理 一个加盟店就相当于一个进程;店面租金、物业费、水电费等相当于系统资源;不同类型的工作分别对应一个线程。 如果店里只有一个服务员(单线程进程),那么他需要逐项完成点餐、收银、准备食物、发放食物、清洁等工作,同时还要接电话送外卖,肯定会忙得焦头烂额,而且效率低下。 如果有多个服务员分别负责一种工作(多线程),并行提供服务,效率将显著提高。 如果把其中的一项可分离业务(外卖)分离出来,那么需要再开一个外卖店(多进程)。 进程内每个线程均共享进程拥有的资源,增加线程不会增加资源消耗,而增加进程将增加系统资源消耗。进程与线程例子一:肯德基快餐服务
    • 45. 进程管理例子二:工厂进程与线程计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。
    • 46. 进程管理进程与线程例子二:工厂 假定工厂的电力有限,一次只能供给一个车间使用。也就是说,一个车间开工的时候,其他车间都必须停工。背后的含义就是,单个CPU一次只能运行一个任务。
    • 47. 进程管理进程与线程例子二:工厂 进程就好比工厂的车间,它代表CPU所能处理的单个任务。任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。
    • 48. 进程管理进程与线程例子二:工厂一个车间里,可以有很多工人。他们协同完成一个任务。
    • 49. 进程管理进程与线程例子二:工厂线程就好比车间里的工人。一个进程可以包括多个线程。
    • 50. 进程管理进程与线程例子二:工厂 车间的空间是工人们共享的,比如许多房间是每个工人都可以进出的。这象征一个进程的内存空间是共享的,每个线程都可以使用这些共享内存。
    • 51. 进程管理进程与线程例子二:工厂 可是,每间房间的大小不同,有些房间最多只能容纳一个人,比如厕所。里面有人的时候,其他人就不能进去了。这代表一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。
    • 52. 进程管理进程与线程例子二:工厂 一个防止他人进入的简单方法,就是门口加一把锁。先到的人锁上门,后到的人看到上锁,就在门口排队,等锁打开再进去。这就叫"互斥锁"(Mutual exclusion,缩写 Mutex),防止多个线程同时读写某一块内存区域。
    • 53. 进程管理进程与线程例子二:工厂 还有些房间,可以同时容纳 n 个人,比如厨房。也就是说,如果人数大于 n ,多出来的人只能在外面等着。这好比某些内存区域,只能供给固定数目的线程使用。
    • 54. 进程管理进程与线程例子二:工厂 这时的解决方法,就是在门口挂n把钥匙。进去的人就取一把钥匙,出来时再把钥匙挂回原处。后到的人发现钥匙架空了,就知道必须在门口排队等着了。这种做法叫做"信号量",用来保证多个线程不会互相冲突。 不难看出,互斥是同步的一种特殊情况(n=1时)。也就是说,完全可以用后者替代前者。但是,因为互斥较为简单,且效率高,所以在必须保证资源独占的情况下,还是采用这种设计。
    • 55. 进程管理进程与线程操作系统的进程管理,因此可以归结为三点: (1)以多进程形式,允许多个任务同时运行; (2)以多线程形式,允许单个任务分成不同的部分运行; (3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。

    该用户的其他文档