操作系统2进程与线程课件

上传人:新** 文档编号:567554399 上传时间:2024-07-21 格式:PPT 页数:29 大小:1.59MB
返回 下载 相关 举报
操作系统2进程与线程课件_第1页
第1页 / 共29页
操作系统2进程与线程课件_第2页
第2页 / 共29页
操作系统2进程与线程课件_第3页
第3页 / 共29页
操作系统2进程与线程课件_第4页
第4页 / 共29页
操作系统2进程与线程课件_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《操作系统2进程与线程课件》由会员分享,可在线阅读,更多相关《操作系统2进程与线程课件(29页珍藏版)》请在金锄头文库上搜索。

1、第2章 进程与线程本章目录本章目录2.1 进程的概念2.1.1 多道程序设计环境下的程序特点2.1.2 进程的定义2.2 进程的管理2.2.1 进程控制块2.2.2 进程控制块队列2.4.3 Linux进程的生存过程2.2.3 进程控制的系统调用命令2.1.3 进程的状态及状态变迁2.3 线程2.3.1 线程的概念2.3.2 线程的实现2.3.3 线程与进程的关系2.4 Linux的进程2.4.1 Linux进程2.4.2 Linux的几种链接信息操作系统2进程与线程 2.1 进程的概念进程的概念 o2.1.1多道程序设计环境下的程序特点多道程序设计环境下的程序特点 .单道程序设计环境下的程序

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

3、程序P1调用echo()函数,getchar()接收到从键盘输入的字符x,在将其存于变量chin后被中断; 程序P1从断点恢复执行。此时由于P2调用了echo(),chin里原先的x被y所覆盖。于是,在屏幕上显示的是y,而不是x。 程序P1调用echo()函数,getchar()接收到从键盘输入的字符x,然后在屏幕上显示出字符x;. 状态的多变性:诸多程序在运行过程中有着各种制约关系,致使内存中每一个程序的状态总在不断的变化之中:时而获得CPU处于运行状态;时而由于输入/输出或申请某种资源未得到满足而只好挂起来等待。它们走走停停,停停走走,交替式地向前推进,直至终点。 例例2-1 :在多道程序

4、设计环境下,“结果再现性”被打破的简单例子 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进程与线程.o2.1.2 进程的定义进程的定义1. 进程的定义进程的定义 .进程是程序的一次运行活动;进程的运行活动是建立在某个数据集合之上的;进程要在获得资源的基础上从事自己

5、的运行活动。 所谓“进程”是指一个程序在给定数据集合上的一次执行过程,是系统进行资源分配和运行调度的独立单位。 可从三个方面来描述进程: (1)(2)(3)例例2-2 :驼峰溜放控制过程中的进程 驼峰到达场编组场溜放中的一勾车雷达测速、测长道岔(轨道电路)一列新货车一列解体货车缓行器12345678股道号溜放中的一勾车扳道岔程序 .缓行器控制程序 .雷达测速程序 .雷达测长程序 .巡回检测程序 操作系统2进程与线程2. 进程与程序的关系进程与程序的关系 进程是一个动态的概念,强调的是程序的一次“执行”过程;程序则是一组有序指令的集合,在多道程序设计环境下,它不涉及“执行”,是一个静态的概念。

6、. 不同进程可执行同一个程序。由进程的定义可知,区分进程的条件一是所执行的程序,二是数据集合。即使多个进程执行相同的一个程序,只要它们运行在不同的数据集合上,它们就是不同的进程。 . 每个进程都有自己的生命期。进程的本质是程序的一次执行过程,当系统要完成某项工作时,它就“创建”一个进程,以便执行事先编写好的、完成该工作的那段程序。程序执行完毕、完成预定的任务后,系统就“撤消”这个进程,收回它所占用的资源。一个进程创建后,系统就感知到它的存在;一个进程撤消后,系统就无法再感知到它。于是从创建到撤消,这个时间段就是一个进程的“生命期”。 . 进程之间具有并发性。在一个系统中,同时会存在多个进程,与

