操作系统进程与线程实用教案_第1页
操作系统进程与线程实用教案_第2页
操作系统进程与线程实用教案_第3页
操作系统进程与线程实用教案_第4页
操作系统进程与线程实用教案_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、 2.1 进程(jnchng)的概念 2.1.1多道程序设计环境(hunjng)下的程序特点 .单道程序设计环境(hunjng)下的程序特点 1.资源的独占性程序A程序B程序C时间4234245330469141820232630图例:打印机输出 CPU执行.执行的顺序性 结果的再现性 多道程序设计环境下的程序特点 2.程序A时间04691215 17131822程序B程序C. 执行的并发性:宏观上,在内存的多个程序都按自己程序规定的操作步骤向前推进;微观上,CPU在任何时刻只执行一个程序,它们轮流占用CPU,交替地执行着。 . 相互的制约性:内存里的多个程序共享系统中的资源,相互间必然有各种

2、制约。一种是“间接制约关系”,另一种是“直接制约关系” 。第1页/共29页第一页,共30页。 程序P1调用(dioyng)echo()函数,getchar()接收到从键盘输入的字符x,在将其存于变量chin后被中断; 程序P1从断点恢复执行。此时由于P2调用了echo(),chin里原先的x被y所覆盖。于是,在屏幕(pngm)上显示的是y,而不是x。 程序P1调用echo()函数,getchar()接收(jishu)到从键盘输入的字符x,然后在屏幕上显示出字符x;. 状态的多变性:诸多程序在运行过程中有着各种制约关系,致使内存中每一个程序的状态总在不断的变化之中:时而获得CPU处于运行状态;时

3、而由于输入/输出或申请某种资源未得到满足而只好挂起来等待。它们走走停停,停停走走,交替式地向前推进,直至终点。 例2-1 : 在多道程序设计环境下,“结果再现性”被打破的简单例子 void echo() chin = getchar(); chout = chin; putchar(chout);执行顺序1 : 程序P2调用echo()函数,getchar()接收到从键盘输入的字符y,然后在屏幕上显示出字符y。(1)(2).执行顺序2 :(1)(2)(3) 程序P2获得CPU使用权,调用echo()函数,从头做到尾,屏幕上显示字符y; 返回目录第2页/共29页第二页,共30页。. 2.1.2

4、进程(jnchng)的定义1.进程(jnchng)的定义 .进程(jnchng)是程序的一次运行活动;进程的运行活动是建立在某个数据集合之上的;进程要在获得资源的基础上从事自己的运行活动。 所谓“进程”是指一个程序在给定数据集合上的一次执行过程,是系统进行资源分配和运行调度的独立单位。 可从三个方面来描述进程: (1)(2)(3)例2-2 :驼峰溜放控制过程中的进程 驼峰到达场编组场溜放中的一勾车雷达测速、测长道岔(轨道电路)一列新货车一列解体货车缓行器12345678股道号溜放中的一勾车扳道岔程序 .缓行器控制程序 .雷达测速程序 .雷达测长程序 .巡回检测程序 第3页/共29页第三页,共3

5、0页。2.进程与程序(chngx)的关系 进程是一个动态的概念,强调的是程序的一次“执行”过程;程序则是一组有序指令(zhlng)的集合,在多道程序设计环境下,它不涉及“执行”,是一个静态的概念。 . 不同进程可执行同一个(y )程序。由进程的定义可知,区分进程的条件一是所执行的程序,二是数据集合。即使多个进程执行相同的一个(y )程序,只要它们运行在不同的数据集合上,它们就是不同的进程。 . 每个进程都有自己的生命期。进程的本质是程序的一次执行过程,当系统要完成某项工作时,它就“创建”一个进程,以便执行事先编写好的、完成该工作的那段程序。程序执行完毕、完成预定的任务后,系统就“撤消”这个进程

