第三章-part1-进程管理_第1页
第三章-part1-进程管理_第2页
第三章-part1-进程管理_第3页
第三章-part1-进程管理_第4页
第三章-part1-进程管理_第5页
已阅读5页,还剩125页未读 继续免费阅读

下载本文档

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

文档简介

1、第第 3 3 章章 进程模型进程模型 v 伪并行:在一个瞬间,伪并行:在一个瞬间,CPUCPU只能运行一道程序。在只能运行一道程序。在1 1秒钟期间,秒钟期间, 它可能运行多道程序,从而给用户一种并行的错觉。伪并行它可能运行多道程序,从而给用户一种并行的错觉。伪并行 就是指就是指CPUCPU在多道程序之间快速的切换,也称为并发。为了在多道程序之间快速的切换,也称为并发。为了 对多个并发的活动进行跟踪,引入了进程概念。对多个并发的活动进行跟踪,引入了进程概念。 进程模型 v计算机上所有可运行的软件,通常包括操作系统,计算机上所有可运行的软件,通常包括操作系统, 被组织成若干顺序进程,简称进程。一

2、个进程就是被组织成若干顺序进程,简称进程。一个进程就是 一个正在执行的程序,包括程序计数器、寄存器和一个正在执行的程序,包括程序计数器、寄存器和 变量的当前值。变量的当前值。 v每个进程拥有它自己的虚拟每个进程拥有它自己的虚拟CPUCPU。而实际上,真正的。而实际上,真正的 CPUCPU在各进程之间来回切换。在各进程之间来回切换。 v为了理解这种系统,考虑在(伪并行)情况下运行为了理解这种系统,考虑在(伪并行)情况下运行 的进程集,要比试图跟踪的进程集,要比试图跟踪CPUCPU如何在程序间来回切换如何在程序间来回切换 简单得多。这种快速的切换称为多道程序。简单得多。这种快速的切换称为多道程序。

3、 进程模型 v 内存中有四道程序,内存中有四道程序,CPUCPU在这四个程序之间来回切换。在这四个程序之间来回切换。 进程模型 v 四个进程各自拥有自己的控制流程(即自己的程序计数器),四个进程各自拥有自己的控制流程(即自己的程序计数器), 并且每个都独立运行。并且每个都独立运行。 进程模型 v 在观察一段足够长的时间后,所有的进程都有所进在观察一段足够长的时间后,所有的进程都有所进 展,但在一个给定的瞬间,仅有一个进程真正在运展,但在一个给定的瞬间,仅有一个进程真正在运 行。行。 进程和程序之间的区别 v 想象一位有一手好厨艺的计算机科学家正在为他的女儿烘制想象一位有一手好厨艺的计算机科学家

4、正在为他的女儿烘制 生日蛋糕。他有做生日蛋糕的食谱,厨房里有所需的原料:生日蛋糕。他有做生日蛋糕的食谱,厨房里有所需的原料: 面粉、鸡蛋、糖、香草汁等等。在这个比喻中,做蛋糕的食面粉、鸡蛋、糖、香草汁等等。在这个比喻中,做蛋糕的食 谱就是程序谱就是程序( (即用适当形式描述的算法即用适当形式描述的算法) ),计算机科学家就是,计算机科学家就是 处理机处理机(CPU)(CPU),而做蛋糕的各种原料就是输入数据。进程就,而做蛋糕的各种原料就是输入数据。进程就 是厨师阅读食谱、取来各种原料、以及烘制蛋糕的一系列动是厨师阅读食谱、取来各种原料、以及烘制蛋糕的一系列动 作的总和。作的总和。 现在假设计算

5、机科学家的儿子哭着跑了进来,说他被一只蜜现在假设计算机科学家的儿子哭着跑了进来,说他被一只蜜 蜂螫了。计算机科学家就记录下他照着食谱做到哪儿了蜂螫了。计算机科学家就记录下他照着食谱做到哪儿了( (保保 存进程的当前状态存进程的当前状态) ),然后拿出一本急救手册,按照其中的,然后拿出一本急救手册,按照其中的 指示处理螫伤。这里,我们看到处理机从一个进程指示处理螫伤。这里,我们看到处理机从一个进程( (做蛋糕做蛋糕) ) 切换到另一个高优先级的进程切换到另一个高优先级的进程( (实施医疗救治实施医疗救治) ),每个,每个( (进程进程) ) 拥有各自的程序拥有各自的程序( (食谱和急救书食谱和急

6、救书) )。当蜜蜂螫伤处理完之后,。当蜜蜂螫伤处理完之后, 计算机科学家又回来做蛋糕,从他离开时的那一步继续做下计算机科学家又回来做蛋糕,从他离开时的那一步继续做下 去。去。 关键思想 v一个进程是某种类型的一个活动,它有程序、一个进程是某种类型的一个活动,它有程序、 输入、输出、及状态。单个处理机被若干进输入、输出、及状态。单个处理机被若干进 程共享,它使用某种调度算法决定何时停止程共享,它使用某种调度算法决定何时停止 一个进程的工作,并转而为另一个进程提供一个进程的工作,并转而为另一个进程提供 服务;服务; v进程是一个动态的执行过程。进程是一个动态的执行过程。 v可以把进程当成由一组元素

7、组成的实体,进程的两可以把进程当成由一组元素组成的实体,进程的两 个基本元素是程序代码(可能被执行相同程序的其个基本元素是程序代码(可能被执行相同程序的其 它进程共享)和与代码相关联的数据集。它进程共享)和与代码相关联的数据集。 v假设处理器开始执行该程序代码,我们就把这个执假设处理器开始执行该程序代码,我们就把这个执 行实体称为进程。行实体称为进程。 进程的其它定义 进程描述操作系统的控制结构 v 操作系统为了管操作系统为了管 理进程和资源,理进程和资源, 必须掌握关于每必须掌握关于每 个进程和资源当个进程和资源当 前状态的信息。前状态的信息。 普遍使用的方法普遍使用的方法 是,操作系统构是