7、它们对应的多个程序同时在系统中运行,轮流占用CPU和各种资源。这正是多道程序设计的初衷,说明这些进程在系统中并发执行着。 . 进程间会相互制约。由于进程是系统中资源分配和运行调度的单位,因此在对资源共享和竞争中,必然会相互制约,影响了各自向前推进的速度。 操作系统2进程与线程 通常,系统进程运行在核心态,用户进程运行在用户态。不过,在微内核模式下,只有那些执行基本功能程序的进程,运行在核心态,那些执行非基本程序的进程,则以各种服务的形式运行在用户态。 系统进程与用户进程都要使用系统中的各种资源,它们都是资源分配与运行调度的独立单位,但系统进程的使用级别,应该高于用户进程。也就是说,在双方出现对

8、资源的竞争时,系统进程有优先获得资源、优先得到运行的权利。只有这样,才能保证计算机系统高效、有序的工作。 系统进程直接管理软、硬件资源的有关活动;而用户进程则不得插手资源管理,在需要使用资源时,必须向系统提出申请,由系统统一调度与分配。 系统进程间的相互关系由操作系统负责协调,以利于增加系统的并行性,提高资源的整体利用率;用户进程间的相互关系由用户自己(在程序中)安排。不过,操作系统会向用户提供一定的协调手段(以系统调用命令的形式)。 3. 系统进程与用户进程系统进程与用户进程 . 在多道程序设计系统中,既有操作系统程序,又有用户程序,因此整个系统中存在着两类进程:一类是系统进程,一类是用户进

9、程。 . 操作系统中用于管理系统资源的那些可以并发执行的程序,构成了一个个系统进程,它们提供系统的服务,分配系统的资源;而可以并发执行的用户程序段,形成一个个用户进程,它们是操作系统的服务对象,是系统资源的实际享用者。 .系统进程与用户进程的主要区别 :(1)(2)(3)(4)返回目录操作系统2进程与线程 终止:进程或正常结束,或因某种原因被强制结束。这时,系统正在为其进行善后处理。 阻塞:进程正在等待某事件(如I/O完成)的发生。在事件到来之前,即使把CPU分配给这个进程,它也无法运行。阻塞状态有时也被称为等待状态。 运行:进程获得CPU正在被执行中。若系统只有一个CPU,那么任何时候系统中

10、最多只有一个进程处于运行状态。 就绪:进程已具备运行的条件,只要有机会获得CPU,它就可以投入运行。 创建:进程正在初创时期,操作系统还没把它列入可执行的进程行列。 o2.1.3 进程的状态及状态变迁进程的状态及状态变迁 1. 进程的基本状态和状态变迁进程的基本状态和状态变迁 .就绪提交运行阻塞终止调度撤销超时事件发生等待事件三种最基本的状态创建进程的五种状态(1)(2)(3)(4) (5)进程状态的变迁 进程从一个状态改变成另一个状态,称为进程状态的“变迁”。箭头上的文字,是引起状态变迁的原因。并不是所有的进程状态之间都可发生变迁。. 可能的变迁为:创建就绪 ,就绪运行 ,运行就绪,运行阻塞

11、 ,阻塞就绪 ,运行终止 操作系统2进程与线程 就绪/挂起:进程在辅存。只要被激活,进程就可以调入内存,如果获得CPU就可以投入运行。 2. 对进程状态更细致的划分对进程状态更细致的划分 就绪/挂起就绪激活运行阻塞终止调度撤销超时事件发生等待事件挂起阻塞/挂起激活挂起事件发生创建提交提交挂起. 若内存中现有的进程都在等待I/O的完成,CPU只能空闲运转。这无疑是对系统资源的一种浪费。 .使用磁盘与内存间的交换技术,可达到提高CPU利用率的目的。新增两个状态 (1)(2) 阻塞/挂起:进程在辅存等待事件的发生。只要被激活,进程就可以调入到内存里去等待事件的发生。 . 处于这两种状态的进程,表示它