6、,收回它所占用的资源。一个进程创建后,系统就感知到它的存在;一个进程撤消后,系统就无法再感知到它。于是从创建到撤消,这个时间段就是一个进程的“生命期”。 . 进程之间具有并发性。在一个系统中,同时会存在多个进程,与它们对应的多个程序同时在系统中运行,轮流占用CPU和各种资源。这正是多道程序设计的初衷,说明这些进程在系统中并发执行着。 . 进程间会相互制约。由于进程是系统中资源分配和运行调度的单位,因此在对资源共享和竞争中,必然会相互制约,影响了各自向前推进的速度。 第4页/共29页第四页,共30页。 通常,系统进程运行在核心态,用户进程运行在用户态。不过,在微内核模式下,只有那些执行(zhxn

7、g)基本功能程序的进程,运行在核心态,那些执行(zhxng)非基本程序的进程,则以各种服务的形式运行在用户态。 系统进程与用户进程都要使用系统中的各种资源,它们都是资源分配与运行调度的独立(dl)单位,但系统进程的使用级别,应该高于用户进程。也就是说,在双方出现对资源的竞争时,系统进程有优先获得资源、优先得到运行的权利。只有这样,才能保证计算机系统高效、有序的工作。 系统进程直接管理软、硬件资源的有关活动;而用户进程则不得(bu de)插手资源管理,在需要使用资源时,必须向系统提出申请,由系统统一调度与分配。 系统进程间的相互关系由操作系统负责协调,以利于增加系统的并行性,提高资源的整体利用率

8、;用户进程间的相互关系由用户自己(在程序中)安排。不过,操作系统会向用户提供一定的协调手段(以系统调用命令的形式)。 3.系统进程与用户进程 . 在多道程序设计系统中,既有操作系统程序,又有用户程序,因此整个系统中存在着两类进程:一类是系统进程,一类是用户进程。 . 操作系统中用于管理系统资源的那些可以并发执行的程序,构成了一个个系统进程,它们提供系统的服务,分配系统的资源;而可以并发执行的用户程序段,形成一个个用户进程,它们是操作系统的服务对象,是系统资源的实际享用者。 .系统进程与用户进程的主要区别 :(1)(2)(3)(4)返回目录第5页/共29页第五页,共30页。 终止(zhngzh)

9、:进程或正常结束,或因某种原因被强制结束。这时,系统正在为其进行善后处理。 阻塞:进程正在(zhngzi)等待某事件(如I/O完成)的发生。在事件到来之前,即使把CPU分配给这个进程,它也无法运行。阻塞状态有时也被称为等待状态。 运行:进程获得CPU正在被执行中。若系统只有一个(y )CPU,那么任何时候系统中最多只有一个(y )进程处于运行状态。 就绪:进程已具备运行的条件,只要有机会获得CPU,它就可以投入运行。 创建:进程正在初创时期,操作系统还没把它列入可执行的进程行列。 2.1.3进程的状态及状态变迁 1.进程的基本状态和状态变迁 .就绪提交运行阻塞终止调度撤销超时事件发生等待事件三

10、种最基本的状态创建进程的五种状态(1)(2)(3)(4) (5)进程状态的变迁 进程从一个状态改变成另一个状态,称为进程状态的“变迁”。箭头上的文字,是引起状态变迁的原因。并不是所有的进程状态之间都可发生变迁。. 可能的变迁为:创建就绪 ,就绪运行 ,运行就绪,运行阻塞 ,阻塞就绪 ,运行终止 第6页/共29页第六页,共30页。 就绪/挂起:进程在辅存。只要被激活,进程就可以(ky)调入内存,如果获得CPU就可以(ky)投入运行。 2. 对进程状态更细致(xzh)的划分 就绪(jix)/挂起就绪激活运行阻塞终止调度撤销超时事件发生等待事件挂起阻塞/挂起激活挂起事件发生创建提交提交挂起. 若内存

