os2012unit2 进程与线程_第1页
os2012unit2 进程与线程_第2页
os2012unit2 进程与线程_第3页
os2012unit2 进程与线程_第4页
os2012unit2 进程与线程_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

1、Unit 2进程与线程操作系统原理1CPU管理是OS的核心资源管理功能之一,其任务就是实现CPU的分配CPU调度。很多教科书把CPU管理归结为进程管理,理由是与进程及线程密切相关。本章的内容包括:进程概述、进程服务、线程。2主题进程概念 进程服务 线程概念31 进程概念进程定义进程的基本状态及其转换进程的内存映像进程家族41.1 进程定义进程是操作系统中最重要的基本概念。现代操作系统都以进程作为基本的设计工具和系统中的基本运行单位及资源受配单位,整个系统的设计是以进程为基础的。进程(Process)的定义很多,至今也没有一个公认的统一的定义,关键是要理解进程的实质。进程是程序在处理器上的并发执

2、行。(Dijkstra)进程是一个具有一定独立功能的程序在某个数据集合上的一次运行活动。(1987年全国操作系统会议)进程是进程映象的执行。(UNIX)进程是程序关于某个资源集合的一次执行过程。(Windows)5进程是程序处于一个执行环境中在一个数据集上的运行过程,它是系统进行资源分配和调度的一个可并发执行的独立单位。(教材)简单地说:进程是进展中的程序。 进程是运行中的程序。6 【深入理解】 进程与程序有本质的差异进程和程序有着密切的联系,但它们是两种完全不同的概念。程序是种静态概念。程序是一组可执行的指令序列,平时以文件形式存放在外存中,可被长期保存,其存在可以是永久的。进程是动态概念。

3、进程是某个程序被装入内存后的一次运行过程,具有从动态产生到动态消亡的生命周期,当程序的任务执行完时,该进程也就随之消亡,即进程只是计算机系统中的一种暂时性的个体。进程是程序运行的一次动态过程,程序是进程的静态文本。7 列车(交通工具)程序列车的一次运行过程进程电影拷贝程序影片的一次放映进程列车和电影拷贝都是可以长期存在的实体静态物体;一次列车的运行过程和一次影片的放映活动则有开始和结束,只延续有限的时间动态过程。8 进程的存在依赖于特定的运行配置每个进程都需要执行一定的程序,程序定义了进程要完成的功能及算法。另外,每个进程需要对一定的对象进行操作,如某些数据或文件;每个进程还需要获取并占有一定

4、的CPU时间和一定的内存空间等系统资源;此外,为了随机地记录进程的运行状态、掌控进程的运行过程,操作系统为每个进程动态设置有专门的数据结构进程控制块(PCB)。所有这些配置了一个进程特有的映象。进程是在特定运行配置下的程序运行过程。一个进程的形成不仅依赖于特定的程序,也依赖于特定的运行配置(环境)。9列车运行,除了要有列车外,还需要动力、铁轨、车站、调度员、司乘人员及乘客货物等构成的列车运行配置。电影放映,除了影片拷贝外,还需要包括影院、放映设备、影院工作人员及观众等。10进程和程序不是一一对应的一个程序与不同的运行配置构成的是不同的进程,每个进程的运行配置都是唯一的;反之,不同的进程可含有相

5、同的程序,即一个程序可以被多个不同的独立进程共享。同一列火车,在不同的时间或不同的线路上运行,构成的是不同车次的运行列车。例如,同一列CRH2型列车(程序),8时从南京发往上海是D301次列车(进程A);12时从上海发往南京则是D302次列车(进程B)。这里进程A和进程B共享了同一个程序。11进程是并发运行的不同进程的操作在时间上可以重叠,一个进程的第一个操作可以在另一个进程的最后一个操作结束之前开始。每个进程都以各自独立的速度向前推进,宏观上它们是并行执行的。但由于竞争系统资源,进程之间相互制约,获得所需资源的进程可继续前进,而未获得所需资源的进程只能暂停等待。最典型的是所有进程都在竞争CP