12、们是在辅存而不是内存。只有通过“激活”,才可以使这些进程的状态变迁为“就绪”或“阻塞”,从而进入内存。 . 这时,比较重要的变迁是:阻塞阻塞/挂起 ,阻塞/挂起就绪/挂起 ,就绪/挂起就绪 ,就绪就绪/挂起 ,创建就绪,创建就绪/挂起,阻塞/挂起阻塞 ,运行就绪/挂起 。返回目录操作系统2进程与线程 进程控制块里包括四种基本信息:标识信息、现场保护区信息、调度信息以及管理信息 。 程序代码及与代码相关联的数据集合,是组成一个进程的实体。但它们都是静态文本,无法反映进程的各种动态特征。 2.2 进程的管理进程的管理 o2.2.1 进程控制块进程控制块 .1. 进程控制块进程控制块 为便于管理和控

13、制进程的执行,为随时刻画进程的动态特性,为反映进程间的相互关系,操作系统用一个与进程有关的数据结构来完成这样的任务。这个数据结构被称为“进程控制块(PCB)”,它由操作系统创建和管理。标识信息现场保护区信息调度信息管理信息进程标识符(进程名)进程标识数(PID)家族关系(父进程)家族关系(子孙进程)通用寄存器指令计算器程序状态字(PSW)用户栈指针进程状态进程优先数(级/权)等待原因队列指针程序存放位置资源使用历史打开的文件数据存放位置 由于进程控制块PCB里包含着一个进程所需要的所有信息,因此它是操作系统中最重要的一种数据结构。进程的PCB是系统感知一个进程实际存在的唯一实体。 .操作系统2

14、进程与线程2. 进程的三个组成部分进程的三个组成部分 .操作系统中进程由三个部分组成,称为“进程映像” 。(1)(2)(3)程序:进程将要执行的程序; 数据:用户空间中的可修改部分,如数据、堆栈、可修改程序; 进程控制块PCB:记录操作系统管理、控制进程所需要的数据信息。 进程映像的表示PCBPCBPCB1PCB2程序程序程序数据集合数据集合数据集合1数据集合2(a)(b)(c)3. 进程间的切换进程间的切换 进程P0进程P1操作系统中断或系统调用保护现场到PCB0从PCB1现场保护区获取现场信息中断或系统调用保护现场到PCB1从PCB0现场保护区获取现场信息执行执行执行 被打断的断点x从断点

15、x恢复执行 被打断的断点y返回目录操作系统2进程与线程 PCB中可以有多个队列指针,以反映进程间的不同关系,比如用另一个指针反映出进程间的家族关系。 还可以有就绪/挂起队列、阻塞/挂起队列等; 队列最后一个PCB的“队列指针”里,放队列结束标志,如“-1”; 操作系统要为每个队列设置一个头指针,通过它及队列中各PCB里的队列指针,可以得到该队列里的所有进程的PCB; o2.2.2 进程控制块队列进程控制块队列. 操作系统是通过PCB来管理系统中 的进程的。最常用的办法是根据进程所处状态的不同,通过PCB中的链接指针,形成各种管理队列。 .运行队列头指针就绪队列头指针PCBPCBPCBPCBPC

16、B-1阻塞队列1头指针PCBPCB-1阻塞队列2头指针PCBPCBPCBPCB-1PCB队列指针(a) 带有队列指针的PCB(b) 由PCB组成的各种队列几点说明(1)(2)(3)(4)返回目录操作系统2进程与线程 按系统所采用的调度算法,将其PCB排入就绪队列或就绪/挂起队列。 调用创建进程原语后,系统中出现一个新的进程,就会感知到这个进程的存在。一个进程创建(或“派生”)另一个进程,前者称为父进程,后者称为子进程。 o2.2.3 进程控制的系统调用命令进程控制的系统调用命令 在执行期间不能被打断、不能被分割的程序段,在操作系统里称作“原语”、“原子操作”或“不可分割的操作”。 .有关进程控

17、制的系统调用命令都是以原语的形式出现的。 1. 创建进程原语创建进程原语 屏蔽中断申请一个PCB分配一个标识填写PCB将进程置为就绪或就绪/挂起状态,到相应队列排队开中断不能被分割的整体.创建进程原语程序主要应该完成的工作 (1)为新进程申请一个PCB; (2)为新进程分配一个唯一的标识; (3) 根据创建者提供的信息,填写进程控制块PCB里的各项内容; (4). 创建进程原语的图中,“屏蔽中断”及“开中断”两个操作,是为了保证整个执行流程不被分割而设置的。也就是说,这四项工作必须作为一个整体一次执行完毕,中间不能被别的操作打断。这是原语的要求。 操作系统2进程与线程2. 撤消进程原语撤消进程

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