11、中现有的进程都在等待I/O的完成,CPU只能空闲运转。这无疑是对系统资源的一种浪费。 .使用磁盘与内存间的交换技术,可达到提高CPU利用率的目的。新增两个状态 (1)(2) 阻塞/挂起:进程在辅存等待事件的发生。只要被激活,进程就可以调入到内存里去等待事件的发生。 . 处于这两种状态的进程,表示它们是在辅存而不是内存。只有通过“激活”,才可以使这些进程的状态变迁为“就绪”或“阻塞”,从而进入内存。 . 这时,比较重要的变迁是:阻塞阻塞/挂起 ,阻塞/挂起就绪/挂起 ,就绪/挂起就绪 ,就绪就绪/挂起 ,创建就绪,创建就绪/挂起,阻塞/挂起阻塞 ,运行就绪/挂起 。返回目录第7页/共29页第七页

12、,共30页。 进程控制块里包括四种基本(jbn)信息:标识信息、现场保护区信息、调度信息以及管理信息 。 程序代码及与代码相关联的数据集合,是组成一个进程的实体。但它们都是静态文本,无法反映(fnyng)进程的各种动态特征。 2.2 进程(jnchng)的管理 2.2.1 进程控制块 .1.进程控制块 为便于管理和控制进程的执行,为随时刻画进程的动态特性,为反映进程间的相互关系,操作系统用一个与进程有关的数据结构来完成这样的任务。这个数据结构被称为“进程控制块(PCB)”,它由操作系统创建和管理。标识信息现场保护区信息调度信息管理信息进程标识符(进程名)进程标识数(PID)家族关系(父进程)家

13、族关系(子孙进程)通用寄存器指令计算器程序状态字(PSW)用户栈指针进程状态进程优先数(级/权)等待原因队列指针程序存放位置资源使用历史打开的文件数据存放位置 由于进程控制块PCB里包含着一个进程所需要的所有信息,因此它是操作系统中最重要的一种数据结构。进程的PCB是系统感知一个进程实际存在的唯一实体。 .第8页/共29页第八页,共30页。2. 进程(jnchng)的三个组成部分 .操作系统中进程由三个部分组成,称为(chn wi)“进程映像” 。(1)(2)(3)程序(chngx):进程将要执行的程序(chngx); 数据:用户空间中的可修改部分,如数据、堆栈、可修改程序; 进程控制块PCB

14、:记录操作系统管理、控制进程所需要的数据信息。 进程映像的表示PCBPCBPCB1PCB2程序程序程序数据集合数据集合数据集合1数据集合2(a)(b)(c)3.进程间的切换 进程P0进程P1操作系统中断或系统调用保护现场到PCB0从PCB1现场保护区获取现场信息中断或系统调用保护现场到PCB1从PCB0现场保护区获取现场信息执行执行执行 被打断的断点x从断点x恢复执行 被打断的断点y返回目录第9页/共29页第九页,共30页。 PCB中可以有多个队列指针,以反映进程间的不同关系(gun x),比如用另一个指针反映出进程间的家族关系(gun x)。 还可以有就绪(jix)/挂起队列、阻塞/挂起队列

15、等; 队列最后一个PCB的“队列指针”里,放队列结束(jish)标志,如“-1”; 操作系统要为每个队列设置一个头指针,通过它及队列中各PCB里的队列指针,可以得到该队列里的所有进程的PCB; 2.2.2 进程控制块队列. 操作系统是通过PCB来管理系统中 的进程的。最常用的办法是根据进程所处状态的不同,通过PCB中的链接指针,形成各种管理队列。 .运行队列头指针就绪队列头指针PCBPCBPCBPCBPCB-1阻塞队列1头指针PCBPCB-1阻塞队列2头指针PCBPCBPCBPCB-1PCB队列指针(a) 带有队列指针的PCB(b) 由PCB组成的各种队列几点说明(1)(2)(3)(4)返回目