6、U,某个时刻,获得CPU的进程可继续执行它的程序代码,而其他就绪进程都必须等待。故在微观上,各进程都呈现一种走走停停的运行状态。12同一线路且同一时间段上的不同列车并发运行,相互制约。例如,在8时9时的时段上,沪宁线上有10辆列车在运行(10个进程并发运行)。每一辆列车时而正在某路段上行驶(进程执行),时而可能正停在某个站上上下乘客或为让车而停(进程的输入输出进程阻塞),也可能在某路段上被临时停车(进程阻塞)。在某一时刻,每一辆列车不管是正在行驶,还是到站停车,或是中途趴窝,宏观上它们都在并发运行中。131.2 进程的基本状态及其转换进程是一个动态实体,有自己的生命周期。一个进程在其生命周期中

7、有多种状态,每一种状态刻画了进程在不同时段的运行行为。进程在某个时刻总是处于某种状态之一,随着其自身的推进和外界条件的变化,进程的状态也随之而变。进程的三种基本状态:执行态:进程占有了CPU,CPU正在执行该进程的程序代码。就绪态:进程已具备了执行条件,只等系统将CPU分配给它(万事具备,只欠东风)。阻塞态:进程因等待某一事件而暂时不能执行。14进程基本状态的转换 就绪执行处于就绪态的进程被OS的进程调度程序选中,获得了分配给它的的一个CPU时间周期(时间片),于是从就绪态变为执行态。执行就绪导致这种转换的发生有两种情况:执行态进程的当前时间片到限,发生了时间片中断。有更高优先级的进程进入了就

8、绪态。于是执行态进程被剥夺执行权而变为就绪态。执行阻塞执行态进程需要等待某个事件的完成后才能继续执行,如读盘文件、键盘输入,因此让出CPU而进入阻塞态。15阻塞就绪因进程所等待的事件完成了而被解阻唤醒,从阻塞态切换为就绪态。【强调】只有就绪态进程能转换为执行态。阻塞态进程被唤醒后进入就绪态,而不能直接进入执行态。上述各种转换只有“执行阻塞”是由进程自己激发的,其他转换都由操作系统激发。除了三种基本的进程状态外,有些系统还设置有挂起、死锁、终止等状态。16执行就绪阻塞创建调度等待某事件事件发生因时间片到限等被剥夺执行结束图2-1 进程基本状态的转换171.3 进程的内存映象进程的内存映象是进程映

9、象的关键部分,也称进程的存储配置或存储实体。一个进程的内存映象大致包括四个部分。1. 正文段进程的正文(主体)就是进程需执行的程序。用高级语言编写的源程序一般都是可重入的“纯代码”执行代码空间与数据(变量)空间分离。纯代码程序可被多个进程共享。故由高级语言生成的程序代码也称共享正文段。用户进程的正文段通常都是共享正文段。正文段中还可包括只读的常量。182. 数据段(区)用于存放程序执行时用到的各种变量。有些系统把它进一步划分为静态数据区和动态数据区,静态数据区用于存放静态变量和外部变量,动态数据区则存放局部(自动)变量。3. 栈段工作区存放过程调用和系统调用时的调用参数和返回参数。有些系统还用

10、它来存放现场信息。栈段又可进一步分为核心栈和用户栈,进程在核心态下执行时使用的是核心栈,在用户态下执行时则使用用户栈。栈段一般是进程的私有实体。19 4. 进程控制块(PCB)也称进程表,是OS在内存为进程设置的专门数据结构。每个进程都捆绑有一个PCB,它记录了进程所有的静态和动态属性,是OS实施进程管理与通信的最重要依据。PCB与进程一一对应,且动态产生和消亡。当为一项任务创建一个进程时,系统为该进程建立一个PCB并初始化,此后便利用PCB对进程实施管理和控制。撤消一个进程时,系统消除它的PCB,该进程也就随之消亡。换言之,操作系统是根据PCB而感知进程的存在。从这个意义上讲,PCB是进程存

11、在的唯一标志。PCB与进程存储映象中的其他实体是分离的,所有进程的PCB被集中存放在内核存储区,受系统的保护。20PCB的内容与组织PCB一般包括以下信息:进程基本信息:如进程标识数(标识码)PID、用户标识数UID、进程的创建时间等。进程家族信息:如祖先(根)进程指针、父进程指针、子进程链指针、兄弟进程链指针。进程的状态与调度信息:如进程的当前状态(执行态、就绪态、阻塞态等之一)、相应的状态队列指针(包括队首指针和next指针)、以及进程优先级。存储映象的指针与大小:存储映象在内存和虚存的指针和大小。现场保留区:存放进程被阻塞或被中断时的现场(上下文)信息,即CPU中各寄存器的值,包括PSW