19、CPU的运行现场保护到该进程PCB的现场保护区; (3)把进程的状态由运行修改为阻塞,并到相关的阻塞队列里排队; 转向操作系统的进程调度程序,将CPU分配给另外一个进程使用。 操作系统2进程与线程.4. 唤醒进程原语唤醒进程原语 当所等待的事件发生以后,进程就应该被唤醒,让其去参与对CPU的竞争。调用唤醒进程原语后,一个进程又可以“走”了。 .唤醒进程原语应该完成的工作 (1)(2)将进程从相应的阻塞队列上摘下来; (3)把进程的状态由阻塞修改为就绪,并到就绪队列里排队; 转向操作系统的进程调度程序,将CPU分配给另外一个进程使用。 5. 挂起进程原语挂起进程原语 . 当系统为了获得所需的内存

20、空间,在主-辅存之间交换进程时,进程才会有挂起状态 。.挂起进程原语应该完成的工作 (1)(2)得到需要挂起的进程的PCB,将其从相应队列里摘下; (3) 申请位于辅存上的交换区空间,将进程映像的部分或全部写入交换区,并将交换区地址记入该进程PCB; 根据进程原先的状态,把其状态修改为阻塞/挂起,或就绪/挂起; (4)系统收回进程所占用的内存空间。 操作系统2进程与线程 通过对驼峰溜放控制过程的简略描述,理解进程控制原语的应用。 激活是针对处于“阻塞/挂起”或“就绪/挂起”状态的进程实行的操作。由于它是挂起的“逆”操作,因此激活进程的原因就与挂起的原因相关。 每股道是一个“进路”。对任何一个道

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

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

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

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

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

26、空间内核空间P进程线程. 由于一切活动都是针对一个进程发生的,并且都发生在用户空间里,系统感知不到这些活动的存在。系统内核仍然是以进程为单位管理和调度进程,指定其所处的状态 。用户空间内核空间P进程运行在用户态的线程管理在核心态的线程. 若有关线程管理的所有工作都是由内核完成的,用户空间里没有任何进行线程管理的程序,只是向应用程序提供相应的系统调用和应用程序编程接口),以便用户程序可以创建、执行、撤消线程。那么这样的线程称为“内核级线程”。 操作系统2进程与线程3. 组合方法组合方法 . 采用这种方法,用户程序的所有线程都在一个进程内。内核为该进程以及内部的每一个线程(深色圆圈)维护上下文信息

27、,调度在内核基于线程架构的基础上完成,线程运行则在用户空间进行。 . 组合方法中,同一进程中的多个线程可以分配到不同处理器上并行地运行,这意味着一个会引起阻塞的系统调用不必阻塞整个进程。这样组合式的管理方法,会综合用户级线程与内核级线程管理方法的优点,减少它们的缺点。 . 在组合式方法中,线程的创建在用户空间里完成,线程的调度等工作,是通过线程库来进行。一个用户程序中的多个用户级线程,被映射到一些内核级线程上。. 内核级线程可把同一进程中的多个线程调度分配到不同处理器中;若进程中的一个线程被阻塞,内核可调度同一进程中的另一个线程投入运行,而不是整个进程都被阻塞。内核级线程的另一个优点是内核程序

28、本身也可使用多线程技术。用户空间内核空间P2进程用户级线程内核级线程P1线程库. 内核级线程在同一个进程里进行线程切换时,是在内核模式下进行的。这相比用户级线程,就会显得复杂一些,所花费的时间要多一些。 返回目录操作系统2进程与线程 调度切换:不同进程间的调度切换,系统要花费很大的开销(比如,要从这个地址空间转到那个地址空间,要保护现场等);同一进程的线程间的切换,无须转换地址空间,从而减少了系统的开销。 通信关系:不同进程间的通信,必须使用操作系统提供的进程通信机制;同一进程各个线程间的通信,可以直接通过访问共享的进程地址空间来实现。 地址空间:不同进程的地址空间是相互独立的,而同一个进程中