16、录第10页/共29页第十页,共30页。 按系统所采用的调度算法,将其PCB排入就绪(jix)队列或就绪(jix)/挂起队列。 调用创建进程原语后,系统中出现(chxin)一个新的进程,就会感知到这个进程的存在。一个进程创建(或“派生”)另一个进程,前者称为父进程,后者称为子进程。 2.2.3 进程控制的系统调用(dioyng)命令 在执行期间不能被打断、不能被分割的程序段,在操作系统里称作“原语”、“原子操作”或“不可分割的操作”。 .有关进程控制的系统调用命令都是以原语的形式出现的。 1. 创建进程原语 屏蔽中断申请一个PCB分配一个标识填写PCB将进程置为就绪或就绪/挂起状态,到相应队列排

17、队开中断不能被分割的整体.创建进程原语程序主要应该完成的工作 (1)为新进程申请一个PCB; (2)为新进程分配一个唯一的标识; (3) 根据创建者提供的信息,填写进程控制块PCB里的各项内容; (4). 创建进程原语的图中,“屏蔽中断”及“开中断”两个操作,是为了保证整个执行流程不被分割而设置的。也就是说,这四项工作必须作为一个整体一次执行完毕,中间不能被别的操作打断。这是原语的要求。 第11页/共29页第十一页,共30页。2.撤消(chxio)进程原语 . 调用撤消进程原语后,一个原来在系统里存在的进程就消失(xiosh)了,系统再也不会感知到它的存在。 .撤消进程原语应该完成(wn ch

18、ng)的工作 (1)(2)根据进程标识,找到相应的PCB,若该进程正在运行,则立即终止运行; (3)释放该进程使用的所有资源(如程序、数据所占用的存储空间等); (4)若有子孙进程,终止它们,释放资源; 归还所占用的PCB空间。 3.阻塞进程原语 . 在生命期里,进程走走停停。“停”的原因,就是为等待某个事件的发生而被阻塞。调用阻塞原语后,一个原来处于运行的进程变为阻塞状态,操作系统将会重新对CPU进行分配。 .阻塞进程原语应该完成的工作 (1)(2)停止进程的运行,将CPU的运行现场保护到该进程PCB的现场保护区; (3)把进程的状态由运行修改为阻塞,并到相关的阻塞队列里排队; 转向操作系统

19、的进程调度程序,将CPU分配给另外一个进程使用。 第12页/共29页第十二页,共30页。.4.唤醒(hunxng)进程原语 当所等待的事件发生以后,进程就应该被唤醒,让其去参与(cny)对CPU的竞争。调用唤醒进程原语后,一个进程又可以“走”了。 .唤醒(hunxng)进程原语应该完成的工作 (1)(2)将进程从相应的阻塞队列上摘下来; (3)把进程的状态由阻塞修改为就绪,并到就绪队列里排队; 转向操作系统的进程调度程序,将CPU分配给另外一个进程使用。 5.挂起进程原语 . 当系统为了获得所需的内存空间,在主-辅存之间交换进程时,进程才会有挂起状态 。.挂起进程原语应该完成的工作 (1)(2

20、)得到需要挂起的进程的PCB,将其从相应队列里摘下; (3) 申请位于辅存上的交换区空间,将进程映像的部分或全部写入交换区,并将交换区地址记入该进程PCB; 根据进程原先的状态,把其状态修改为阻塞/挂起,或就绪/挂起; (4) 系统收回进程所占用的内存空间。 第13页/共29页第十三页,共30页。 通过对驼峰溜放控制过程的简略描述,理解(lji)进程控制原语的应用。 激活是针对处于“阻塞/挂起”或“就绪/挂起”状态的进程实行的操作。由于(yuy)它是挂起的“逆”操作,因此激活进程的原因就与挂起的原因相关。 每股道是一个“进路”。对任何一个道岔,知道所来勾车的进路编码,就能知道当前道岔应该是往左