8、,操作系统构 造并维护它所管造并维护它所管 理的每个实体的理的每个实体的 信息表。图中是信息表。图中是 这种方法的一般这种方法的一般 概念,操作系统概念,操作系统 维护着四种不同维护着四种不同 类型的表类型的表: :内存、内存、 I/OI/O、文件和进程。、文件和进程。 进程描述进程控制结构 v 进程最少必须包括一个或一组被执行的程序,以及与这些程进程最少必须包括一个或一组被执行的程序,以及与这些程 序相关联的局部变量、全局变量和任何已定义常量的数据单序相关联的局部变量、全局变量和任何已定义常量的数据单 元。因此,一个进程至少包括足够的内存空间,以保存该进元。因此,一个进程至少包括足够的内存空

9、间,以保存该进 程的程序和数据;此外,程序的执行通常涉及到用于跟踪过程的程序和数据;此外,程序的执行通常涉及到用于跟踪过 程调用和过程间参数传递的栈。最后,与每个进程相关联的程调用和过程间参数传递的栈。最后,与每个进程相关联的 还有操作系统用于控制进程的许多属性,通常,属性的集合还有操作系统用于控制进程的许多属性,通常,属性的集合 称为进程控制块称为进程控制块(Process Control Block , PCB)(Process Control Block , PCB)。 v 程序、数据、栈和属性的集合称为进程映像。程序、数据、栈和属性的集合称为进程映像。 背景知识:程序的内存分配背景知识

