操作系统简明教程PPT第2章6

上传人:豆浆 文档编号:4583244 上传时间:2017-08-06 格式:PPT 页数:59 大小:470.50KB
返回 下载 相关 举报
操作系统简明教程PPT第2章6_第1页
第1页 / 共59页
操作系统简明教程PPT第2章6_第2页
第2页 / 共59页
操作系统简明教程PPT第2章6_第3页
第3页 / 共59页
操作系统简明教程PPT第2章6_第4页
第4页 / 共59页
操作系统简明教程PPT第2章6_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《操作系统简明教程PPT第2章6》由会员分享,可在线阅读,更多相关《操作系统简明教程PPT第2章6(59页珍藏版)》请在金锄头文库上搜索。

1、,1,2.5 线程2.5.1 线程的引入进程作为一个独立运行的基本单位只有进程可以被调度运行,只有进程才能拥有资源。分配、回收、切换时空开销为使进程的程序充分并发执行,同时能尽量减少系统的开销,新想法 进程调度运行和拥有资源这两个基本运行单位的属性分开,让进程拥有资源,而让一个新的实体作为调度运行的基本单位。,2,随着并行技术、网络技术和软件设计技术的发展,给并发程序设计效率带来了一系列新的问题,主要表现在:进程时空的开销大,频繁的进程调度将耗费大量处理器时间,要为每个进程分配存储空间限制了操作系统中进程的总数。进程通信的代价大,每次通信均要涉及通信进程之间或通信进程与操作系统之间的信息传递。

2、进程之间的并发性粒度较粗,并发度不高,过多的进程切换和通信延迟使得细粒度的并发得不偿失。不适合并行计算和分布并行计算的要求,对于多处理器和分布式的计算环境来说,进程之间大量频繁的通信和切换,会大大降低并行度。不适合客户/服务器计算的要求。对于C/S 结构来说,那些需要频繁输入输出并同时大量计算的服务器进程(如数据库服务器、事务监督程序)很难体现效率。,3,在引入线程的操作系统中,将进程看作资源集合与线程集合的复合体。进程拥有资源,属于同一个进程的所有线程可以共享这些资源。此外,每个线程仅有较少的私用资源,如程序计数器、寄存器和栈等。每一个线程是一个动态对象,它表示进程中的一条控制线索,执行一系

3、列指令操作,是一个相对独立的、可被调度运行的基本单位。,4,在进程的地址空间中可以有多个线程,它们可以并发执行,这就需要一张单独的表来记录线程控制与管理等信息,这张表称为线程控制表TCB。其中,每个线程占一项,以记录线程的程序计数器、寄存器的值及状态等信息。程序计数器可以使线程像进程一样被暂停执行和恢复执行,寄存器的值等可以保存线程暂停执行时的CPU状态。,5,线程由创建而产生,由撤消而消亡,在生命期间,线程可以处于就绪状态、执行状态和阻塞状态三个基本状态中。这三个基本状态也像进程一样,会发生变迁,如就绪状态执行状态,执行状态阻塞状态,阻塞状态就绪状态等。,6,2.5.2 线程的类型系统如何感

4、知线程的存在?线程在用户空间还是在系统空间。不同类型的线程有着不同的属性和使用方法,三种主要的线程类型:1内核线程2轻量级进程LWP3用户线程,7,1内核线程 一个内核线程可以独立工作,不需要与一个用户进程联系起来。创建与回收负责共享什么,具有什么?调度与同步?开销与使用资源?运行在系统空间线程表,8,2轻量级进程LWP 一个轻量级进程LWP是一个内核支持的用户线程,运行在用户空间。 内核线程基础上的高层抽象,因此 每个进程可以有一个或多个轻量级进程LWP,用户进程通过轻量级进程LWP与内核通信,每一个轻量级进程LWP都由一个单独的内核线程支持 可以被调度并且共享所属进程的地址空间和其它资源,