29、的各个线程共享着同一个用户地址空间。 两个堆栈指针,一个指向用户栈(线程在用户态下时,使用自己的用户栈),一个指向系统栈(线程在核心态下运行时,使用系统栈); o2.3.3 线程与进程的关系线程与进程的关系 1. 线程与进程的关系线程与进程的关系 .线程控制块( TCB)的三部分内容 (1)一个唯一的线程标识; (2)(3) 一个私用的现场保护区,存放现场保护信息(如处理机的各种寄存器内容)和其他与线程有关的信息。 PCB数据程序用户栈系统栈寄存器单线程进程模型进程PCB数据程序用户栈系统栈寄存器TCB1用户栈系统栈寄存器TCB2用户栈系统栈寄存器TCB3线程1线程2线程3进程多线程进程模型进

30、程和线程的几点不同 .(1)(2)(3)操作系统2进程与线程 一个管理窗口系统的进程,提供显示器上有关窗 口的各种操作:窗口写、移动窗口、改变 窗口尺寸等的程序。进程拥有的资源是物 理显示器。如图所示,三个窗口线程都将共享着进程的资源,使用同一个程序来把信息写到显示器的某一部分上,每一个线程的执行独立于其他线程。 例例2-7 :窗口线程窗口进程三个窗口显示器处理机管理的新含义处理机管理的新含义 2. 调度:引入线程后,进程是资源的拥有者,线程是处理机调度和分配的单位。在同一进程内,线程的切换不引起进程的切换;由一个进程中的线程切换到另一个进程中的线程时,就要引起进程间的切换。 . 并发:引入线

31、程后,不仅进程之间可以并发执行,而且一个进程内的多个线程之间也可以并发执行,因此系统具有了更好的并发性,进而使系统的资源利用率和吞吐率大大提高。. 资源:引入线程后,进程内的所有线程共享该进程拥有的全部资源;线程只有很少一些运行时必需的资源,如程序计数器、一组寄存器和堆栈等。 . 开销:创建和撤消进程时,系统要做资源的分配和回收工作;进程间进行切换时,系统要为其保存现场信息,将原进程内容调出至辅存,将新进程内容调入内存等。同一进程内的线程有相同地址空间,它们间的切换不涉及存储器管理方面的操作。 返回目录操作系统2进程与线程 系统调用接口。进程通过它进入Linux内核,并得到所提供的各种特定服务

32、。 用户进程。用户应用程序是运行在Linux内核上的一个庞大的软件集合。当一个用户程序在操作系统上运行时,它就成为一个进程。在Linux里常把进程称为“任务”。 2.4 Linux的进程的进程 o2.4.1 Linux进程进程 Linux内核内核 1. Linux内核,指的是所有Linux发布版本的核心程序。整个系统由四个部分组成: (1)系统调用接口内核子系统硬件进程1进程2进程n用户进程Linux内核进程调度存储管理虚拟文件系统网络进程间通信(2)(3) Linux内核。它负责管理和使用系统中的各种资源(如内存空间、磁盘空间、磁盘上的文件),以及启动并运行程序等。Linux内核并发地运行多

33、个进程,并使各种进程公平、合理地使用各种资源,保证进程之间互不干扰地安全运行。(4) 硬件。这是安装Linux时需要的所有可能的物理设备,是支撑Linux运行的硬件环境,比如CPU、内存储器、磁盘、网络硬件等。操作系统2进程与线程Linux的进程控制块的进程控制块 2. Linux中,把传统的进程控制块PCB称为进程描述符,用于记录每个进程所做的事情。每个PCB都是一个task_struct的结构式数据类型。 Linux系统中的进程,由四个部分组成 .内核栈PCB(task_struct 结构)8KB52个字节高地址低地址内核栈的增长方向8140个字节(1) 一段可执行的程序; (2) 一个专

