第二章_进程管理剖析.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章_进程管理剖析

线程与进程的比较 拥有的资源 进程是拥有资源的一个独立单位,它有权申请系统的各类资源。 线程只有一点必不可少的、能保证其独立运行的资源,可以访问其隶属进程的资源,不能独立申请资源。 线程与进程的比较 调度 在引入线程的OS中,把线程作为调度和分派的基本单位。 线程调度时,由于同一进程内的线程共享进程的资源,其切换是把线程仅有的一小部分资源变换即可,从而提高了系统的效率。线程切换比进程切换快得多。 同一进程中的线程切换不会引起进程切换,但不同进程之间线程切换时,将引起进程上下文的切换。 线程与进程的比较 并发性 进程之间可以并发执行。 同一进程内的多线程也可并发执行 因而操作系统具有更好的并发性,从而更能有效地使用系统资源和提高系统的吞吐量 线程与进程的比较 系统开销 操作系统管理进程的开销显著地大于管理线程的开销 进程切换的开销也远大于线程切换的开销 由于同一进程中的多个线程具有相同的地址空间,使它们之间的同步和通信也比较容易 有些类型的线程切换、同步和通信都无需操作系统内核的干预 线程的类型 线程的类型:用户级线程和内核级线程 用户级线程的创建、撤销及切换等操作全部由支持线程的应用程序完成,内核并不知道线程的存在 一些数据库管理系统,如informix即支持用户级线程。应用程序可以利用线程库来设计多线程程序,该线程库包含各种用于管理用户级线程的例程,如用于创建和撤销线程的例程,用于线程间传递消息和数据的例程、线程调度例程,以及保护和恢复线程上下文的例程等。 线程库 用户空间 内核空间 P ︴ ︴ ︴ 用户级线程 ︴ P :用户级线程 :进程 用户级线程 由于系统内核不知道用户级线程的存在,所以调度是针对进程进行的。 当某进程被调度执行时,线程库就开始工作,可以调用spawn例程派生一个从属于该进程的新线程,并为之建立相应的数据结构。启动线程调度例程,调度该进程中的某个就绪线程来执行,当执行线程需要阻塞等待某事件时,线程被中断,需要保护用户寄存器内容和程序计数器、以及栈指针等上下文信息。 如果进程的时间片还没有用完,线程调度例程继续调度进程中的其它就绪线程。如果需要切换进程,进程内的其它所有线程就不再执行了。 用户级线程 用户级线程阻塞是否会引起整个进程阻塞呢 这要视具体情况而定。当某进程中的一个线程需要等待另一线程的输出数据而阻塞时,整个进程并不会阻塞。即进程保持执行状态,其内的某个线程也是执行状态 当某线程因为I/O阻塞时,内核需要启动系统I/O,控制从用户级转到系统内核级,这时常会引起整个进程阻塞。随即将发生进程切换,进程调度程序重新调度另一个就绪进程执行。 管程 信号量同步的缺点 同步操作分散 易读性差 不便于维护和修改 正确性难以保证 管程的引入 管程是一种在程序设计级控制进程互斥与同步的机制,具有信号量的功能,且更容易使用和控制 目前已有很多程序设计语言支持管程机制,如并发Pascal、Pascal_Plus、Modula-2、Modula-3、Java等,它还被作为一个程序库实现。 利用管程可以锁定任何对象,尤其是链表型数据结构,可以锁定整个链表,或链表中的某个元素。 管程的结构 管程是由过程、变量及数据结构等组成的集合。典型的管程包括三个部分: 局部于管程的共享数据说明; 对共享数据进行操作的一组函数; 对局部于管程的数据设置初始值的语句。 管程有自己的名字,管程中的各个过程可以带有自己的形式参数,与过程调用一样进行参数替换执行 管程的使用 管程本身被作为一种临界区,因此,实现管程时,需要考虑互斥、同步和控制变量等问题 进程可在任何需要的地方通过调用管程中的过程进入管程,但不能在管程外直接访问管程内的数据结构 管程的语法 Monitor monitor_name; /*管程名*/ variabledeclarations; /*共享变量说明*/ voidEntryP1(...) /*对数据结构操作的函数*/ {…} voidEntryP2(...) {…} ┆ voidEntryPn(...) {…} { initializationcode; /*设初值语句*/ } 条件变量? 由于进程阻塞等待的原因有多种,为了区别阻塞等待进程和不同的阻塞队列,管程中设置了不同的条件变量,将因为不同事件阻塞的进程组织在不同的队列中。 条件变量用于区别各种不同的等待原因。其说明形式为:condition:x,y; 同步原语wait 和signal 。 wait使调用

文档评论(0)

1520520 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档