10、:程序的内存分配 v 一个由一个由c/C+c/C+编译的程序占用的内存分为以下几个部分:编译的程序占用的内存分为以下几个部分: 1 1、栈区(、栈区(stackstack) 由编译器自动分配释放由编译器自动分配释放 ,存放函数的参,存放函数的参 数值,局部变量的值等。操作方式类似于数据结构中的栈。数值,局部变量的值等。操作方式类似于数据结构中的栈。 2 2、堆区(、堆区(heapheap) 一般由程序员分配释放,一般由程序员分配释放, 若程序员不释若程序员不释 放,程序结束时可能由放,程序结束时可能由OSOS回收回收 。注意它与数据结构中的堆。注意它与数据结构中的堆 是两回事,分配方式倒是类似

11、于链表。是两回事,分配方式倒是类似于链表。 3 3、全局区(静态区)(、全局区(静态区)(staticstatic),全局变量和静态变量的,全局变量和静态变量的 存储是放在一块的,初始化的全局变量和静态变量在一块区存储是放在一块的,初始化的全局变量和静态变量在一块区 域,域, 未初始化的全局变量和未初始化的静态变量在相邻的另未初始化的全局变量和未初始化的静态变量在相邻的另 一块区域。一块区域。 程序结束后由系统释放程序结束后由系统释放 。 4 4、文字常量区、文字常量区 常量字符串就是放在这里的。常量字符串就是放在这里的。 程序结束后程序结束后 由系统释放由系统释放 。 5 5、程序代码区、程

12、序代码区存放函数体的二进制代码。存放函数体的二进制代码。 v /main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main() int b; 栈 char s = “abc”; /栈 char *p2; /栈 char *p3 = “123456”; /1234560在常量区,p3在栈上。 static int c =0; /全局(静态)初始化区 p1 = (char *)malloc(10); p2 = (char *)malloc(20); /分配得来得10和20字节的区域就在堆区 。 strcpy(p1, “123456”); /1234560放在

13、常量区,编译器可能会将它 与p3所指向的“123456”优化成一个地方。 进程描述进程控制结构 v在进程执行时,任意给定一个时间,进程都可以唯在进程执行时,任意给定一个时间,进程都可以唯 一的用以下元素表征:一的用以下元素表征: 标识符:跟这个进程相关的惟一标识符,用来区别其他进标识符:跟这个进程相关的惟一标识符,用来区别其他进 程。程。 状态:如果进程正在执行,那么进程处于执行态。状态:如果进程正在执行,那么进程处于执行态。 优先级:相对于其他进程的优先级。优先级:相对于其他进程的优先级。 程序计数器:程序中即将被执行的下一条指令的地址。程序计数器:程序中即将被执行的下一条指令的地址。 内存

14、指针:包括程序代码和进程相关数据的指针,还有和内存指针:包括程序代码和进程相关数据的指针,还有和 其他进程共享内存块的指针。其他进程共享内存块的指针。 上下文数据:进程执行时处理器的寄存器中的数据。上下文数据:进程执行时处理器的寄存器中的数据。 I/OI/O状态信息:包括显式的状态信息:包括显式的I/OI/O请求、分配给进程的请求、分配给进程的I/OI/O设设 备备( (例如磁带驱动器例如磁带驱动器) )和被进程使用的文件列表等。和被进程使用的文件列表等。 审计信息:可包括处理器时间总和、使用的时钟数总和、审计信息:可包括处理器时间总和、使用的时钟数总和、 时间限制等。时间限制等。 进程描述进

15、程控制结构 v这些列表信息被存放在一个称为进程控制块的数这些列表信息被存放在一个称为进程控制块的数 据结构中,该控制块由操作系统创建和管理。进据结构中,该控制块由操作系统创建和管理。进 程控制块是操作系统能够支持多进程和提供多处程控制块是操作系统能够支持多进程和提供多处 理的关键工具。当进程中断时,操作系统会把程理的关键工具。当进程中断时,操作系统会把程 序计数器和处理器寄存器序计数器和处理器寄存器( (上下文数据上下文数据) )保存到进保存到进 程控制块中的相应位置,进程状态也被改变为其程控制块中的相应位置,进程状态也被改变为其 他的值,例如阻塞态或就绪态。他的值,例如阻塞态或就绪态。 进程

16、描述进程控制结构 pid 进程状态进程状态 现场现场 优先级优先级 阻塞原因阻塞原因 程序地址程序地址 同步机制同步机制 资源清单资源清单 链接指针链接指针 进程控制块中的信息 v描述信息:描述信息: 进程名或进程标识号;进程名或进程标识号; 用于进程识别;用于进程识别; 用户名或用户标识号;用户名或用户标识号; 有利于资源共享与保护;有利于资源共享与保护; 家族关系;家族关系; 进程控制块中的信息 v控制信息:控制信息: 进程当前状态进程当前状态 五态模型:初始态,就绪态,运行态,阻塞态,终止五态模型:初始态,就绪态,运行态,阻塞态,终止 态;态; 三态模型:就绪态,运行态,阻塞态;三态模型

17、:就绪态,运行态,阻塞态; 进程优先级进程优先级 程序开始地址程序开始地址 各种计时信息各种计时信息 给出进程占有和利用资源的有关情况。给出进程占有和利用资源的有关情况。 通信信息通信信息 进程控制块中的信息 v资源管理信息:包括有关存储器的信息,使用输入资源管理信息:包括有关存储器的信息,使用输入 输出设备的信息,有关文件系统的信息等。输出设备的信息,有关文件系统的信息等。 占用内存大小及其管理用数据结构指针;占用内存大小及其管理用数据结构指针; 共享程序段大小及起始地址;共享程序段大小及起始地址; 输入输出设备的设备号,所要传送的数据长度,缓冲区地输入输出设备的设备号,所要传送的数据长度,

18、缓冲区地 址,缓冲区长度及所用设备的有关数据结构指针等。址,缓冲区长度及所用设备的有关数据结构指针等。 指向文件系统的指针及有关标识等。指向文件系统的指针及有关标识等。 进程控制块中的信息 v CPUCPU现场保护结构:存储退出执行时的进程现场数据;现场保护结构:存储退出执行时的进程现场数据; v 一个一个PCBPCB表往往要占据较大的存储空间。有的系统中,为了表往往要占据较大的存储空间。有的系统中,为了 减少减少PCBPCB对内存的占用量,只允许对内存的占用量,只允许PCBPCB中最常用的部分,如中最常用的部分,如 CPUCPU现场保护、进程描述信息、控制信息等常驻内存。其它现场保护、进程描

19、述信息、控制信息等常驻内存。其它 部分则存放于外存之中,待进程将要执行时与其它数据一起部分则存放于外存之中,待进程将要执行时与其它数据一起 装入内存。装入内存。 进程描述进程控制结构 v 进程映像的位置依赖于使用的内存管理方案。对于最简单的进程映像的位置依赖于使用的内存管理方案。对于最简单的 情况,进程映像保存在邻近的或连续的存储块中,进程映像情况,进程映像保存在邻近的或连续的存储块中,进程映像 保存在辅存中保存在辅存中( (通常是磁盘通常是磁盘) )。 v 如果操作系统要管理进程,其进程映像至少有一部分必须位如果操作系统要管理进程,其进程映像至少有一部分必须位 于主存中。为执行此进程,整个进

20、程映像必须载入主存中或于主存中。为执行此进程,整个进程映像必须载入主存中或 至少载入虚拟内存中。至少载入虚拟内存中。 v 因此,操作系统需要知道每个进程在磁盘中的位置,并且对因此,操作系统需要知道每个进程在磁盘中的位置,并且对 于在主存中的每个进程,操作系统需要知道其在主存中的位于在主存中的每个进程,操作系统需要知道其在主存中的位 置。置。 进程描述进程控制结构 v 现代操作系统假定分页硬件允许用不连续的物理内存来支持现代操作系统假定分页硬件允许用不连续的物理内存来支持 部分常驻内存的进程。在任何给定的时刻,进程映像的一部部分常驻内存的进程。在任何给定的时刻,进程映像的一部 分可以在主存中,剩

21、余部分可以在辅存中。因此,操作系统分可以在主存中,剩余部分可以在辅存中。因此,操作系统 需要维护一个进程表,以表明每个进程映像中每页的位置。需要维护一个进程表,以表明每个进程映像中每页的位置。 v 有一个主进程表,每个进程在表中都有一个表项,每一项至有一个主进程表,每个进程在表中都有一个表项,每一项至 少包含一个指向进程映像的指针。少包含一个指向进程映像的指针。 每个进程在表中都有一个表项, 每一项至少包含一个指向进程映像的指针。 进程描述进程控制结构 v下一页的图中是虚拟内存中进程映像的结构。下一页的图中是虚拟内存中进程映像的结构。 v每个进程映像包括一个进程控制块、用户栈、进程每个进程映像

22、包括一个进程控制块、用户栈、进程 的专用地址空间以及与其他进程共享的任何其他地的专用地址空间以及与其他进程共享的任何其他地 址空间。址空间。 v在此图中,每个进程映像表现为一段地址相邻的区在此图中,每个进程映像表现为一段地址相邻的区 域。在实际的实现中可能不是这种情况,这取决于域。在实际的实现中可能不是这种情况,这取决于 内存管理方案和操作系统组织控制结构的方法。内存管理方案和操作系统组织控制结构的方法。 虚拟内存中进程映像的结构虚拟内存中进程映像的结构 进程描述进程控制结构 进程描述进程控制结构 执行指针执行指针 就绪队列就绪队列指针指针 阻塞队列指针阻塞队列指针 空闲队列指针空闲队列指针

23、PCB14 PCB23 PCB30 PCB48 PCB5 PCB67 PCB79 PCB80 PCB91 进程描述进程控制结构 PCB1 PCB2 PCB3 PCB4 PCB5 PCB6 PCB7 执行指针执行指针 就绪表指针就绪表指针 阻塞表指针阻塞表指针 进程上下文 v包含了每个进程执行包含了每个进程执行 过的、执行时的以及过的、执行时的以及 待执行的指令和数据,待执行的指令和数据, 在指令寄存器、堆栈在指令寄存器、堆栈 (存放各调用子程序(存放各调用子程序 的返回点和参数等)、的返回点和参数等)、 状态字寄存器中的内状态字寄存器中的内 容。容。 进程上下文的切换过程进程上下文的切换过程

24、进程状态及其转换 就绪就绪 阻塞阻塞执行执行 时间片到时间片到 进程调度进程调度 等待某个等待某个 事件发生事件发生 而睡眠而睡眠 因等待事因等待事 件发生而件发生而 唤醒唤醒 图图3.6 3.6 进程状态转换进程状态转换 初始初始 终止终止 完成完成 进程状态及其转换 v 在多道程序设计环境中,在虚拟内存中有许多已经创建了的在多道程序设计环境中,在虚拟内存中有许多已经创建了的 进程进程(P(P1 1 , ,Pn )Pn ), 每个进程在执行期间,需要访问某每个进程在执行期间,需要访问某 些系统资源,包括处理器、些系统资源,包括处理器、I/OI/O设备和主存。图中进程设备和主存。图中进程P P

25、1 1正在正在 运行,该进程至少有一部分在主存中,并且还控制着两个运行,该进程至少有一部分在主存中,并且还控制着两个 I/OI/O设备设备; ;进程进程P P2 2也在主存中,但由于正在等待分配给也在主存中,但由于正在等待分配给P1P1的的I/O I/O 设备而被阻塞;进程设备而被阻塞;进程Pn Pn 已经被换出,因此是挂起的。已经被换出,因此是挂起的。 进程状态及其转换 进程状态及其转换 v使用进程模型,易于想像系统内部的操作状况。使用进程模型,易于想像系统内部的操作状况。 一些进程运行着一些程序,这些程序执行用户键一些进程运行着一些程序,这些程序执行用户键 入的命令。另一些进程是系统的一部

26、分,它们的入的命令。另一些进程是系统的一部分,它们的 任务是处理下列一些工作:例如执行文件服务请任务是处理下列一些工作:例如执行文件服务请 求、管理运行磁盘驱动器的细节等。当发生一个求、管理运行磁盘驱动器的细节等。当发生一个 磁盘中断时,系统作出决定,停止运行当前进程,磁盘中断时,系统作出决定,停止运行当前进程, 而转向磁盘进程,该进程在此之前因等待该中断而转向磁盘进程,该进程在此之前因等待该中断 而处于阻塞态。这样,我们可以不再考虑中断,而处于阻塞态。这样,我们可以不再考虑中断, 而是考虑用户进程,磁盘进程,终端进程等。这而是考虑用户进程,磁盘进程,终端进程等。这 些进程在等待时总是处于阻塞

27、状态,所等待的事些进程在等待时总是处于阻塞状态,所等待的事 件发生时,它们被解除阻塞,并成为可被调度运件发生时,它们被解除阻塞,并成为可被调度运 行的进程。行的进程。 进程状态及其转换 v 可以理解为如下模型,其中最底层是操作系统的调度程可以理解为如下模型,其中最底层是操作系统的调度程 序,在它上面有许多进程。所有关于中断处理、启动和序,在它上面有许多进程。所有关于中断处理、启动和 中止进程的具体细节被隐藏在调度程序中。中止进程的具体细节被隐藏在调度程序中。 复习复习 v 一个进程就是一个正在执行的程序,包括程序计数器、寄存一个进程就是一个正在执行的程序,包括程序计数器、寄存 器和变量的当前值

28、。器和变量的当前值。 v 进程的状态与状态转换(初始态,就绪态,运行态,阻塞态,进程的状态与状态转换(初始态,就绪态,运行态,阻塞态, 终止态)。终止态)。 v 进程映像,进程控制块。进程映像,进程控制块。 进程控制进程控制 处理器执行模式处理器执行模式 v 大多数处理器至少支持两种执行模式,某些指令只能在特权大多数处理器至少支持两种执行模式,某些指令只能在特权 模式下运行,包括读取或改变诸如程序状态字之类控制寄存模式下运行,包括读取或改变诸如程序状态字之类控制寄存 器的指令、原始器的指令、原始I/OI/O指令和与内存管理相关的指令。另外,指令和与内存管理相关的指令。另外, 有部分内存区域仅在

29、特权模式下可以被访问到。有部分内存区域仅在特权模式下可以被访问到。 v 非特权模式通常称为非特权模式通常称为用户模式或用户态用户模式或用户态,这是因为用户程序,这是因为用户程序 通常在该模式下运行;特权模式可称为通常在该模式下运行;特权模式可称为系统模式或系统态、系统模式或系统态、 控制模式或内核模式控制模式或内核模式。 v 它可以保护操作系统和重要的操作系统数据表它可以保护操作系统和重要的操作系统数据表( (如进程控制如进程控制 块块) )不受用户程序的干涉。在内核模式下,软件具有对处理不受用户程序的干涉。在内核模式下,软件具有对处理 器以及所有指令、寄存器和内存的控制能力,这一级的控制器以

30、及所有指令、寄存器和内存的控制能力,这一级的控制 不是用户程序所必需的,并且为了安全起见也不是用户程序不是用户程序所必需的,并且为了安全起见也不是用户程序 可访问的。可访问的。 处理器执行模式处理器执行模式 v 当代处理器中包含了一个模式位,定义一个程序在处理器上当代处理器中包含了一个模式位,定义一个程序在处理器上 的执行权限,该位可以设置为核心模式或用户模式。在核心的执行权限,该位可以设置为核心模式或用户模式。在核心 模式中,处理器可以执行硬件指令系统中的每条指令;而在模式中,处理器可以执行硬件指令系统中的每条指令;而在 用户模式中,只能执行指令系统中的一个子集。只能在核心用户模式中,只能执

31、行指令系统中的一个子集。只能在核心 模式中执行的指令称为监督、特权或保护指令,以区别于用模式中执行的指令称为监督、特权或保护指令,以区别于用 户模式下执行的指令。户模式下执行的指令。 v 可信的操作系统软件是在核心态执行的,而所有其他的软件可信的操作系统软件是在核心态执行的,而所有其他的软件 都是在用户态下执行的。例如,都是在用户态下执行的。例如,I/OI/O指令是特权指令,所以指令是特权指令,所以 应用程序自己不能执行应用程序自己不能执行I/OI/O操作。相反,它是请求操作系统操作。相反,它是请求操作系统 来执行来执行I/OI/O操作的。操作的。 v 处于用户态模式的软件进行系统调用时,处理

32、器会切换到核处于用户态模式的软件进行系统调用时,处理器会切换到核 心模式下。模式位可以在用户模式下,通过自陷指令来设置,心模式下。模式位可以在用户模式下,通过自陷指令来设置, 也称为系统调用指令。该指令设置模式位,并且转移到系统也称为系统调用指令。该指令设置模式位,并且转移到系统 空间中的一个固定的位置,它类似于一个硬件终端。当操作空间中的一个固定的位置,它类似于一个硬件终端。当操作 系统完成系统调用时,返回前重置模式位为用户模式。系统完成系统调用时,返回前重置模式位为用户模式。 处理器执行模式处理器执行模式 v 系统可以用模式位来系统可以用模式位来 定义不同处理器模式定义不同处理器模式 下运

33、行的程序可以访下运行的程序可以访 问的存储区域。如果问的存储区域。如果 模式位设置为核心模模式位设置为核心模 式,则处理器上执行式,则处理器上执行 的进程可以访问系统的进程可以访问系统 区或用户区的空间;区或用户区的空间; 如果为用户模式,则如果为用户模式,则 只能访问用户区。我只能访问用户区。我 们常将这两类内存称们常将这两类内存称 为用户空间和系统空为用户空间和系统空 间。间。 Question 为什么我编写为什么我编写C C程序时,程序时, 从来没调用过自陷指令?从来没调用过自陷指令? Tip:系统调用和库函数调用的区别系统调用和库函数调用的区别 v 从程序完成的功能来看,函数库提供的函

34、数通常是不需要操从程序完成的功能来看,函数库提供的函数通常是不需要操 作系统的服务,函数是在用户空间内执行的,除非函数涉及作系统的服务,函数是在用户空间内执行的,除非函数涉及 到到I/OI/O操作等,一般是不会切到核心态的。系统调用是要求操作等,一般是不会切到核心态的。系统调用是要求 操作系统为用户提供进程,提供某种服务,通常是涉及系统操作系统为用户提供进程,提供某种服务,通常是涉及系统 的硬件资源和一些敏感的软件资源等。的硬件资源和一些敏感的软件资源等。 v 函数库调用是语言或应用程序的一部分,而系统调用是操作函数库调用是语言或应用程序的一部分,而系统调用是操作 系统的一部分。系统调用是在操

35、作系统内核发现一个系统的一部分。系统调用是在操作系统内核发现一个“traptrap” 或中断后进行的(其中系统调用是软中断)。或中断后进行的(其中系统调用是软中断)。 v 库函数是在系统调用上的一层包装,运行在用户态(库函数是在系统调用上的一层包装,运行在用户态(user user modemode),库函数相当于包工头,系统调用是工人,我们可以),库函数相当于包工头,系统调用是工人,我们可以 自己找工人分任务,但一般是把任务摊给包工头,包工头再自己找工人分任务,但一般是把任务摊给包工头,包工头再 去给工人分任务。去给工人分任务。 函数库调用函数库调用 vs 系统调用系统调用 系统调用和库函数

36、调用的关系系统调用和库函数调用的关系 v系统调用通过软中断系统调用通过软中断int 0 x80int 0 x80从用户态进入内核态。从用户态进入内核态。 v函数库中的某些函数调用了系统调用。函数库中的某些函数调用了系统调用。 v函数库中的函数可以没有调用系统调用,也可以调函数库中的函数可以没有调用系统调用,也可以调 用多个系统调用。用多个系统调用。 v编程人员可以通过函数库调用系统调用。编程人员可以通过函数库调用系统调用。 v高级编程也可以直接采用高级编程也可以直接采用int 0 x80int 0 x80进入系统调用,进入系统调用, 而不必通过函数库作为中介。而不必通过函数库作为中介。 v如果

37、是在核心编程,也可以通过如果是在核心编程,也可以通过int 0 x80int 0 x80进入系统进入系统 调用,此时不能使用函数库。因为函数库中的函数调用,此时不能使用函数库。因为函数库中的函数 是内核访问不到的是内核访问不到的。 从用户调用库函数到系统调用执行的流程从用户调用库函数到系统调用执行的流程 v 假设用户调用假设用户调用ssize_t write (int fields, cont void ssize_t write (int fields, cont void * *buff, size_t nbytes);buff, size_t nbytes);库函数。库函数。 v 库函数

38、会执行库函数会执行int 0 x80int 0 x80中断。因为中断使得进程从用户态进中断。因为中断使得进程从用户态进 入内核态,所以参数通过寄存器传送。入内核态,所以参数通过寄存器传送。 v 0 x800 x80中断对应的中断例程被称为中断对应的中断例程被称为system call handlersystem call handler。其。其 工作是:工作是: i.i. 存储大多数寄存器到内核堆栈中。这是汇编代码写存储大多数寄存器到内核堆栈中。这是汇编代码写 的。的。 ii.ii. 执行真正的系统调用函数执行真正的系统调用函数system call system call service r

39、outineservice routine。这是。这是C C代码。代码。 iii.iii. 通过通过ret_from_sys_call ()ret_from_sys_call ()返回,回到用户态的库返回,回到用户态的库 函数。这是汇编代码。函数。这是汇编代码。 从用户调用库函数到系统调用执行的流程从用户调用库函数到系统调用执行的流程 v int main() v v int fd = create(filename,0666); v exit(0); v v v 在执行在执行mainmain函数时,是在函数时,是在user modeuser mode下执行,当遇到下执行,当遇到createc

40、reate函数时,继续在函数时,继续在user user modemode下执行。然后系统将两个参数下执行。然后系统将两个参数“filenamefilename”和和“06660666”压入栈中或者某个寄存器,压入栈中或者某个寄存器, 接着执行库函数接着执行库函数createcreate。在库函数。在库函数createcreate执行开始,系统仍然处在执行开始,系统仍然处在user modeuser mode下,下, 接着系统将接着系统将createcreate系统调用的系统调用的unique numberunique number压入寄存器(比如说压入寄存器(比如说r0r0),然后执),然后

41、执 行指令行指令traptrap(operating system trapoperating system trap)使系统进入)使系统进入kernel modekernel mode,并且处理系统,并且处理系统 调用。这时,系统意识到要进行系统调用的调用。这时,系统意识到要进行系统调用的invokeinvoke,于是从寄存器,于是从寄存器r0r0中取出中取出 createcreate系统调用的系统调用的unique numberunique number,从系统调用表中查找得知要,从系统调用表中查找得知要invokeinvoke的系统调的系统调 用是用是createcreate,然后执行。

42、执行完毕后返回库函数,然后执行。执行完毕后返回库函数createcreate的调用,库函数负责检查的调用,库函数负责检查 系统调用的执行情况(检查某些寄存器的值),然后库函数系统调用的执行情况(检查某些寄存器的值),然后库函数createcreate根据检查的结根据检查的结 果返回相应的值。果返回相应的值。 v 在这里,在这里,traptrap指令类似于一个系统中断,而系统调用指令类似于一个系统中断,而系统调用createcreate是一个特殊的中断处是一个特殊的中断处 理函数(理函数(inerrupt handlerinerrupt handler)。)。 系统调用和库函数调用系统调用和库函

43、数调用 v标准标准C C库函数库函数printf()printf()可以被看做是一个通用的输出可以被看做是一个通用的输出 语句,但它实际做的是将数据转化为符合格式的字语句,但它实际做的是将数据转化为符合格式的字 符串并且调用系统调用符串并且调用系统调用write()write()输出这些字符串。输出这些字符串。 v库函数不光可以在系统调用的基础上包装,也可以库函数不光可以在系统调用的基础上包装,也可以 在其他库函数的基础上包装,提供更高级的抽象,在其他库函数的基础上包装,提供更高级的抽象, 更强大的功能。比如更强大的功能。比如OGREOGRE对对OpenGLOpenGL的包装,的包装,QtQt

44、对对 XlibXlib的包装,类似于从老总到秘书到部门主管到包的包装,类似于从老总到秘书到部门主管到包 工头再到工人的过程。工头再到工人的过程。 进程控制进程控制 v进程控制进程控制系统使用一些具有特定功能的程序段系统使用一些具有特定功能的程序段 来创建、撤销进程,以及完成进程各状态间的转换。来创建、撤销进程,以及完成进程各状态间的转换。 v把系统态下执行的某些具有特定功能的程序段称为把系统态下执行的某些具有特定功能的程序段称为 原语原语。 机器指令级:执行期间不允许中断,像原子一样,在操作机器指令级:执行期间不允许中断,像原子一样,在操作 系统中是一个不可分割的基本单位;系统中是一个不可分割

45、的基本单位; 功能级:作为原语的程序段不允许并发执行。功能级:作为原语的程序段不允许并发执行。 v这两类原语都在系统态下执行。这两类原语都在系统态下执行。 v操作系统中,通常把进程控制用程序段做成原语。操作系统中,通常把进程控制用程序段做成原语。 用于进程控制的原语有:创建原语、撤销原语、阻用于进程控制的原语有:创建原语、撤销原语、阻 塞原语、唤醒原语等。塞原语、唤醒原语等。 进程的创建进程的创建 图图3.73.7创建原语流图创建原语流图 进程的终止(撤销)进程的终止(撤销) v 正常结束正常结束 进程完成执行最后的语句并使用系统调用进程完成执行最后的语句并使用系统调用exit()exit()

46、请求操作请求操作 系统删除自身时,进程终止;此时,进程可以返回状态值系统删除自身时,进程终止;此时,进程可以返回状态值 到父进程。所有进程资源(包括物理和虚拟内存、打开文到父进程。所有进程资源(包括物理和虚拟内存、打开文 件和件和I/OI/O缓冲)会被操作系统释放。缓冲)会被操作系统释放。 v 异常结束异常结束 由于发生错误导致非正常终止。由于发生错误导致非正常终止。 v 外界干预:外界干预: 父进程请求将其终止。父进程请求将其终止。 父进程终止。操作系统可自动终止该进程的所有后代进程。父进程终止。操作系统可自动终止该进程的所有后代进程。 系统管理员系统管理员KillKill。 进程的终止过程

47、进程的终止过程 撤销原语图撤销原语图 进程的阻塞进程的阻塞引起进程阻塞的事件引起进程阻塞的事件 阻塞原语图阻塞原语图 进程的唤醒进程的唤醒 进程的唤醒进程的唤醒 图图3.10 3.10 唤醒原语唤醒原语 线程线程 主要内容主要内容 线程的概念线程的概念 进程与线程进程与线程 线程的应用实例线程的应用实例 线程的实现线程的实现 线程的执行特性线程的执行特性 多线程计算多线程计算 v 可以对顺序计算进行扩展,使得一个进程内可以有多个线程并发可以对顺序计算进行扩展,使得一个进程内可以有多个线程并发 执行执行团队分工协作的思想。团队分工协作的思想。 v 假定会计室里,一个会计师要清算公假定会计室里,一

48、个会计师要清算公 司的所有发票,将它与购买订单进行司的所有发票,将它与购买订单进行 核实,并将核实结果进行发布。会计核实,并将核实结果进行发布。会计 师做这项工作有一个固定的流程(与师做这项工作有一个固定的流程(与 程序相似),有会计师必须处理的具程序相似),有会计师必须处理的具 体数据(如发票和购买订单)。会计体数据(如发票和购买订单)。会计 师在会计室的工作与传统的顺序进程师在会计室的工作与传统的顺序进程 执行相类似。如果我们想要更快的处执行相类似。如果我们想要更快的处 理发票,则可以再雇用一个会计师。理发票,则可以再雇用一个会计师。 我们可以为他分配一个新办公室,然我们可以为他分配一个新

49、办公室,然 后为每个会计师分配一半的发票让他后为每个会计师分配一半的发票让他 们处理。们处理。 多线程计算多线程计算 v 还有一个可供选择的办还有一个可供选择的办 法。假定我们克隆一个法。假定我们克隆一个 会计师并将它和原来的会计师并将它和原来的 会计师放在相同的房间会计师放在相同的房间 内。现在两个会计师都内。现在两个会计师都 使用一样的工作过程,使用一样的工作过程, 同一堆发票,同一份购同一堆发票,同一份购 买订单文件,但是有两买订单文件,但是有两 个会计师处理发票。个会计师处理发票。 多线程计算多线程计算 v在软件世界里,这就像一个进程定义了同一份程序在软件世界里,这就像一个进程定义了同

50、一份程序 和数据,但是它有两个不同的执行流。这种方法叫和数据,但是它有两个不同的执行流。这种方法叫 做多线程计算。每个执行路线(与一个会计师相似)做多线程计算。每个执行路线(与一个会计师相似) 就是一个线程。就是一个线程。 v两个线程使用相同的程序和全局数据,但它们以各两个线程使用相同的程序和全局数据,但它们以各 自的速率执行程序。因为在不同的时间里,它们可自的速率执行程序。因为在不同的时间里,它们可 以调用不同的函数,所以每个线程都有自己的堆栈。以调用不同的函数,所以每个线程都有自己的堆栈。 多线程计算多线程计算 v JavaJava是用是用ThreadThread线程基类来支持多线程计算的

51、。程序员可以线程基类来支持多线程计算的。程序员可以 定义定义ThreadThread基类的子类基类的子类MyThreadMyThread。当创建一个。当创建一个MyThreadMyThread的实的实 例时,它定义了一个新的,独立的线程,它能使用进程的全例时,它定义了一个新的,独立的线程,它能使用进程的全 局数据。这意味着局数据。这意味着JavaJava计算可以用多线程来实现。计算可以用多线程来实现。 v 对于多线程来说,如果程序运行在多道程序设计系统中,两对于多线程来说,如果程序运行在多道程序设计系统中,两 个或多个线程可以采用时分复用的方式来使用处理器,但它个或多个线程可以采用时分复用的方

52、式来使用处理器,但它 们共享相同的程序和数据。如果多线程计算在多处理器上运们共享相同的程序和数据。如果多线程计算在多处理器上运 行,那么两个线程能并行执行。行,那么两个线程能并行执行。 v 有些操作系统仅支持进程进行顺序运算,在这些系统中,可有些操作系统仅支持进程进行顺序运算,在这些系统中,可 以用类库来实现多线程,操作系统本身不支持多线程进程。以用类库来实现多线程,操作系统本身不支持多线程进程。 例如,例如,JavaJava线程就是在线程就是在JavaJava虚拟机上实现的,而不是在操作虚拟机上实现的,而不是在操作 系统中实现的。系统中实现的。 线程的概念线程的概念 v 传统的操作系统仅允许

53、进程中有一个执行引擎。现代操作系传统的操作系统仅允许进程中有一个执行引擎。现代操作系 统如统如WindowsWindows中,进程可以包含多个执行引擎。每个执行引中,进程可以包含多个执行引擎。每个执行引 擎称为线程。擎称为线程。 线程的概念线程的概念 v进程的概念包含两个特点进程的概念包含两个特点 资源所有权:一个进程包括一个存放进程映像的虚拟地址资源所有权:一个进程包括一个存放进程映像的虚拟地址 空间,是程序、数据、栈和进程控制块中定义的属性的集空间,是程序、数据、栈和进程控制块中定义的属性的集 合。一个进程拥有资源的控制或所有权,包括主存、合。一个进程拥有资源的控制或所有权,包括主存、I/

54、OI/O 通道、通道、I/OI/O设备和文件等。设备和文件等。 调度调度/ /执行:一个进程的其执行过程可能与其它进程的执执行:一个进程的其执行过程可能与其它进程的执 行过程交替。因此,一个具有执行状态(运行态,就绪态行过程交替。因此,一个具有执行状态(运行态,就绪态 等)和分派了优先级的进程是一个被操作系统调度并分派等)和分派了优先级的进程是一个被操作系统调度并分派 的实体。的实体。 v 在传统操作系统中,这两个特点是进程的本质。但在现代操在传统操作系统中,这两个特点是进程的本质。但在现代操 作系统中,将这两点分别处理作系统中,将这两点分别处理分派的单位通常称为线程分派的单位通常称为线程 或

55、轻量级进程,而拥有资源所有权的单位仍称为进程或任务。或轻量级进程,而拥有资源所有权的单位仍称为进程或任务。 线程的优点线程的优点 v一个程序至少有一个进程,而一个进程至少包含一个程序至少有一个进程,而一个进程至少包含 一个线程,对于单进程单线程程序,要想完成多一个线程,对于单进程单线程程序,要想完成多 任务,一定是单步顺序执行的,即多个任务无法任务,一定是单步顺序执行的,即多个任务无法 并发执行,一个任务的开始需要等待前一个任务并发执行,一个任务的开始需要等待前一个任务 的结束。的结束。 v对于并发性要求极高的服务器程序来说,单线程对于并发性要求极高的服务器程序来说,单线程 显然无法高效地处理

56、任务。显然无法高效地处理任务。 线程的优点线程的优点 v在一个已有进程中创建一个新线程比创建一个全在一个已有进程中创建一个新线程比创建一个全 新进程所需的时间要少许多。新进程所需的时间要少许多。 v终止一个线程比终止一个进程花费的时间少。终止一个线程比终止一个进程花费的时间少。 v同一进程内线程间切换比进程间切换花费的时间同一进程内线程间切换比进程间切换花费的时间 少,开销小。少,开销小。 v线程提高了通信效率。独立进程间的通信需要内线程提高了通信效率。独立进程间的通信需要内 核的介入,但同一个进程中的线程共享内存和文核的介入,但同一个进程中的线程共享内存和文 件,它们无需调用内核就可以互相通

57、信。件,它们无需调用内核就可以互相通信。 线程执行模型线程执行模型 v 每个进程开始生命周期时都是单一线程,这个线程称为主每个进程开始生命周期时都是单一线程,这个线程称为主 线程。在某一时刻,主线程创建一个对等线程,从这个时线程。在某一时刻,主线程创建一个对等线程,从这个时 间点开始,两个线程就并发运行。最后,因为主线程执行间点开始,两个线程就并发运行。最后,因为主线程执行 一个慢速系统调用,例如一个慢速系统调用,例如readread或或sleepsleep,或它被系统的计时,或它被系统的计时 器中断时,控制就会通过上下文切换传递到对等线程。在器中断时,控制就会通过上下文切换传递到对等线程。在

58、 控制传递回主线程前,对等线程会执行一段时间。控制传递回主线程前,对等线程会执行一段时间。 实例实例 vPosixPosix线程(线程(PthreadsPthreads)是在)是在C C程序中处理线程的一程序中处理线程的一 个标准接口,个标准接口,PthreadsPthreads定义了大约定义了大约6060个函数,允许个函数,允许 程序创建、杀死和回收线程,与对等线程安全的共程序创建、杀死和回收线程,与对等线程安全的共 享数据,还可以通知对等线程系统状态的变化。享数据,还可以通知对等线程系统状态的变化。 v下页是一个简单的下页是一个简单的PthreadsPthreads程序,主线程创建一个程序

59、,主线程创建一个 对等线程,然后等待它的终止。对等线程输出对等线程,然后等待它的终止。对等线程输出 “Hello,world!nHello,world!n”并且终止。当主线程检测到对并且终止。当主线程检测到对 等线程终止后,它就通过调用等线程终止后,它就通过调用exitexit终止该进程。终止该进程。 进程与线程进程与线程 v 构造并发程序最简单的方法是用进程,使用构造并发程序最简单的方法是用进程,使用forkfork、execexec和和 waitpidwaitpid等。例如,一个构造并发服务器的自然方法就是,等。例如,一个构造并发服务器的自然方法就是, 在父进程中接受客户端连接请求,然后创

60、建一个新的子进程在父进程中接受客户端连接请求,然后创建一个新的子进程 来为每个新客户端提供服务。来为每个新客户端提供服务。 v 假设我们有两个客户端和一个服务器,服务器正在监听一个假设我们有两个客户端和一个服务器,服务器正在监听一个 监听描述符(例如监听描述符(例如3 3)上的连接请求。现在假设服务器接受)上的连接请求。现在假设服务器接受 了客户端了客户端1 1的连接请求,并返回一个已连接描述符(例如的连接请求,并返回一个已连接描述符(例如4 4) ,如图。,如图。 第一步:服务器接受客户端的连接请求 v 在接受连接请求之后,服务器派生一个子进程,这个子进程在接受连接请求之后,服务器派生一个子

温馨提示

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

评论

0/150

提交评论