21、扳动(bn dn)还是往右扳动(bn dn)。 .6. 激活进程原语 .激活进程原语应该完成的工作 (1)(2)得到需要激活的进程的PCB,将其从相应队列里摘下; (3)申请所需要的内存空间,将存放在辅存交换区里的进程映像读入该内存区域; 根据进程状态修改为阻塞或就绪,把PCB排入相应的管理队列; (4)释放所占用的辅存交换区。 勾车进入方向勾车出清方向勾车出清方向道岔轨道电路轨道电路轨道电路勾车进路表例2-4: (1) 对每个道岔,都装有“轨道电路”硬设施,当一勾车的第一对车轮从进入方向压到轨道电路时,它会发一个消息给计算机;当这一勾车的最后一对车轮从出清方向压到轨道电路时,它也会发一个消息

22、给计算机。 (2)(3)系统为每一个道岔开设一张勾车进路表,保存所来勾车的进路编码。 返回目录第14页/共29页第十四页,共30页。 2.3.1 线程的概念(ginin) 2.3 线程 1.引入线程的原因(yunyn) 进程的两个(lin )属性 做法是将进程的两个属性拆开来,进程只作为“资源拥有者”,“调度和运行”则赋予线程。这样,CPU的利用率能得到更多的提高,使系统的效率得到更充分地发挥。.(1)(2)进程是系统资源分配的单位; 进程是系统调度运行的单位。 . 资源分配和调度运行彼此间是独立的。为提高进程的并发执行程度,减少系统在进程切换时所花费的开销,就出现了与进程管理相关联的更高级的

23、概念:线程。 .(a) 单进程,单线程(b) 单进程,多线程(c) 多进程,每个进程一个线程(d) 多进程,每个进程多个线程 在引入线程的操作系统中,线程是进程中的实体。实施CPU分配时,是把CPU分配给进程中可以并发执行的线程。因此,如果把进程理解为是操作系统在逻辑上需要完成的一个任务,那么线程则是完成该任务时可以并发执行的多个子任务。 .进程和线程之间的各种关系 第15页/共29页第十五页,共30页。2.线程的定义(dngy) 所谓“线程”,是指进程中实施处理机调度和分配的基本(jbn)单位。有了线程后,人们有时就把原先的进程称为“重载进程”,把线程称为“轻载进程”。 3.线程的状态(zh

24、ungti) 由于在进程内的线程共享程序和资源,因此创建线程无需进行资源分配,比创建一个进程要顺利和快捷得多;这也使得撤消线程比撤消一个进程所花费的时间短; .引入线程的好处 (1) 同一进程里线程间的切换是在进程的地址空间里进行,因此比进程间不同地址空间中的切换开销要少得多; (2) 进程里的线程可以随时访问该进程拥有的所有资源,无需做任何切换工作; (3) 同一进程中的诸多线程共享内存区域和文件,因此它们之间可以直接进行通信,不必通过系统内核。 (4). 创建:创建一个新进程时,同时就为该进程建立一个主线程,它可以再创建其他线程,新线程被排在就绪队列中。 . 阻塞:当线程等待一个事件时,它

25、将被阻塞,CPU转而去执行另一个就绪线程。线程阻塞引起的是同进程中线程间的调度和CPU分配;进程的阻塞引起的是不同进程间的重新调度和CPU分配。.唤醒:当线程等待的事件发生时,该线程由阻塞转为就绪,插入到就绪队列中。 返回目录第16页/共29页第十六页,共30页。 2.3.2 线程的实现(shxin) 1.用户(yngh)级线程方法 若有关线程的管理工作都是由运行在用户(yngh)空间的应用程序完成,那么这样的线程称为“用户(yngh)级线程”。完成线程管理的应用程序,称为“线程库”,它将被系统中的所有用户(yngh)程序共享使用。 2. 这时,用户程序被创建成为一个由内核管理的进程,与这个进