34、用的系统栈空间,用来保存中断现场信息和进程进入内核模式后执行子程序(函数)嵌套调用的返回现场信息; (3) 进程控制块PCB(task_struct结构); (4) 独立的存储空间。 每个进程的系统栈和PCB间存在着紧密关系,为了节省存储空间,Linux把每个进程的PCB和内核栈存放在一起,共占有8KB的内存区。 . Linux的进程状态及其变迁的进程状态及其变迁 3. 可运行状态:当一个进程正在被CPU执行,或已经准备就绪随时可由调度程序调度执行,则称该进程处于“可运行”状态。 (1)(2) 可中断等待状态 :当一个运行进程需等待某事件的发生、等待时允许由其他进程通过发信号而唤醒,那么就把它

35、的状态由“可运行”变迁为“可中断的等待”。在所等待的事件或信号到来时,进程的等待结束,状态变迁为“可运行”。 操作系统2进程与线程 不可中断等待状态 :这是一种与“可中断的等待”类似的状态,只是在等待期间不能被信号打断。 (3)(4) 暂停状态 :当运行进程接到暂停执行的信号(比如程序正在接受调试)时,其状态就由“运行”变迁成为“暂停”。 创建一个进程TASK_RUNNING(可运行状态)时间片到调度TASK_UNINTERRUPTIBLE(不可中断等待状态)TASK_INTERRUPTIBLE(可中断等待状态)TASK_STOPPED(暂停状态)TASK_ZOMBIE(僵死状态)占有CPU运

36、行等待事件发生等待事件或信号发生等待的事件已发生等待的事件或信号已发生收到暂停信号进程被终止收到结束暂停信号(5) 僵死状态:由于某种原因进程已被终止执行,正在归还资源,但其PCB还没有释放。这时的进程就处于僵死状态。Linux的进程标识符的进程标识符 4. 进程标识符:在Linux进程的PCB里,字段pid存放进程标识符,用来唯一地标识进程。 . 用户标识符:在Linux里,每个用户都有一个唯一的数字与之对应,称为用户标识符。它存放在进程PCB的字段uid里。 . Linux将用户划分成组,每个用户可分属一个或多个用户组。组由一个唯一的数字来标识,称为组标识符。组标识符存放在进程PCB的字段

37、gid里。 返回目录操作系统2进程与线程o2.4.2 Linux的几种链接信息的几种链接信息 进程链表进程链表 1. Linux启动时,创建了一个非常特殊的进程,它的名字是init,进程标识符PID为1。 每个进程的PCB里有两个task_struct型指针字段,作用是: prev_task:向前指针,指向链表中本进程前面的那个进程的PCB; next_task:向后指针,指向链表中本进程后面的那个进程的PCB。 init进程的PCBnext_taskprev_task进程1的PCBnext_taskprev_task进程2的PCBnext_taskprev_task进程3的PCBnext_t

38、askprev_task进程n的PCBnext_taskprev_task系统中的所有进程“可运行可运行”队列队列 2. PCB里有名为prev_run和next_run的两个task_struct型指针字段,作用是: prev_run:向前指针,指向链表中本进程前的那个“可运行”状态进程的PCB;next_run:向后指针,指向链表中本进程后的那个“可运行”状态进程的PCB。 . 为提高调度时的查找速度,Linux是以优先级为依据建立“可运行”队列的。Linux进程优先级的允许范围从0到139,因此系统总共维护着140个“可运行”的队列。 操作系统2进程与线程 利用散列表pidhash里的p

39、idhash_next和pidhash_pprev,以及进程PCB里的字段pidhash_next和pidhash_pprev,就能基于散列表的索引值形成一个个进程PCB的双向链表。 PID散列链表散列链表 2. 为了加快查找过程,理想的做法是通过某个函数,利用进程的PID值算出进程PCB所在的位置。这实际上就是所谓的散列技术。 . Linux引入了散列技术,并利用链地址法来处理PID冲突。即如果两个不同的PID计算出的PCB在散列表的索引值相同(冲突),那么就把这两个PCB组成链表链接在一起。 pidhash_nextpidhash_pprevpidhash_pprevpidhash_nex