12、寄存器的值。21进程通信信息:如信号量(灯)、消息队列指针、信箱指针句柄、接收到的信号等。所用资源信息:如打开文件的句柄(描述字)。PCB需占用较大的空间,UNIX将PCB分成两个部分:常驻内存部分称为proc结构,非常驻内存部分为user结构。Linux的PCB则称为task_struct。通常,操作系统在内核存储区中开辟一个线性的PCB表,该表的每个元素就是一个PCB,表长为系统允许存在的最大进程数(Linux默认为512)。在创建一个新进程时,首先要从PCB表中找寻一个空闲PCB,用它来创建新进程。有些系统也用链表形式组织PCB。22Linux采用哈希表方法来组织PCB表。进程创建时被分

13、配有一个唯一的PID,用它计算出的哈希值就是该进程的PCB在PCB表中的位置。为了方便管理,通常把处于各种不同状态的进程链接成不同的队列。进程队列实际就是PCB队列。对于单CPU系统,通常设置有:一个执行队列(只有一个队列元素)。一个多个就绪队列(按优先级别范围设置)若干阻塞队列(每种阻塞事件对应一个阻塞队列)。系统为每个队列设置一个全局变量的队头指针Head。在PCB中设置有队列链接指针。 231.4 进程家族 系统中所有独立的活动都可以构成一个进程。在批处理系统中,系统为每个用户作业创建一个用户作业进程;在交互式系统中,系统为每个登录的用户创建一个登录用户进程。一个用户进程还可以为它的相对

14、独立的子任务创建子进程。子进程可以继承父进程的全部或部分资源并和父进程并发执行。父与子的概念是相对的,子进程又可以创建自己的子进程,构成新的父子关系。一个进程还可以创建多个平行的子进程。于是,多层次的父子关系便形成了一个树结构(倒挂树)的进程家族。在进程树中,树的顶节点是进程家族中所有进程的祖先(根),它最先被创建,最后被撤消。显然,一个进程可以有多个子孙进程,但每个进程只有一个父进程(除根进程外)。对于一个进程家族,当其根进程被撤消后,整个进程家族亦就随之消亡。24一个用户进程家族是随着某个用户作业的启动或交互用户登录成功而动态产生并随着进展而动态形成,随着用户作业的终止或用户退出系统而动态