26、程相对应的线程则在用户空间里运行。 .内核级线程方法 线程库用户空间内核空间P进程线程. 由于一切活动都是针对一个进程发生的,并且都发生在用户空间里,系统感知不到这些活动的存在。系统内核仍然是以进程为单位管理和调度进程,指定其所处的状态 。用户空间内核空间P进程运行在用户态的线程管理在核心态的线程. 若有关线程管理的所有工作都是由内核完成的,用户空间里没有任何进行线程管理的程序,只是向应用程序提供相应的系统调用和应用程序编程接口),以便用户程序可以创建、执行、撤消线程。那么这样的线程称为“内核级线程”。 第17页/共29页第十七页,共30页。3. 组合(zh)方法 . 采用这种方法,用户(yn

27、gh)程序的所有线程都在一个进程内。内核为该进程以及内部的每一个线程(深色圆圈)维护上下文信息,调度在内核基于线程架构的基础上完成,线程运行则在用户(yngh)空间进行。 . 组合方法中,同一进程中的多个线程可以分配到不同处理器上并行地运行,这意味着一个(y )会引起阻塞的系统调用不必阻塞整个进程。这样组合式的管理方法,会综合用户级线程与内核级线程管理方法的优点,减少它们的缺点。 . 在组合式方法中,线程的创建在用户空间里完成,线程的调度等工作,是通过线程库来进行。一个用户程序中的多个用户级线程,被映射到一些内核级线程上。. 内核级线程可把同一进程中的多个线程调度分配到不同处理器中;若进程中的

28、一个线程被阻塞,内核可调度同一进程中的另一个线程投入运行,而不是整个进程都被阻塞。内核级线程的另一个优点是内核程序本身也可使用多线程技术。用户空间内核空间P2进程用户级线程内核级线程P1线程库. 内核级线程在同一个进程里进行线程切换时,是在内核模式下进行的。这相比用户级线程,就会显得复杂一些,所花费的时间要多一些。 返回目录第18页/共29页第十八页,共30页。 调度切换:不同进程间的调度切换,系统要花费很大的开销(比如,要从这个地址空间转到那个地址空间,要保护现场(xinchng)等);同一进程的线程间的切换,无须转换地址空间,从而减少了系统的开销。 通信关系:不同进程间的通信,必须使用操作

29、系统提供的进程通信机制;同一进程各个线程间的通信,可以直接通过访问共享的进程地址(dzh)空间来实现。 地址空间:不同进程的地址空间是相互独立(dl)的,而同一个进程中的各个线程共享着同一个用户地址空间。 两个堆栈指针,一个指向用户栈(线程在用户态下时,使用自己的用户栈),一个指向系统栈(线程在核心态下运行时,使用系统栈); 2.3.3 线程与进程的关系 1.线程与进程的关系 .线程控制块( TCB)的三部分内容 (1) 一个唯一的线程标识; (2)(3) 一个私用的现场保护区,存放现场保护信息(如处理机的各种寄存器内容)和其他与线程有关的信息。 PCB数据程序用户栈系统栈寄存器单线程进程模型

30、进程PCB数据程序用户栈系统栈寄存器TCB1用户栈系统栈寄存器TCB2用户栈系统栈寄存器TCB3线程1线程2线程3进程多线程进程模型进程和线程的几点不同 .(1)(2)(3)第19页/共29页第十九页,共30页。 一个管理窗口系统的进程,提供显示器上有关窗 口的各种操作:窗口写、移动(ydng)窗口、改变 窗口尺寸等的程序。进程拥有的资源是物 理显示器。如图所示,三个窗口线程都将共享着进程的资源,使用同一个程序来把信息写到显示器的某一部分上,每一个线程的执行独立于其他线程。 例2-7 :窗口(chungku)线程窗口(chungku)进程三个窗口显示器处理机管理的新含义 2. 调度:引入线程后

31、,进程是资源的拥有者,线程是处理机调度和分配的单位。在同一进程内,线程的切换不引起进程的切换;由一个进程中的线程切换到另一个进程中的线程时,就要引起进程间的切换。 . 并发:引入线程后,不仅进程之间可以并发执行,而且一个进程内的多个线程之间也可以并发执行,因此系统具有了更好的并发性,进而使系统的资源利用率和吞吐率大大提高。. 资源:引入线程后,进程内的所有线程共享该进程拥有的全部资源;线程只有很少一些运行时必需的资源,如程序计数器、一组寄存器和堆栈等。 . 开销:创建和撤消进程时,系统要做资源的分配和回收工作;进程间进行切换时,系统要为其保存现场信息,将原进程内容调出至辅存,将新进程内容调入内