40、tpidhash_nextpidhash_pprevpidhash_nextpidhash_pprevpidhash_nextpidhash_pprevpidhash_nextpidhash_pprevpidhash散列表0199散列表的一个元素进程的PCB进程的PCB进程的PCB进程的PCB 为实现PID散列链表,Linux开辟了名为pidhash的数组作为散列表。该表的每个元素由两个task_struct型指针组成: pidhash_next指向pidhash散列表里该索引值链表中的下一个PCB; pidhash_pprev指向pidhash散列表里该索引值链表中的前一个PCB。.操作系统

41、2进程与线程4. 进程家族关系链进程家族关系链 .p_opptr:指向初始父进程的指针; 创建进程的进程称为父进程,被创建的进程称为子进程。如果一个进程创建了若干个子进程,那么这些子进程之间就是兄弟关系。Linux的PCB里专门有反映进程间关系的task_struct型指针字段 。p_pptrr:指向父进程的指针; p_cptr:指向最新子进程的指针; p_ysptr:指向弟进程的指针; p_osptr:指向兄进程的指针。 P0P1P2P3P4指向父进程指向兄进程指向弟进程指向最新子进程图例:各种家族指针(1)(2)(3)(4)(5) 比如,进程P0创建三个子进程,P1、P2、P3,进程P3又

42、创建了一个进程P4。那么,这五个进程间的关系如图所示。从图中看出,进程P0是进程P1、P2、P3的父进程;进程P3是进程P4的父进程;P1是P2的兄进程,P2是P3的兄进程;P2是P1的弟进程,P3是P2的弟进程;P3是P1的最新子进程,P4是P3的最新子进程;如此等等。 .返回目录操作系统2进程与线程o2.4.3 Linux进程的生存过程进程的生存过程 Linux初启时运行在内核态。完成系统引导和初始化后,诞生了第一个进程:init进程。该进程为当前的每个终端创建管理进程,接收用户的登录信息。用户正确登录后,就为其创建名为shell的进程。此后用户与系统交互时,就由shell进程接收并解释用

43、户输入的命令,创建子进程执行该命令。执行命令的子进程又可能再创建子进程,从而形成了一棵倒长的树:根在上面,树枝在下面。 .系统中的进程个数系统中的进程个数 1.32位/字1024个字pidmap_array位图当这位为1时,表示系统里有PID等于3的进程这位不用. Linux中同时存在的进程数目是受限的,缺省情况下最大的PID值是32767。当PID达到这个上限值时,就必须使用已闲置的小PID值。 . Linux在内核里开辟一个有1024个字、每个字32个二进制位的区域,用它各位的顺序来表示PID值。整个区域称为一个“位图”,取名pidmap_array。位图里的某位为“1”,表示该位代表的P

44、ID值已被进程使用;某位为“0”,表示该位代表的PID值还没使用,可作为新进程的PID。 操作系统2进程与线程进程的创建进程的创建 2. 除了init进程外,运行在Linux系统中的其他进程,都是用系统调用fork和clone创建的。调用fork和clone的进程是父进程,被创建的进程是子进程。 . 子进程通过复制父进程而得到创建。使用fork和clone的区别是:fork是全部复制,是把父进程使用的所有资源全部通过复制而“传”给子进程;clone则是通过设置各种参数,对资源做有选择地复制,没有被复制的就通过指针的复制让子进程共享。 . 不管是fork还是clone,它们都是调用内核函数do_

45、fork()来完成对子进程的创建。 . 在fork或clone调用结束时,父进程和子进程同时存在,都可以运行。这时,父进程的返回点与子进程的开始执行点是一样的(因为子进程基本继承了父进程的一切),Linux用返回值来区分不同情况。进程的执行进程的执行 3.为一个进程注入新“灵魂”的任务,在Linux里是由系统调用exec()来完成的。 . exec()有三个参数:待执行的文件名、参数列表、环境变量表。调用exec()就做下面的三件事情:用所给的执行程序代替原先的代码段;废弃原有的数据段,为新程序分配新的数据段;废弃原有的堆栈段,为新程序分配所需的堆栈段。 . 一个进程执行exec()后,除进程的PID没有改变外,它的代码段、数据段、堆栈段全都变了,成了一个不是原进程(代码段、数据段、堆栈段全是新的)的原进程(因为PID是原来的)。 返回目录操作系统2进程与线程

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

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