5、9,它们可以对I/O设备或其它资源进行系统调用,同时也能在I/O操作或资源访问时被阻塞。除了内核堆栈和寄存器外,轻量级进程LWP也需要维护一些用户状态,主要包括用户寄存器上下文,当轻量级进程LWP被抢占CPU时这些内容必须保存下来,以便保证下次调度运行的正确进行。为了节省系统开销,多个用户进程可以多路复用一个轻量级进程LWP,但是只有连接到轻量级进程LWP的进程,才能与内核通信。,10,进程、轻量级进程LWP及内核线程关系图,11,3用户线程 用户线程运行在用户空间,内核无需也无法感知它。每个用户线程仅需一个栈和程序计数器PC, 切换速度快。当一个用户线程被阻塞时, 它在停止之前选择并启动它的

6、后继线程。 用户线程的实现是可能的,因为用户线程的上下文可以在没有内核干预的情况下被保存和恢复。每一个用户线程有自己的用户堆栈,一块用来保存用户级寄存器上下文以及如信号屏蔽等状态信息的内存区域。通过保存当前线程的堆栈和寄存器内容,以及装入新调度线程的那些堆栈和寄存器内容,可实现用户线程间的调度和上下文的切换。,12,内核仍然负责进程的切换,因为只有内核具有修改内存管理寄存器的权力。用户线程不是真正地可以调度的实体,内核没有保留它们的一点信息,内核只是简单地调度它们下面的进程,这些进程再使用库函数来调度它们的线程。当进程被抢占时,它们的线程也被抢占。,13,普通进程上的用户线程,14,2.5.3

7、 线程与进程的比较 在引入了线程的操作系统中,一个进程除拥有资源外,还包括一个或多个线程。下面将进程与线程做一比较:1调度 拥有资源的基本单位和独立调度运行的基本单位的变化? 线程的调度?,15,2并发 在引入线程的操作系统中,不仅进程之间可以并发执行,而且属于同一个进程的多个线程之间也可以并发执行,因而使系统具有更好的并发性,可以更有效地使用系统资源和提高系统的吞吐量。3拥有资源 无论是传统的操作系统,还是引入线程的操作系统,进程都是拥有资源的一个独立单位,而线程仅拥有很少的一些私有资源(如程序计数器、寄存器和栈、线程表项等),但是它可以访问所属进程的所有资源。,16,4开销在进程创建和进程

8、撤消时,系统所付出的开销大于创建线程和撤消线程的开销。进程切换的开销远远大于线程切换的开销。此外,由于同一进程的多个线程具有相同的地址空间,使得它们之间的同步和通信也变得比较容易实现。,17,注意:将线程引入操作系统后,设计人员必须选择正确的内核线程和用户线程设计方法,而无论选择哪种方法都有一些必须解决的问题,例如:(1) 父、子进程是否有同样的线程? 如果父、子进程具有相同的线程,父、子进程两者中有一个的线程阻塞时,另一个的相应线程是否也应该阻塞?,18,(2) 共享数据结构。 当一个线程关闭一个文件时,另一个线程在读该文件,后果如何? 若一个线程内存不够申请时,切换发生,新运行线程内存不够

9、也要申请,那么是申请一次还是两次?,19,(3) 堆栈等问题。 当一个进程有多个线程时,它必须有多个堆栈。如果核心无法感知这些堆栈,则发生堆栈故障时它不能自动扩展,实际上它甚至可能意识不到内存故障与堆栈增长有关。结论:引入线程的操作系统是需要重新设计的,但要注意兼容性,以保证现存的只有一个线程的进程的可用性。,20,多线程技术在现代计算机软件中得到了广泛的应用,取得了较好的效果。下面举例说明多线程技术的一些主要应用: 前台和后台工作。如在一个电子表格软件中,一个线程执行显示菜单和读入用户输入,同时,另一个线程执行用户命令和修改电子表格。 C/S 应用模式。局域网上文件(网络)服务器处理多个用户

10、文件(任务)请求时,创建多个线程,若该服务器是多CPU 的,则同一进程中的多线程可以同时运行在不同CPU 上。,21,加快执行速度。一个多线程进程在计算一批数据的同时,读入设备(网络、硬盘)上的下一批数据,而这分别由两个线程实现。异步处理。程序中的异步成分可用线程实现,例如,为避免掉电带来损失,可把文字编辑器设计成周期性把内存缓冲内容写入到磁盘中。可以创建一个线程完成周期性写盘任务,该线程由操作系统调度,并不需要应用进程提供代码来做检查或输入输出。设计用户接口。每当用户要求执行一个动作时,就建立一个独立线程来完成这项动作。当用户要求有多个动作时,就由多个线程来实现,窗口系统应有一个线程专门处理