32、存等。同一进程内的线程有相同地址空间,它们间的切换不涉及存储器管理方面的操作。 返回目录第20页/共29页第二十页,共30页。 系统调用接口(ji ku)。进程通过它进入Linux内核,并得到所提供的各种特定服务。 用户进程。用户应用程序是运行在Linux内核(ni h)上的一个庞大的软件集合。当一个用户程序在操作系统上运行时,它就成为一个进程。在Linux里常把进程称为“任务”。 2.4 Linux的进程(jnchng) o2.4.1 Linux进程 Linux内核 1. Linux内核,指的是所有Linux发布版本的核心程序。整个系统由四个部分组成: (1)系统调用接口内核子系统硬件进程1

33、进程2进程n用户进程Linux内核进程调度存储管理虚拟文件系统网络进程间通信(2)(3) Linux内核。它负责管理和使用系统中的各种资源(如内存空间、磁盘空间、磁盘上的文件),以及启动并运行程序等。Linux内核并发地运行多个进程,并使各种进程公平、合理地使用各种资源,保证进程之间互不干扰地安全运行。(4) 硬件。这是安装Linux时需要的所有可能的物理设备,是支撑Linux运行的硬件环境,比如CPU、内存储器、磁盘、网络硬件等。第21页/共29页第二十一页,共30页。Linux的进程(jnchng)控制块 2. Linux中,把传统的进程控制块PCB称为进程描述符,用于记录每个进程所做的事

34、情(sh qing)。每个PCB都是一个task_struct的结构式数据类型。 Linux系统(xtng)中的进程,由四个部分组成 .内核栈PCB(task_struct 结构)8KB52个字节高地址低地址内核栈的增长方向8140个字节(1)一段可执行的程序; (2) 一个专用的系统栈空间,用来保存中断现场信息和进程进入内核模式后执行子程序(函数)嵌套调用的返回现场信息; (3)进程控制块PCB(task_struct结构); (4)独立的存储空间。 每个进程的系统栈和PCB间存在着紧密关系,为了节省存储空间,Linux把每个进程的PCB和内核栈存放在一起,共占有8KB的内存区。 . Lin

35、ux的进程状态及其变迁 3. 可运行状态:当一个进程正在被CPU执行,或已经准备就绪随时可由调度程序调度执行,则称该进程处于“可运行”状态。 (1)(2) 可中断等待状态 :当一个运行进程需等待某事件的发生、等待时允许由其他进程通过发信号而唤醒,那么就把它的状态由“可运行”变迁为“可中断的等待”。在所等待的事件或信号到来时,进程的等待结束,状态变迁为“可运行”。 第22页/共29页第二十二页,共30页。 不可中断等待状态 :这是一种与“可中断的等待”类似的状态,只是在等待期间(qjin)不能被信号打断。 (3)(4) 暂停状态 :当运行进程接到暂停执行的信号(比如程序正在接受调试)时,其状态就

36、由“运行”变迁(bin qin)成为“暂停”。 创建一个(y )进程TASK_RUNNING(可运行状态)时间片到调度TASK_UNINTERRUPTIBLE(不可中断等待状态)TASK_INTERRUPTIBLE(可中断等待状态)TASK_STOPPED(暂停状态)TASK_ZOMBIE(僵死状态)占有CPU运行等待事件发生等待事件或信号发生等待的事件已发生等待的事件或信号已发生收到暂停信号进程被终止收到结束暂停信号(5) 僵死状态:由于某种原因进程已被终止执行,正在归还资源,但其PCB还没有释放。这时的进程就处于僵死状态。Linux的进程标识符 4. 进程标识符:在Linux进程的PCB里

