操作系统简明教程PPT第2章.ppt_第1页
操作系统简明教程PPT第2章.ppt_第2页
操作系统简明教程PPT第2章.ppt_第3页
操作系统简明教程PPT第2章.ppt_第4页
操作系统简明教程PPT第2章.ppt_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

,1,2.5 线程 2.5.1 线程的引入 进程作为一个独立运行的基本单位只有进程可以被调度运行,只有进程才能拥有资源。 分配、回收、切换时空开销 为使进程的程序充分并发执行,同时能尽量减少系统的开销,新想法 进程调度运行和拥有资源这两个基本运行单位的属性分开,让进程拥有资源,而让一个新的实体作为调度运行的基本单位。,2,随着并行技术、网络技术和软件设计技术的发展,给并发程序设计效率带来了一系列新的问题,主要表现在: 进程时空的开销大,频繁的进程调度将耗费大量处理器时间,要为每个进程分配存储空间限制了操作系统中进程的总数。 进程通信的代价大,每次通信均要涉及通信进程之间或通信进程与操作系统之间的信息传递。 进程之间的并发性粒度较粗,并发度不高,过多的进程切换和通信延迟使得细粒度的并发得不偿失。 不适合并行计算和分布并行计算的要求,对于多处理器和分布式的计算环境来说,进程之间大量频繁的通信和切换,会大大降低并行度。 不适合客户/服务器计算的要求。对于C/S 结构来说,那些需要频繁输入输出并同时大量计算的服务器进程(如数据库服务器、事务监督程序)很难体现效率。,3,在引入线程的操作系统中,将进程看作资源集合与线程集合的复合体。 进程拥有资源,属于同一个进程的所有线程可以共享这些资源。此外,每个线程仅有较少的私用资源,如程序计数器、寄存器和栈等。 每一个线程是一个动态对象,它表示进程中的一条控制线索,执行一系列指令操作,是一个相对独立的、可被调度运行的基本单位。,4,在进程的地址空间中可以有多个线程,它们可以并发执行, 这就需要一张单独的表来记录线程控制与管理等信息,这张表称为线程控制表TCB。 其中,每个线程占一项,以记录线程的程序计数器、寄存器的值及状态等信息。 程序计数器可以使线程像进程一样被暂停执行和恢复执行,寄存器的值等可以保存线程暂停执行时的CPU状态。,5,线程由创建而产生,由撤消而消亡,在生命期间,线程可以处于就绪状态、执行状态和阻塞状态三个基本状态中。 这三个基本状态也像进程一样,会发生变迁,如就绪状态执行状态,执行状态阻塞状态,阻塞状态就绪状态等。,6,2.5.2 线程的类型 系统如何感知线程的存在? 线程在用户空间还是在系统空间。 不同类型的线程有着不同的属性和使用方法,三种主要的线程类型: 1内核线程 2轻量级进程LWP 3用户线程,7,1内核线程 一个内核线程可以独立工作,不需要与一个用户进程联系起来。 创建与回收 负责 共享什么,具有什么? 调度与同步? 开销与使用资源? 运行在系统空间线程表,8,2轻量级进程LWP 一个轻量级进程LWP是一个内核支持的用户线程,运行在用户空间。 内核线程基础上的高层抽象,因此 每个进程可以有一个或多个轻量级进程LWP,用户进程通过轻量级进程LWP与内核通信,每一个轻量级进程LWP都由一个单独的内核线程支持 可以被调度并且共享所属进程的地址空间和其它资源,9,它们可以对I/O设备或其它资源进行系统调用,同时也能在I/O操作或资源访问时被阻塞。 除了内核堆栈和寄存器外,轻量级进程LWP也需要维护一些用户状态,主要包括用户寄存器上下文,当轻量级进程LWP被抢占CPU时这些内容必须保存下来,以便保证下次调度运行的正确进行。 为了节省系统开销,多个用户进程可以多路复用一个轻量级进程LWP,但是只有连接到轻量级进程LWP的进程,才能与内核通信。,10,进程、轻量级进程LWP及内核线程关系图,11,3用户线程 用户线程运行在用户空间,内核无需也无法感知它。每个用户线程仅需一个栈和程序计数器PC, 切换速度快。当一个用户线程被阻塞时, 它在停止之前选择并启动它的后继线程。 用户线程的实现是可能的,因为用户线程的上下文可以在没有内核干预的情况下被保存和恢复。每一个用户线程有自己的用户堆栈,一块用来保存用户级寄存器上下文以及如信号屏蔽等状态信息的内存区域。通过保存当前线程的堆栈和寄存器内容,以及装入新调度线程的那些堆栈和寄存器内容,可实现用户线程间的调度和上下文的切换。,12,内核仍然负责进程的切换,因为只有内核具有修改内存管理寄存器的权力。用户线程不是真正地可以调度的实体,内核没有保留它们的一点信息,内核只是简单地调度它们下面的进程,这些进程再使用库函数来调度它们的线程。当进程被抢占时,它们的线程也被抢占。,13,普通进程上的用户线程,14,2.5.3 线程与进程的比较 在引入了线程的操作系统中,一个进程除拥有资源外,还包括一个或多个线程。下面将进程与线程做一比较: 1调度 拥有资源的基本单位和独立调度运行的基本单位的变化? 线程的调度?,15,2并发 在引入线程的操作系统中,不仅进程之间可以并发执行,而且属于同一个进程的多个线程之间也可以并发执行,因而使系统具有更好的并发性,可以更有效地使用系统资源和提高系统的吞吐量。 3拥有资源 无论是传统的操作系统,还是引入线程的操作系统,进程都是拥有资源的一个独立单位,而线程仅拥有很少的一些私有资源(如程序计数器、寄存器和栈、线程表项等),但是它可以访问所属进程的所有资源。,16,4开销 在进程创建和进程撤消时,系统所付出的开销大于创建线程和撤消线程的开销。 进程切换的开销远远大于线程切换的开销。此外,由于同一进程的多个线程具有相同的地址空间,使得它们之间的同步和通信也变得比较容易实现。,17,注意:将线程引入操作系统后,设计人员必须选择正确的内核线程和用户线程设计方法,而无论选择哪种方法都有一些必须解决的问题,例如: (1) 父、子进程是否有同样的线程? 如果父、子进程具有相同的线程,父、子进程两者中有一个的线程阻塞时,另一个的相应线程是否也应该阻塞?,18,(2) 共享数据结构。 当一个线程关闭一个文件时,另一个线程在读该文件,后果如何? 若一个线程内存不够申请时,切换发生,新运行线程内存不够也要申请,那么是申请一次还是两次?,19,(3) 堆栈等问题。 当一个进程有多个线程时,它必须有多个堆栈。如果核心无法感知这些堆栈,则发生堆栈故障时它不能自动扩展,实际上它甚至可能意识不到内存故障与堆栈增长有关。 结论:引入线程的操作系统是需要重新设计的,但要注意兼容性,以保证现存的只有一个线程的进程的可用性。,20,多线程技术在现代计算机软件中得到了广泛的应用,取得了较好的效果。下面举 例说明多线程技术的一些主要应用: 前台和后台工作。如在一个电子表格软件中,一个线程执行显示菜单和读入用户输入,同时,另一个线程执行用户命令和修改电子表格。 C/S 应用模式。局域网上文件(网络)服务器处理多个用户文件(任务)请求时,创建多个线程,若该服务器是多CPU 的,则同一进程中的多线程可以同时运行在不同CPU 上。,21,加快执行速度。一个多线程进程在计算一批数据的同时,读入设备(网络、硬盘)上的下一批数据,而这分别由两个线程实现。 异步处理。程序中的异步成分可用线程实现,例如,为避免掉电带来损失,可把文字编辑器设计成周期性把内存缓冲内容写入到磁盘中。可以创建一个线程完成周期性写盘任务,该线程由操作系统调度,并不需要应用进程提供代码来做检查或输入输出。 设计用户接口。每当用户要求执行一个动作时,就建立一个独立线程来完成这项动作。当用户要求有多个动作时,就由多个线程来实现,窗口系统应有一个线程专门处理鼠标的动作。例如,GUI 中,后台进行屏幕输出或真正计算;同时,要求对用户输入(鼠标)做出反映。有了多线程,可同时运行GUI输入线程和后台计算线程,便能实现这一功能。,22,2.6 死 锁 混乱一个操作系统应该保证一个进程具有独立访问某个资源的能力。 但需独占的资源不只一种 两进程 IO设备 记录加锁 相互申请对方尚未产生的消息 系统中存在各种进程被阻塞而且不能解除的情况,通称为死锁,软、硬件资源的申请都可能导致死锁。,23,死锁是指一种僵局:在系统运行的某一时刻,当一组进程中的某个进程提出资源请求或者彼此通信时,使得此组进程在无外力作用下永远不能再向前推进,此时称这组进程处于死锁状态。 死锁的多数情况? 若这种情况只存在于部分进程中,称系统发生了局部死锁;若系统中所有进程都出现了这种情况,则称系统发生了全局死锁。,24,2.6.2 死锁的类型 在计算机系统中发生死锁,与资源有关的情况居多,下面进行具体分析。 1资源 两大类: 可剥夺资源 CPU、内存等 不可剥夺资源 打印机、磁带机等。 死锁与不可剥夺资源有关。涉及可剥夺资源的死锁通过在进程间重新分配资源,通常能够化解。所以,我们将重点放在对不可剥夺资源的处理上。,25,在系统中,对于一个资源的使用过程通常有以下几步: (1) 申请资源; (2) 获得资源; (3) 使用资源; (4) 释放资源。 通常,当进程申请资源失败时,将申请资源的进程阻塞,在资源可用时再将其唤醒,这种方法使用得较多。也可以返回一个错误码,由申请进程等候一段时间后再重新申请。,26,2竞争资源引起死锁,27,o、q、r、s、t o、q、r、s、n、u o、q、r、v、w、m、u,28,3进程通信引起死锁,P1:请求S3,产生S1; P2:请求S1,产生S2; P3:请求S2,产生S3;,P1:产生S1,请求S3; P2:产生S2,请求S1; P3:产生S3,请求S2,29,2.6.3 死锁发生的条件 Coffman等人(1971)总结死锁产生的必要条件如下: (1) 互斥条件:一个资源在某一时刻只能分配给一个进程。若一个进程申请某资源时,该资源被另一进程占用,则申请者等待,直到占有者释放该资源时才可能获得。 (2) 请求与保持条件:进程在占用部分资源后,运行时还可以申请其余的资源,而且在申请其余资源时并不释放已占用的资源。,30,(3) 非剥夺条件:已分配给进程的资源不可被剥夺,只能被占有者自行释放。 (4) 循环等待条件:系统中存在着一条由两个或两个以上的进程组成的循环链,链中的每个进程都在等待相邻进程已占用的资源。 以上是死锁产生的必要条件,要想预防死锁发生,只需设法破坏其中的任何一条或几条即可。,31,2.6.4 解决死锁的方法 解决死锁的方法通常有以下几种: 忽略死锁:对于死锁不作任何处理; 假如系统中不允许死锁发生,通常有两种解决办法: 静态解决办法: 系统事先采取措施,对进程申请资源的要求加以限制,即预防死锁,使得死锁没有条件发生。 动态解决办法:在进程运行过程中提出资源申请时,系统加以检测,决定是否分配资源,即避免死锁。 假如系统中允许发生死锁,则需检测死锁是否发生,并在死锁发生时加以解除。,32,1鸵鸟算法 鸵鸟算法比喻对死锁视而不见,像鸵鸟一样。 解决死锁问题往往代价很大,还常常会给用户带来许多限制。大多数用户宁可在很偶然的情况下发生死锁,也不愿在工作时处处受到限制,因此多数用户会选择方便性而忽视系统对极少发生的死锁问题的解决。,33,2预防死锁 1) 限制“互斥条件” 不易有解决方案。 2) 限制“请求与保持条件” 只要禁止已拥有资源的进程再申请其它资源,就可以消除死锁。 一种实现方法是:当所需资源全部可以使用时方可进行分配 另一种方案是:当新的资源申请成功时,才收回其原先占用的资源。,34,3) 限制“非剥夺条件” 只能对系统中的一部分资源采用这种方法。 4) 限制“循环等待条件” 一个方案是:如果要申请第二个资源,它必须先释放第一个资源。 另一个方案是:把资源分类按顺序排列,使进程在申请、保持资源时不形成环路。如有m种资源,则列出R1R2Rm。若进程Pi保持了资源Ri,则它只能申请比Ri级别更高的资源Rj(RiRj).释放资源时必须是Rj先于Ri被释放,从而避免环路的产生。,35,3避免死锁 安全状态及不安全状态? 如果能够找到某种顺序,按照这种顺序为进程分配资源时,进程都能够完成,则称该状态为安全状态,否则为不安全状态。 关键问题是找到为进程分配资源的顺序,即安全序列,系统按这个序列为进程分配资源,将不会引起死锁,否则就可能引起死锁。,36,Dijkstra于1965年提出一种能够避免死锁的调度算法,称为银行家算法。该算法基于银行家能否向客户贷款及收回贷款的考虑。一个银行家可以向多个客户承诺贷款,客户提出自己最大的贷款额后,银行家只需准备一定的贷款额,因为客户们不太可能同时需要最大的贷款额。当一个客户提出贷款时,银行家需要检查: (1) 当前银行是否有这么多金额? (2) 该客户的请求是否超出其最大贷款额? (3) 假如满足这个客户的要求,将贷款给他,对剩余贷款额设法找到一个序列,依次满足各个客户贷款请求,各个客户完成所做事情并归还贷款,银行资金才能周转。关键问题是能否找出一个满足所有客户要求贷款的序列。,37,上述条件都具备时,银行家就可以满足这个客户提出的贷款请求,否则不予满足。 这就是银行家算法。对于(3)中:找出一个满足所有客户要求贷款的序列,这个序列称为安全序列。检查是否存在安全序列的过程称为安全性算法,这是银行家算法的核心。 需要注意的是安全序列并不惟一,这与所有采用的查找顺序算法有关。,38,1) 单资源的银行家算法 进程申请系统的某种资源时,一次可以申请多个,为了避免死锁,可以采用单资源的银行家算法。执行前,各进程给出最大的资源需求,执行中,进程已分配资源与尚需资源之和就是最大的资源需求。 例:假设系统有某种设备12台,在T0时刻,进程需求与分配情况如下:,39,P2、P1、P3序列,40,在T0状态下,P3申请分配1台设备?,死锁!,41,2) 多资源的银行家算法 进程申请系统的多种资源,并且每种资源可以申请多个时,为了避免死锁,可以采用多资源的银行家算法。每个进程在执行前给出对各种资源的最大需求。,42,算法中的数据结构: 进程尚需资源矩阵Sm,n:矩阵S中每一行表示某进程对系统中各种资源的需求,初值为进程在执行前给出的对各种资源的最大需求。 进程已分配资源矩阵Fm,n:矩阵F中每一行表示某进程已分配的每种资源的个数。 系统可用资源向量A:其中每个元素表示某种资源当前可以使用的个数。 进程Pi用资源请求向量Ri提出资源请求,其中Ri的每个元素表示进程在当前时刻请求某种资源的个数。,43,多资源银行家算法,44,图2-54 安全性算法,45,4死锁的检测 在允许发生死锁的系统中,必须有对死锁进行检测的方法。死锁的检测通常是定时进行的,时间间隔的选择很重要。 1) 资源分配图 资源分配图中有圆形及方框两类节点,圆形表示进程,方框表示资源。 2) 死锁定理 资源分配图的简化过程: 不孤立、不阻塞、孤立点 完全简化、不可完全简化,46,图2-55 一个资源分配图的简化过程,47,图2-56 一个资源分配图,48,49,死锁定理: 一种资源分配状态为死锁状态的充要条件是:当且仅当S状态的资源分配图是不可完全简化的。 用死锁定理来检测图2-50,显然该图是不可完全简化的,会发生死锁。 资源分配图的简化过程本质上与银行家算法中的安全性算法是一致的。在银行家算法中,安全序列有可能不是惟一的,类似地,资源分配图的简化过程也可能不是惟一的。,50,5死锁的解除 在允许发生死锁的系统中,当检测到死锁时,应设法解除死锁。 解除死锁的一种方案是从其它进程剥夺资源给死锁进程,直至死锁解除。当然,系统必须付出一定代价。 另一种方案是撤消进程。撤消部分进程,可使死锁得以解除。撤消进程时,可选择代价最小的方案,也可以将全部死锁进程撤消,这种方案会使系统付出很大代价。,51,2.8操作系统接口 用户接口操作系统中实现用户与计算机系统之间进行交互作用和通信的部分 分类: 命令接口 程序接口 图形接口,52,2.8.1 命令接口 2.8.2 程序接口 程序接口是操作系统专门为用户程序设置的,是用户程序取得操作系统服务的惟一途径。程序接口通常由各种各样的系统调用组成。,53,1.基本概念 通常在操作系统的核心中都设置了一组用于实现各种系统功能的子程序(过程),并将它们提供给用户程序调用。 每当用户在程序中需要操作系统提供某种服务时,便可利用一条系统调用命令去调用相应的系统过程。 系统调用本质上是一种过程调用,但它是一种特殊的过程调用,与一般的过程调用有明显差别。,54,1) 运行在不同的系统状态 一般的过程调用,其调用和被调用的过程或者都是子程序,或者都是系统程序,故都运行在同一系统状态下。系

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论