11、鼠标的动作。例如,GUI 中,后台进行屏幕输出或真正计算;同时,要求对用户输入(鼠标)做出反映。有了多线程,可同时运行GUI输入线程和后台计算线程,便能实现这一功能。,22,2.6 死 锁混乱一个操作系统应该保证一个进程具有独立访问某个资源的能力。但需独占的资源不只一种两进程 IO设备 记录加锁 相互申请对方尚未产生的消息系统中存在各种进程被阻塞而且不能解除的情况,通称为死锁,软、硬件资源的申请都可能导致死锁。,23,死锁是指一种僵局:在系统运行的某一时刻,当一组进程中的某个进程提出资源请求或者彼此通信时,使得此组进程在无外力作用下永远不能再向前推进,此时称这组进程处于死锁状态。死锁的多数情况

12、?若这种情况只存在于部分进程中,称系统发生了局部死锁;若系统中所有进程都出现了这种情况,则称系统发生了全局死锁。,24,2.6.2 死锁的类型 在计算机系统中发生死锁,与资源有关的情况居多,下面进行具体分析。1资源两大类:可剥夺资源 CPU、内存等不可剥夺资源 打印机、磁带机等。 死锁与不可剥夺资源有关。涉及可剥夺资源的死锁通过在进程间重新分配资源,通常能够化解。所以,我们将重点放在对不可剥夺资源的处理上。,25,在系统中,对于一个资源的使用过程通常有以下几步: (1) 申请资源; (2) 获得资源; (3) 使用资源; (4) 释放资源。 通常,当进程申请资源失败时,将申请资源的进程阻塞,在

13、资源可用时再将其唤醒,这种方法使用得较多。也可以返回一个错误码,由申请进程等候一段时间后再重新申请。,26,2竞争资源引起死锁,27,o、q、r、s、to、q、r、s、n、uo、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) 互斥条件:一个资源在某一时刻只能分配给一个进程。若一个进程申请某资源时,该资源被另一进程占用,则申请者等待,直到

14、占有者释放该资源时才可能获得。(2) 请求与保持条件:进程在占用部分资源后,运行时还可以申请其余的资源,而且在申请其余资源时并不释放已占用的资源。,30,(3) 非剥夺条件:已分配给进程的资源不可被剥夺,只能被占有者自行释放。(4) 循环等待条件:系统中存在着一条由两个或两个以上的进程组成的循环链,链中的每个进程都在等待相邻进程已占用的资源。 以上是死锁产生的必要条件,要想预防死锁发生,只需设法破坏其中的任何一条或几条即可。,31,2.6.4 解决死锁的方法 解决死锁的方法通常有以下几种:忽略死锁:对于死锁不作任何处理;假如系统中不允许死锁发生,通常有两种解决办法:静态解决办法: 系统事先采取

15、措施,对进程申请资源的要求加以限制,即预防死锁,使得死锁没有条件发生。动态解决办法:在进程运行过程中提出资源申请时,系统加以检测,决定是否分配资源,即避免死锁。假如系统中允许发生死锁,则需检测死锁是否发生,并在死锁发生时加以解除。,32,1鸵鸟算法 鸵鸟算法比喻对死锁视而不见,像鸵鸟一样。 解决死锁问题往往代价很大,还常常会给用户带来许多限制。大多数用户宁可在很偶然的情况下发生死锁,也不愿在工作时处处受到限制,因此多数用户会选择方便性而忽视系统对极少发生的死锁问题的解决。,33,2预防死锁1) 限制“互斥条件” 不易有解决方案。2) 限制“请求与保持条件” 只要禁止已拥有资源的进程再申请其它资源,就可以消除死锁。一种实现方法是:当所需资源全部可以使用时方可进行分配另一种方案是:当新的资源申请成功时,才收回其原先占用的资源。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号