15、消亡。系统进程的产生与消亡是与用户进程不同的。在系统初启时,首先创建一个系统总控进程系统根进程(如UNIX的0#进程,Linux的init进程),再由该系统根进程创建其他系统服务进程,这些系统服务进程之间的关系是平等的,不存在隶属关系和资源继承关系,而且系统服务进程一旦被创建便永无休止地参与并发运行,为所有用户进程提供服务,直至系统终止时,由系统总控进程撤消所有系统服务进程,并最终自行消亡。252 进程服务创建系统调用阻塞系统调用唤醒系统调用撤消系统调用26进程服务是现代操作系统向用户和用户程序提供的一项重要且必不可少的服务功能,包括:创建、阻塞、唤醒、终止、撤消、查询等。执行这些服务功能的是

16、内核函数。用户进程可通过两种方式来访问这些内核函数:在提供进程服务器的系统上,用户进程可通过进程服务器获得相应服务;而在一些系统上,用户进程可直接通过系统调用的方式来访问这些内核函数。习惯上也把这些内核服务函数称为系统调用函数或直称系统调用。此外,用户可使用shell命令请求某些进程服务。272.1 “创建”系统调用一个进程可以将一项相对独立的任务交由一个子进程来完成,它可通过系统调用“创建”来创建其子进程,创建后,父子进程可并发执行。1. 创建进程算法创建进程的一般算法是:为新进程分配一个唯一的PID和一个空闲的PCB;为进程映象分配内存空间;将进程正文(可执行程序)从磁盘读入内存;初始化P

17、CB及其他映象;将PCB插入就绪队列。系统调用返回28Windows操作系统的创建算法基本同上,提供的相应系统调用是CreateProcess。UNIXLinux所采用的算法则有所不同,它提供了两个系统调用:fork和exec。2. fork系统调用fork很有特色,它采用“克隆”(clone)的方法,创建一个与当前进程(新进程的父进程)的运行配置完全一样的子进程。fork很复杂,大致完成以下操作:29(1)为新进程分配一个PID和PCBfork首先检查系统是否有足够的内存资源来建立一个新进程以及系统中的进程数是否已超限。如果资源不足或进程数超限,则返回-1,表示创建失败;否则,为新进程分配一

18、个唯一的PID和一个空闲的PCB,该PID其实就是其PCB在PCB表中的索引号。(2)复制PCB并初始化复制一个父进程的PCB副本到子进程的PCB中,然后把其中的PID的值改为新进程的PID,当前进程置为子进程的父进程,以及其他必要的初始化工作。所以,子进程拥有与父进程一样的UID、GID、优先数值、当前目录、用户文件描述符表等。30(3)共享父进程的所有文件资源把与父进程相连的文件表和索引节点表的引用计数器加1。这些文件自动地与子进程相连。(4)创建子进程的内存实体按父进程的数据段和栈段的大小为新进程分配内存空间,并复制父进程的数据段和栈段的内容,同时修改新进程PCB中的相应指针。(注意:新

19、进程完全共享父进程的正文段) (5)给新进程返回0,给父进程返回新进程的PID。31由上可知,当一个子进程刚被创建时,它与父进程共享正文段,且起始执行位置相同,虽然有新分配的数据段和栈段,但它们的内容也与父进程的相同。那么两者以后是否只能执行相同的程序代码和完成相同的功能呢?关键在于上述第5步,fork采用了“一次调用,分叉(fork)返回两值”的技术,即它给父进程返回子进程的PID,给子进程返回0(注:fork把返回值分别送入两个进程各自的堆栈中)。由于父子进程共享同一程序,所以只要在该程序中的系统调用的返回点安排一条if 语句,就可以通过判断返回值使父子进程分别执行各自代码。32在父进程的

20、执行程序中创建“克隆”子进程的一般方法:int pid;while(pid=fork()=-1); /*调用fork创建子进程,直到成功*/if(pid=0) /*收到返回值0,执行下面的子进程代码*/ exit(0); /*系统调用exit,子进程自行终止*/ else /*收到返回值为子进程的pid ,执行下面的父进程代码*/ 33其中的系统调用exit(0)执行的功能是:回收调用者的除了PCB之外的各种内存映像,同时把PCB中的进程运行状态置为“僵死(终止)”态,然后向该进程的父进程发出“已终止”软中断信号。在这种方法中,子进程的执行代码嵌入在父进程的程序代码中。显然,这种方法适合于子进

21、程代码量较少的情况。fork的这种“克隆”式的子进程创建方法在很多情况下是很有用的且效率高。例如,Web服务器在每收到一个用户请求后,就创建一个新的但一模一样配置的克隆进程来响应用户的服务请求。而在windows下过程就要更复杂一些。342. exec系统调用使用fork创建的是父进程的一个克隆子进程。如果想创建一个拥有独立程序代码的子进程,则可以在调用了fork后再调用exec。exec较fork简单,它完成以下操作:(1)如果新进程的程序不在内存,则为指定的程序文件分配内存空间(正文段),然后将该程序文件从磁盘读入正文段;否则,与该程序建立共享链接。(2)修改新进程PCB中的有关数据,如正

22、文段的指针和大小、正文段的入口指针、栈指针等。35在父进程的程序代码中创建非克隆子进程的一般方法:int pid;while(pid=fork()=-1); /*调用fork创建子进程,直到成功*/if(pid=0) /*收到返回值0 ,执行下面的子进程代码*/ exec( pfile, argv); /*调用exec,加载子进程的独立程序*/else/*收到返回值为子进程的pid ,执行下面的父进程代码*/ 362.2 “阻塞“系统调用当现行进程需要等待某个事件时,可通过“阻塞“系统调用阻塞自己。1. 阻塞进程算法阻塞的一般算法是:保存现行进程的现场;将现行进程从执行态切换为阻塞态;将该进程

23、加入到相应事件的阻塞队列中;跳转到进程调度程序执行新一轮的进程调度。进程调度程序也是内核模块。 372. Linux的“阻塞”系统调用Linux提供了2个实现阻塞功能的系统调用:wait和sleep。wait()的功能是调用者等待某个子进程的执行终止。wait()的算法:(1)首先查找调用者进程是否有子进程,若无,则返回出错码;(2)如果找到一处于“僵死”(终止)状态的子进程,则将该子进程的执行时间加到调用者(父进程)的执行时间上,并释放子进程的PCB,即销毁了该子进程;然后立即返回调用者,调用者可继续执行。38(3)如果未找到已“僵死”的子进程,则将调用者置成“睡眠”(即阻塞)状态,并加入到

24、睡眠队列中,等待其子进程发来软中断信号时被唤醒。另外,也可以使用wait(pid),其中的参数pid是某子进程的PID,即该wait系统调用使调用者进程进入睡眠,一直到其指定的子进程执行终止为止。sleep(second)的功能是使调用者进程进入睡眠,直到second秒后唤醒。392.3 “唤醒“系统调用完成或发现某事件的进程可通过“唤醒”系统调用,唤醒因等待该事件而被阻塞的某个进程。1. 唤醒进程算法唤醒的一般算法是:从指定事件的阻塞队列中找到要唤醒进程的PCB;修改PCB中的有关信息,将该进程置为就绪态;将该PCB从阻塞队列中移出,并插入到就绪队列中。系统调用返回402. Linux的“唤

25、醒”系统调用Linux提供的“唤醒”系统调用是wake_up(),它有多种原型,如wake_up、wake_up_all、wake_up_nr、wake_up_locked等。412.4 “撤消“系统调用父进程可通过“撤消”系统调用来撤消它的子进程,包括正常撤消和异常撤消。前者是子进程在完成了任务并报告了父进程后实施的正常撤消;后者则是父进程对子进程进行的强制性撤消(如撤消死锁态进程)。1. 撤消进程算法撤消的一般算法是:从PCB集中找到要撤消子进程的PCB;若该子进程还有其子进程,则递归撤消子孙进程;回收子进程所使用的资源;回收子进程的PCB。系统调用返回422. Linux的“撤消”系统调

26、用正常情况下,子进程使用exit(0)系统调用终止自己,父进程则使用wait()系统调用撤消其子进程。父进程还可以使用kill(pid, SIGKILL)系统调用来强制“杀死”指定的pid子进程。433线 程 线程概念线程管理模式线程的困惑44线程(thread)是操作系统领域中较晚出现的一个概念,是继进程之后的又一个关键概念。传统的操作系统以进程为中心,系统的结构、设计及执行均以进程为基础,故通常称传统的操作系统为面向进程的操作系统模式,简称进程模式。线程是对进程的发展,线程的引入进一步提高了系统的并发性,并显著改善了系统的运行效率。引入线程的操作系统也被称之为“进程线程模式”,或称“多线程

27、模式”。当前的许多主流操作系统都不同程度地采用了多线程模式,如 UNIX、Linux、Windows、OS/390等。453.1 线程概念 1. 线程的引入传统的进程集两种重要角色于一身:(1) 进程是拥有系统资源的独立实体每个进程拥有一个独立的地址空间(逻辑地址构成的存储空间),用于存放该进程的所有映象。在进程运行过程中,进程还可以动态获取CPU、I/O处理器、I/O设备和文件等资源。进程在拥有资源的期间,对这些资源具有控制权,其他进程不经允许是不能访问这些资源的。OS对每个进程拥有的资源实施保护。(2) 进程是可被调度和受配CPU的执行实体每当OS需要进行CPU分配时,就根据某种调度算法从

28、所有就绪进程中选择一个合适的进程,把CPU分配给该进程使用一个CPU时段。获得CPU使用权的进程可在46 CPU上执行它的程序。这两种角色是传统进程的本质所在,是多道程序并发运行的基础。但是这种集两种角色于一身的进程也带来了一些副作用。例如:进程是并发运行的,每个进程在其执行过程中经常要被打断,呈现走走停停的情形。在进程模式中,当发生一个中断时,通常要进行进程切换,完成一次进程切换需要花费不少的CPU时间开销;为提高并发性以加快进程的运行速度,每个进程都可以为它的某个相对独立的子任务动态创建子进程,子进程可与父进程并发运行,子进程与子进程也可并发运行。子进程完成其任务后,可被动态终止和撤消。但

29、创建和最终撤消一个进程同样需要花费不少的CPU开销。47另外,进程之间共享软资源难以实现。例如,一进程的多个子进程需要共享某个变量,显然只能把该变量作为全局变量定义在父进程中,但子进程与父进程的地址空间是隔离的,即子进程是不能直接访问父进程的地址空间的。总之,在进程模式中,进程切换和进程的创建及撤消都需要一定的CPU开销,如果这些操作比较频繁的话,那么系统就要为此付出较大的额外CPU开销,这在一定程度上降低了进程并发运行所带来的好处,影响了系统的有效性。此外,进程之间共享软资源也难以实现。48为此,操作系统专家们研究如何在支持系统高并发性的前提下,尽量减少需要付出的额外系统开销,以改善系统的执

30、行效率。基本目标是尽量减少进程切换和进程的创建及撤消的次数。切入点是进程所承担的两种独立的角色。专家们设想,既然传统进程所承担的两种角色是相互独立的,那么就可以将它们分离,分别交由两种不同的实体来承担,使仅作为执行程序的实体都能“轻装”运行。于是就引入了“线程”,并独立承担传统进程的第二种角色,而新的进程就只承担原先的第一种角色,即引入线程后,虽然仍保留了进程,但现在的进程主要是系统资源的拥有者,而线程是可被调度和受配CPU的执行实体。492. 线程与进程在“进程线程模式”中,进程和线程都是系统中可并发的实体,但分别承担了两种不同的角色,它们的特性及关系如下:进程是拥有系统资源的独立实体,每个

31、进程拥有一个受操作系统保护的独立的进程地址空间,进程还可以动态获取CPU、I/O设备、文件等资源。线程是进程内的一种专门负责执行程序的执行实体,是隶属于进程的相对独立实体。线程利用所属进程所拥有的资源,执行该进程的程序代码。作为程序执行实体,线程是物理CPU的实际受配者。50进程为执行它的程序任务,可创建一个或多个线程,每个进程至少含有一个线程,在创建进程时同时创建了该进程的第一个线程。一个进程拥有的全部资源可供该进程内的所有线程共享。一个进程内的所有线程共享该进程的正文段和数据段,但每个线程都拥有自己的私有映象:线程控制块(TCB)和栈段。TCB包含了一个线程的专有属性及其执行现场信息。51

32、PCB正文段数据段TCB栈段TCB栈段TCB栈段 线程1 线程2 线程n 其中:PCB存放于内核空间;正文段和数据段以及各线程的栈段存放在进程地址空间中;TCB或存放于内核空间(内核级线程)或存放于进程地址空间(用户级线程)。图2-2 多线程进程的地址空间52一个线程具有生命期,并至少具有三种基本运行状态:就绪、执行及阻塞。线程可动态创建其他线程(隶属同一进程),一个进程内的所有线程可并发执行。3. 多线程模式的优点多线程模式较之进程模式的优点主要在于显著改进了系统的执行效率,提高了系统的并发性,具体体现在:(1) 线程较之进程更为活跃。因此,在进程模式中创建和撤消进程的工作在进程线程模式中大

33、多被转化成线程的创建和撤消,而用于创建和撤消线程的系统开销要少得多。创建线程时仅需建立TCB和工作栈。而在创建进程时要建立PCB,建立进程地址空间,装入进程的正文和53数据等,这比创建线程时的工作量要大得多,周期要长得多。据研究表明,创建一个线程的速度比在进程模式中创建一个进程提高约10倍。(2) 在多线程模式中,进程切换的次数也要大大减少。线程是执行程序的实际实体,故因CPU切换导致的主要是线程切换。而在同一进程中的线程切换所需的系统开销比进程切换要少得多,因为这种线程切换只需切换线程的执行现场以及更新相关的状态队列,无需进行进程地址空间的切换,特别是如果为用户级线程,线程切换时还无需进行C

34、PU执行状态的切换。但当线程切换在隶属不同进程的线程之间发生时仍将导致进程切换。 54(3) 多线程模式提高了执行实体之间的通信效率。进程之间的通信需要内核的支持,由于各进程的地址空间是隔离的,故它们相互传递的信号或消息需通过内核转递,而内核的每次干预必将引起两次CPU执行状态的切换:从用户态到核心态,又从核心态到用户态。但在一个进程中,并发线程之间的通信可直接进行,无需内核的干预,因为它们共享该进程的数据段和文件。(4)在进程模式下,实现一进程的多个子进程共享变量很复杂,难以实现。而在多线程模式下,由于线程共享其父进程的地址空间,故实现这项功能没有丝毫问题。(子进程是已成年且分家独立的孩子,

35、线程是未分家独立的孩子。)55在操作系统的各种服务器进程中引入线程可大大提高系统的服务质量。例如Web服务器,每当传来一个Web服务请求时, Web服务器便立即响应并创建一个Web服务线程。一个Web服务器可同时具有多个Web服务线程,分别处理不同的服务请求,它们可并发执行。当现行Web服务线程被阻塞时,可切换到另一个就绪态线程。因此宏观上, Web服务器同时响应并处理多个Web服务请求。如果Web服务器运行在多处理器的机器上,那么服务器中的多个线程可被调度到不同的处理器上并行执行。有时也把进程模式叫做单线程模式,即进程只包含一个线程。563.2 线程管理模式 线程的管理类似于进程管理,通常包

36、括如下功能:线程服务,包括:创建、撤消、阻塞、唤醒等线程调度线程同步线程通信实现线程管理有两种基本模式:KLT和ULT 571. ULT(User-level Threads)模式操作系统内核自身并不具有线程管理功能,而是借助线程库为用户程序提供提供线程机制。由此产生和运行的线程称之为用户级线程(ULT)。线程库是由语言系统(如Java、C)提供的供用户程序使用的公用软件包,其中定义了一组用于线程管理的函数以及相关的数据结构。线程库被连接(包含)到用户程序中,作为用户程序的功能在进程的地址空间中执行。在用户程序中可直接利用函数调用来访问线程管理函数,而无需通过系统调用。线程库是完全独立于内核的

37、,内核并不知道线程库和ULT的存在,内核既不维护TCB,也不支持线程调度,内核管理的仍然是进程,CPU的调度和受配对象依然是进 58程。线程的实现和管理实际上只是用户程序自身的行为,是用户程序借助线程库来实现的,ULT对操作系统内核完全透明。其优点如下:实现简单。ULT与内核无关,不需要修改内核,因此便于实现。便于移植。ULT的创建、调度和其他管理的算法与内核无关,很容易在多个操作系统之间移植。开销小。因为不需要内核的干预,线程的创建、切换等开销小。其缺点如下:一个进程的多个线程不能同时执行。因为内核的调度单位是进程,故内核只可能给一个进程一次分配一个59CPU,即便是在多核(多CPU)系统中

38、。换言之,ULT不能提高进程内的并发性。当一个线程被阻塞,则整个进程被阻塞,即该进程的其他所有线程也同时被阻塞。因为没有内核干预,有些功能难于实现。例如,采用动态优先级线程调度需要知道每个线程的执行时间,没有内核干预很难准确地得到这样的信息。602. KLT(Kernel-Level Threads)模式由操作系统内核提供并完成所有的线程管理工作,即内核中设计有完成各种线程管理功能的原语,它们由相关的系统调用和中断所驱动,在CPU的核心态下执行。由此产生和运行的线程称之为内核级线程(KLT)。其优点如下:一个进程的多个线程可同时执行。在KLT模式中,内核的调度单位通常为线程。因此在多处理器系统中,内核可将一进程的多个线程同时调度到多个CPU上并行执行,从而大大加快进程的运行速度。一个线程的阻塞不会影响到该进程的其他线程。KLT模式的缺点是实现复杂,内核需要专门的数据结构和程序模块来描述线程。另外,KLT的创建和管理均需要内核的干预,因此,和ULT

温馨提示

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

评论

0/150

提交评论