37、,字段pid存放进程标识符,用来唯一地标识进程。 . 用户标识符:在Linux里,每个用户都有一个唯一的数字与之对应,称为用户标识符。它存放在进程PCB的字段uid里。 . Linux将用户划分成组,每个用户可分属一个或多个用户组。组由一个唯一的数字来标识,称为组标识符。组标识符存放在进程PCB的字段gid里。 返回目录第23页/共29页第二十三页,共30页。o2.4.2 Linux的几种链接(lin ji)信息 进程(jnchng)链表 1. Linux启动时,创建了一个(y )非常特殊的进程,它的名字是init,进程标识符PID为1。 每个进程的PCB里有两个task_struct型指针字

38、段,作用是: prev_task:向前指针,指向链表中本进程前面的那个进程的PCB; next_task:向后指针,指向链表中本进程后面的那个进程的PCB。 init进程的PCBnext_taskprev_task进程1的PCBnext_taskprev_task进程2的PCBnext_taskprev_task进程3的PCBnext_taskprev_task进程n的PCBnext_taskprev_task系统中的所有进程“可运行”队列 2. PCB里有名为prev_run和next_run的两个task_struct型指针字段,作用是: prev_run:向前指针,指向链表中本进程前的那

39、个“可运行”状态进程的PCB;next_run:向后指针,指向链表中本进程后的那个“可运行”状态进程的PCB。 . 为提高调度时的查找速度,Linux是以优先级为依据建立“可运行”队列的。Linux进程优先级的允许范围从0到139,因此系统总共维护着140个“可运行”的队列。 第24页/共29页第二十四页,共30页。 利用散列表pidhash里的pidhash_next和pidhash_pprev,以及进程(jnchng)PCB里的字段pidhash_next和pidhash_pprev,就能基于散列表的索引值形成一个个进程(jnchng)PCB的双向链表。 PID散列链表 2. 为了加快查找

40、过程,理想的做法是通过某个函数,利用进程(jnchng)的PID值算出进程(jnchng)PCB所在的位置。这实际上就是所谓的散列技术。 . Linux引入了散列技术,并利用链地址法来处理PID冲突。即如果两个不同的PID计算出的PCB在散列表的索引值相同(冲突),那么就把这两个PCB组成(z chn)链表链接在一起。 pidhash_nextpidhash_pprevpidhash_pprevpidhash_nextpidhash_nextpidhash_pprevpidhash_nextpidhash_pprevpidhash_nextpidhash_pprevpidhash_nextpi

41、dhash_pprevpidhash散列表0199散列表的一个元素进程的PCB进程的PCB进程的PCB进程的PCB 为实现PID散列链表,Linux开辟了名为pidhash的数组作为散列表。该表的每个元素由两个task_struct型指针组成: pidhash_next指向pidhash散列表里该索引值链表中的下一个PCB; pidhash_pprev指向pidhash散列表里该索引值链表中的前一个PCB。.第25页/共29页第二十五页,共30页。4.进程(jnchng)家族关系链 .p_opptr:指向(zh xin)初始父进程的指针; 创建进程的进程称为父进程,被创建的进程称为子进程。如果

42、一个(y )进程创建了若干个子进程,那么这些子进程之间就是兄弟关系。Linux的PCB里专门有反映进程间关系的task_struct型指针字段 。p_pptrr:指向父进程的指针; p_cptr:指向最新子进程的指针; p_ysptr:指向弟进程的指针; p_osptr:指向兄进程的指针。 P0P1P2P3P4指向父进程指向兄进程指向弟进程指向最新子进程图例:各种家族指针(1)(2)(3)(4)(5) 比如,进程P0创建三个子进程,P1、P2、P3,进程P3又创建了一个进程P4。那么,这五个进程间的关系如图所示。从图中看出,进程P0是进程P1、P2、P3的父进程;进程P3是进程P4的父进程;P1是P2的兄进程,P2是P3的兄进程;P2是P1的弟进程,P3是P2的弟进程;P3是P1的最新子进程,P4是P3的最新子进程;如此等等。 .返回目录第26页/共29页第二十六页,共30页。o2.4.3 Linux进程

温馨提示

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

评论

0/150

提交评论