2.3 进程及其实现 进程的定义和属性 进程的状态和转换 进程的描述 进程切换与模式切换

Slides:



Advertisements
Similar presentations
高校教师、高级项目经理 任铄 QQ : 第一章 操作系统引论 1.1 操作系统的目标和作用 1.2 操作系统的发展过程 1.3 操作系统的基本特性 1.4 操作系统的主要功能 1.5 OS 结构设计.
Advertisements

高级服务器设计和实现 1 —— 基础与进阶 余锋
阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
3.2 进程的描述 进程的特征 1 .动态性 动态性是进程最基本的特征。 动态性是进程最基本的特征。 2. 并发性 这是指多个进程实体,同存于内存中,能在一段时 间内同时运行。并发性是进程的重要特征,同时也成 为 OS 的重要特征。引入进程的目的也是为了使该进 程的程序能和其它进程的程序并发执行。
© 2001 孟静制作 版权所有 第二章 CPU 管理和进程、线程管理 2.1 CPU 管理概述 2.2 进程管理 2.3 进程模型实例分析 :UNIX 早期版本的 CPU 管理 子系统 ( 进程模型 ) 2.4 处理机管理实例分析 (2):linux CPU 管理(进程 模型) 2.5 线程模型.
1 张惠娟 副教授 Linux 进程管理. 2 内容 进程组成 进程环境 进程管理内容 进程控制块 进程状态 进程调度 进程控制 进程通信.
Linux 系统. 操作系统发展需求 1 没有操作系统 2 简单批处理操作系统 3 多道程序设计的批处理 4 多道程序设计的分时操作系统 5 多处理机并行系统 6 网络操作系统 7 分布式操作系统.
计算机操作系统 第二章 进程管理 高校教师、高级项目经理 任铄 QQ:
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
实用操作系统概念 张惠娟 副教授 1.
第六讲 进程控制与调度 目的与要求:理解进程切换过程,理解进程调度原因及调度切换时机,掌握进程调度方式与实现及各种调度算法,弄清作业和进程的关系,了解线程的引入原因。 重点与难点:进程切换的实现与进程调度算法。 作业:7, 8, 10, 11, 19, 20。
Oracle数据库 Oracle 子程序.
Lab2 syscall 参数问题 参数check在当前代码框架下并不具有任何含义, 它就只是个参数而已 参数不超过四个: 系统调用号
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
在PHP和MYSQL中实现完美的中文显示
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
操作系统 (处理器管理) 徐锋 南京大学计算机科学与技术系.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
Hadoop I/O By ShiChaojie.
存储系统.
实践演练 广州创龙电子科技有限公司 01 广州创龙电子科技有限公司
走进编程 程序的顺序结构(二).
辅导课程六.
临界区软件互斥软件实现算法.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Windows网络操作系统管理 ——Windows Server 2008 R2.
Linux操作系统分析 中国科学技术大学计算机系 陈香兰(0512- )
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
第2章 进程的描述与控制 2.1 进程及其描述 2.2 进程基本状态及其相互转换 2.3 进程控制 2.4 线程 进程的引入
本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
逆向工程-汇编语言
临界区软件互斥软件实现算法 主讲教师:夏莹杰
CPU结构和功能.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
内容摘要 ■ 课程概述 ■ 教学安排 ■ 什么是操作系统? ■ 为什么学习操作系统? ■ 如何学习操作系统? ■ 操作系统实例
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
微机系统的组成.
第四章 MCS-51定时器/计数器 一、定时器结构 1.定时器结构框图
第四章 并发处理 (一)并发程序及特点 (二)进程的基本概念 (三)进程控制 (四)进程互斥 (五)进程同步 (六)线程的基本概念.
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
实验四、TinyOS执行机制实验 一、实验目的 1、了解tinyos执行机制,实现程序异步处理的方法。
进程概念.
姚金宇 MIT SCHEME 使用说明 姚金宇
Linux操作系统分析 中国科学技术大学计算机系 陈香兰(0512- )
信号量(Semaphore).
iSIGHT 基本培训 使用 Excel的栅栏问题
本节内容 文件系统 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Visual Basic程序设计 第13章 访问数据库
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
临界区问题的硬件指令解决方案 (Synchronization Hardware)
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
Python 环境搭建 基于Anaconda和VSCode.
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
Google的云计算 分布式锁服务Chubby.
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第四章 UNIX文件系统.
第十七讲 密码执行(1).
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
上节复习(11.7) 1、定时/计数器的基本原理? 2、定时/计数器的结构组成? 3、定时/计数器的控制关系?
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
本节内容 SEMAPHORE 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
实验六、COM类型病毒分析实验 实验开发教师: 刘乃琦 谌黔燕.
Presentation transcript:

2.3 进程及其实现 2.3.1 进程的定义和属性 2.3.2 进程的状态和转换 2.3.3 进程的描述 2.3.4 进程切换与模式切换 2.3.5 进程的控制 2.3.6 实例研究:UNIX SVR4进程管理 2.3.7 实例研究:Linux进程管理

2.3.1 进程的定义和性质(1) 进程是一个可并发执行的具有独立功能的程序关于某个数据集合的一次执行过程,也是操作系统进行资源分配和保护的基本单位 。

进程的定义和性质(2) 进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。

进程的定义和性质(3) 从理论角度看,是对正在运行的程序过程的抽象; 操作系统引入进程的概念 从理论角度看,是对正在运行的程序过程的抽象; 从实现角度看,是一种数据结构,目的在于清晰地刻划动态系统的内在规律,有效管理和调度进入计算机系统主存储器运行的程序。

进程的属性 •结构性: •共享性: •动态性: •独立性: •制约性: •并发性:

操作系统为什么要引入进程概念? 原因1-刻画系统的动态性,发挥系统的并发性,提高资源利用率。

原因2-它能解决系统的“共享性”,正确描述程序的执行状态。 “可再用” 程序 “可再入” 程序 “可再入”程序具有的性质

“可再入” 程序举例(1) 编译程序P编译源程序甲,从A点开始工作,执行到B点时需将信息记到磁盘上,且程序P在B点等待磁盘传输。

“可再入” 程序举例(2) 编译程序P (P的入口,处理源程序乙) (P把源程序甲的信息记盘等磁盘完成) A B 源程序甲 源程序乙

“可再入” 程序举例(3) 现在怎样来描述编译程序P的状态呢? 称它为在B点等待磁盘传输状态,还是称它为正在从A点开始执行的状态? 把编译程序P,与服务对象联系起来,P为甲服务就说构成进程P甲,P为乙服务则构成进程P乙。

“可再入” 程序举例(4) 两个进程虽共享程序P,但它们可同时执行且彼此按各自的速度独立执行。可见程序与计算(程序的执行)不再一一对应, 进程是一个既能用来共享资源,又能描述程序并发执行过程的一个基本单位。

2.3.2 进程的状态和转换 三态模型(1) 一个进程从创建而产生至撤销而消亡的整个生命周期,可用一组状态加以刻划,,按进程在执行过程中的状况至少定义三种不同的进程状态:

三态模型(2) 三种不同的进程状态 •运行态(running): •就绪态(ready): •等待态(blocked):

三态模型(3) 进程三态模型及其状态转换 运行态 就绪态 等待态 选中 落选 出现等待事件 等待事件结束

三态模型(4) 引起进程状态转换的具体原因 •运行态→等待态:等待使用资源或某事件发生 ; •等待态→就绪态:资源得到满足或事件发生 ; •运行态→就绪态:运行时间片到;出现有更高优先权进程。 •就绪态→运行态:CPU空闲时选择一个就绪进程。

  五态模型(1) 进程五态模型及其转换 运行态 就绪态 等待态 选中 落选 出现等待事件 等待事件结束 新建态 终止态

五态模型(2) 新建态 新建态对应进程刚被创建的状态。为一个新进程创建必要的管理信息,它并没有被提交执行,而是在等待操作系统完成创建进程的必要操作。

五态模型(3) 终止态 进程的终止,首先,等待操作系统进行善后,然后,退出主存。 进入终止态的进程不再执行,但依然临时保留在系统中等待善后。一旦其他进程完成了对终止态进程的信息抽取之后,系统将删除该进程。

五态模型(4) 进程状态转换的具体原因(1) •新建态→就绪态:系统完成了进程创建操作,且当前系统的性能和内存的容量均允许。 •NULL→新建态:创建一个子进程。 •新建态→就绪态:系统完成了进程创建操作,且当前系统的性能和内存的容量均允许。

五态模型(5) 进程状态转换的具体原因(2) •运行态→终止态:一个进程到达自然结束点,或出现了无法克服的错误,或被操作系统所终结,或被其他有终止权的进程所终结。

五态模型(6) 进程状态转换的具体原因(3) 终止态→NULL:完成善后操作。 就绪态→终止态:某些操作系统允许父进程终结子进程。 等待态→终止态:某些操作系统允许父进程终结子进程。

进程的挂起(1) 为什么要有“挂起”状态? 由于进程的不断创建,系统资源已不能满足进程运行的要求,就必须把某些进程挂起(suspend),对换到磁盘镜像区中,暂时不参与进程调度,起到平滑系统操作负荷的目的。

进程的挂起(2) (2)进程竞争资源,导致系统资源不足,负荷过重,需要挂起部分进程以调整系统负荷,保证系统的实时性或让系统正常运行。 (1)系统中的进程均处于等待状态,需要把一些阻塞进程对换出去,腾出足够内存装入就绪进程运行。 (2)进程竞争资源,导致系统资源不足,负荷过重,需要挂起部分进程以调整系统负荷,保证系统的实时性或让系统正常运行。

进程的挂起(3) (4)用户要求挂起自己的进程,以便进行某些调试、检查和改正。 (3)定期执行的进程(如审计、监控、记账程序)对换出去,以减轻系统负荷。 (4)用户要求挂起自己的进程,以便进行某些调试、检查和改正。

进程的挂起(4) (5)父进程要求挂起后代进程,以进行某些检查和改正。 (6)操作系统需要挂起某些进程,检查运行中资源使用情况,以改善系统性能;或当系统出现故障或某些功能受到破坏时,需要挂起某些进程以排除故障。

具有挂起功能的进程状态及其转换 运行态 就绪态 新建态 等待态 等待事件结束 挂起等 挂起就 待态 绪态 挂起 提交 解除挂起 出现等待事件 落选 选中 运行态 就绪态 终止态 新建态 挂起就 绪态 挂起等 待态 等待态 提交

具有挂起进程功能的进程状态 进程增加了两个新状态: 挂起就绪态(ready suspend)表明进程具备运行条件但目前在二级存储器中,当它被对换到主存才能被调度执行。 挂起等待态(blocked suspend) 表明进程正在等待某一个事件且在二级存储器中。

具有挂起进程状态转换的具体原因(1) •挂起等待态→挂起就绪态:引起进程等待的事件发生之后,相应的挂起等待态进程将转换为挂起就绪态。 •等待态→挂起等待态:当前不存在就绪进程,至少一个等待态进程将被对换出去成为挂起等待态; •挂起等待态→挂起就绪态:引起进程等待的事件发生之后,相应的挂起等待态进程将转换为挂起就绪态。

具有挂起进程状态转换的具体原因(2) •就绪态→挂起就绪态:系统根据当前资源状况和性能要求,决定把就绪态进程对换出去成为挂起就绪态。 •挂起就绪态→就绪态:内存中没有就绪态进程,或挂起就绪态进程具有比就绪态进程更高的优先级,将把挂起就绪态进程转换成就绪态。 •就绪态→挂起就绪态:系统根据当前资源状况和性能要求,决定把就绪态进程对换出去成为挂起就绪态。

挂起进程具有如下特征(1) •该进程不能立即被执行。 •挂起进程可能会等待事件,但所等待事件是独立于挂起条件的,事件结束并不能导致进程具备执行条件。

挂起进程具有如下特征(2) •进程进入挂起状态是由于操作系统、父进程或进程本身阻止它的运行。 •结束进程挂起状态的命令只能通过操作系统或父进程发出。

2.3.3 进程的描述 操作系统核心控制结构是进程结构,资源管理的数据结构将围绕进程结构展开。 操作系统的控制表分为四类, 操作系统的控制结构(1) 操作系统核心控制结构是进程结构,资源管理的数据结构将围绕进程结构展开。 操作系统的控制表分为四类, 进程控制表,存储控制表,I/O控制表和文件控制表。

操作系统的控制结构(2) •进程控制表管理进程及其相关信息。 •存储控制表管理一级(主)存储器和二级(虚拟)存储器,内容包括:主存储器的分配信息,二级存储器的分配信息,存储保护和分区共享信息,虚拟存储器管理信息

操作系统的控制结构(3) •I/O控制表管理系统的I/O设备和通道,包括:I/O设备和通道是否可用,I/O设备和通道分配信息,I/O操作的状态和进展,I/O操作传输数据所在主存区。 •文件控制表管理文件,包括:被打开文件的信息,文件在主存储器和二级存储器中的位置信息,被打开文件的状态和其他属性信息。

操作系统控制表的通用结构 Image Memory Devices Files Processes I/O Tables Memory Tables I/O Tables File Tables Primary Process Table Process 1 …… Process N Process 2 Process Image Image

进程映像 操作系统中把进程物理实体和支持进程运行的环境合称为进程上下文(context)。   进程映像 操作系统中把进程物理实体和支持进程运行的环境合称为进程上下文(context)。 当系统调度新进程占有处理器时,新老进程随之发生上下文切换。进程的运行被认为是在上下文中执行。

进程上下文组成 •系统级上下文:包括进程的标识信息、现场信息和控制信息,进程环境块,及系统堆栈等组成的进程地址空间。 •用户级上下文:由用户程序块、用户数据块和用户堆栈组成的进程地址空间。 •系统级上下文:包括进程的标识信息、现场信息和控制信息,进程环境块,及系统堆栈等组成的进程地址空间。 •寄存器上下文:由PSW寄存器和各类控制寄存器、地址寄存器、通用寄存器组成。

进程有四个要素组成 •进程程序块 •进程数据块 •系统堆栈 •用户堆栈

用户进程在虚拟内存中的组织 进程标识信息 进程现场信息 进程控制信息 用户堆栈 用户私有地址空间 (代码、数据) 进程控制块 共享地址空间

 进程控制块(1) 进程控制块P C B ,是操作系统用于记录和刻划进程状态及有关信息的数据结构。也是操作系统掌握进程的唯一资料结构,它包括了进程执行时的情况,以及进程让出处理器后所处的状态、断点等信息。

进程控制块(2) 进程控制块包含三类信息 .标识信息 .现场信息 .控制信息

进程控制块(3) 标识信息 •常用的标识信息有进程标识符、父进程的标识符、用户进程名、用户组名等。 •用于唯一地标识一个进程,分由用户使用的外部标识符和被系统使用的内部标识号。 •常用的标识信息有进程标识符、父进程的标识符、用户进程名、用户组名等。

进程控制块(4) 现场信息 •保留进程运行时存放在处理器现场中的各种信息,进程让出处理器时必须把处理器现场信息保存到PCB中,当该进程重新恢复运行时也应恢复处理器现场。 •现场信息包括通用寄存器内容、控制寄存器内容、用户堆栈指针、系统堆栈指针等。

进程控制块(5) 控制信息(1) 2) 进程组成信息,如正文段指针、数据段指针; 1)进程调度相关信息,如进程状态、等待事件和等待原因、进程优先级、队列指引元等; 2) 进程组成信息,如正文段指针、数据段指针; 3)进程间通信相关信息,如消息队列指针、信号量等互斥和同步机制;

进程控制块(6) 控制信息(2) 4)进程在二级存储器内的地址信息; 5)CPU资源的占用和使用信息,如时间片余量、进程己占用时间、进程己执行时间总和,记帐信息;

进程控制块(7) 控制信息(3) 7) 资源清单,包括进程所需全部资源、已经分得资源,如主存资源、I/O设备、打开文件表等。 6)进程特权信息,如在内存访问和处理器状态方面的特权。 7) 资源清单,包括进程所需全部资源、已经分得资源,如主存资源、I/O设备、打开文件表等。

进程管理(1) 处于同一状态的所有PCB链接在一起的数据结构称为进程队列(Process Queues)。   进程管理(1) 处于同一状态的所有PCB链接在一起的数据结构称为进程队列(Process Queues)。 同一状态进程的PCB既可按先来先到的原则排成队列;也可按优先数或其它原则排成队列。

进程管理(2) 链接进程控制块的方法 单向链接 双向链接

进程管理(3) 队列标志 系统为每个队列设置一个队列标志: 单向链接时, 队列标志指引元指向队列中第一个进程的队列指引元的位置; 双向链接时, 队列标志的后向指引元指向队列中第一个进程的后向队列指引元的位置; 队列标志的前向指引元指向队列中最后一个进程的前向队列指引元的位置

进程管理(4) 进程控制块的链接 队列标志 后向 前向 (a) 单向连接 (b) 双向连接 是队列指引元

进程管理(5) 队列管理 •入队 •出队 •队列管理模块

队列管理和状态转换示意图 处理器 指派 提交 完成 超时 事件1等待队列 事件2等待队列 事件n等待队列 就绪队列 等待事件1 等待事件2 …… 等待事件1 等待事件2 等待事件n 事件1 出现 事件2 事件n

前(后)向指引元的内容规定 •情况1:它是队列之首。此时,前向指引元为0,后向指引元指出它的下一个进程的后向指引元位置。 •情况2:它是队列之尾。此时,后向指引元为0,它的前向指引元指出它的上一个进程的前向指引元位置。 •情况3:它的前后均有进程。此时,前(后)向指引元指出它的上(下)一个进程的前(后)向指引元位置。

进程的出队举例 假设进程Q在某个队列中,它的前面是进程P,后面是进程R。 进程Q出队过程:把Q的前向指引元的内容送到R的前向指引元中,把Q的后向指引元的内容送到P的后向指引元中。于是P的后向指引元指向R,而R的前向指引元指向P,Q就从队列中退出。

表格法组织PCB 表格法组织PCB。所有进程的PCB都组织在一个线性表中,进程调度时需要查找整个PCB表;

2.3.4 进程切换与CPU模式切换 进程上下文切换(1) 进程切换是让处于运行态的进程中断运行,让出处理器,这时要做一次进程上下文切换、即保存老进程状态而装入被保护了的新进程的状态,以便新进程运行。

进程上下文切换(2) 进程切换的步骤(1) •保存被中断进程的处理器现场信息。 •修改被中断进程的进程控制块的有关信息,如进程状态等。 •把被中断进程的进程控制块加入有关队列。 •选择下一个占有处理器运行的进程。

进程上下文切换(3) 进程切换的步骤(2) •根据被选中进程设置操作系统用到的地址转换和存储保护信息。 •根据被选中进程恢复处理器现场。 •修改被选中进程的进程控制块的有关信息。 •根据被选中进程设置操作系统用到的地址转换和存储保护信息。 •根据被选中进程恢复处理器现场。

进程上下文切换(4) 调度和切换时机问题(1) • 请求调度的事件发生后,就会运行低级调度程序,低级调度程序选中新的就绪进程后,就会进行上下文切换。实际上,由于种种原因,并不一定能一气呵成。

进程上下文切换(5) 调度和切换时机问题(2) • 例1,运行内核中断处理例程期间,发生了更高优先级的I/O中断的情况; • 例2,若正在运行操作系统内核临界区程序,如果时钟中断导致请求低级调度的事件发生的情况; • 在各种各样的原子操作,如原语操作、现场保护和恢复等过程中,发生了请求调度的事件的情况。

进程上下文切换(6) 调度和切换时机问题(3) • 通常的做法是,由内核置上请求调度标志,延迟到上述工作完成后再进行调度和进程上下文切换, • Linux进程调度标志位need-resched, •Windows2000/XP延迟过程调用DPC/dispatch软件中断。

CPU模式切换(1) •当中断发生时,暂时中断正在执行的用户进程,把进程从用户状态切换到内核状态,去执行操作系统例行程序以获得服务,这就是一次模式切换, •内核在被中断了的进程的上下文中对这个中断事件作处理,即使该中断可能不是此进程引起的。

CPU模式切换(2) 被中断进程可以是正在用户态下执行的,也可以是正在核心态下执行的,内核都要保留足够信息以便在后来能恢复被中断了的进程执行。

CPU模式切换(3) 模式切换的步骤 •保存被中断进程的处理器现场信息。 •根据中断号置程序计数器。 •把用户状态切换到内核状态,以便执行中断处理程序。

CPU模式切换与进程上下文切换 模式切换不同于进程切换,它并不引起进程状态变化,也不一定引起进程的切换,在完成了中断调用之后,完全可以再通过一次逆向的模式切换来继续执行用户进程。

UNIX进程上下文切换和模式切换(1) 两类进程:系统进程和用户进程,系统进程在核心态下执行操作系统代码,用户进程在用户态下执行用户程序。 用户进程因中断和系统调用进入内核态,系统进程开始执行,两个进程使用同一个PCB,实质上是一个进程。但所执行的程序不同,映射到不同物理地址空间、使用不同堆栈。

UNIX中进程上下文切换和模式切换(2) 核心态 运行 系统调用或中断(隐含模式切换) 模式切换 用户态 等待 状态 就绪 发生事件 唤醒 调度进程 中断、 中断返回 允许的上下文切换切换

2.3.5 进程的控制 原语(1) 处理器管理的一个主要工作是对进程的控制,包括:创建进程、阻塞进程、唤醒进程、挂起进程、激活进程、终止进程和撤销进程等。 这些控制和管理功能是由操作系统中的原语来实现的。

原语(2) 原语(Primitive)是在管态下执行、完成系统特定功能的过程。 原语和机器指令类似,其特点是执行过程中不允许被中断,是一个不可分割的基本单位,原语的执行是顺序的而不可能是并发的。

原语(3) 一种原语的实现方法是以系统调用方式提供原语接口,且采用屏蔽中断的方式来实现原语功能,以保证原语操作不被打断的特性。

进程的创建(1) •提交一个批处理作业。 •在终端上交互式的登录。 •操作系统创建一个服务进程。 •存在的进程孵化(spawn)新的进程。 进程创建来源于以下事件: •提交一个批处理作业。 •在终端上交互式的登录。 •操作系统创建一个服务进程。 •存在的进程孵化(spawn)新的进程。

进程的创建(2) 生成进程称父进程(Parent Process) ,被生成进程称子进程(Child Process) 、即一个父进程可以创建子进程,从而形成树形结构。

进程的创建过程(1) • 在进程表中增加一项,并从PCB池中取一个空白PCB。 • 为新进程的进程映像分配地址空间。传递环境变量,构造共享地址空间。 • 为新进程分配资源,除内存空间外,还有其他各种资源。

进程的创建过程(2) • 查找辅存,找到进程正文段并装到正文区。 • 初始化进程控制块,为新进程分配进程标识符,初始化PSW。 • 加入就绪进程队列,或直接将进程投入运行。 • 通知操作系统的某些模块,如记账程序、性能监控程序。

进程的创建过程(3) Linux fork( ) 创建子进程但父子进程不共享内容 Linux clone( ) 允许定义父子进程共享的内容

进程的创建过程(4) 操作系统最多进程数的限制。 UNIX(早期)最多创建几十个进程。 Solaris可在启动时根据内存容量自动调整创建数。

进程的创建过程(5) Linux2.4中,最多进程数是运行时可调参数,缺省设置为:size-of-memory-in-the-system/kernel-stack-size/2。 假如机器有512MB内存,缺省可创建进程的上限为:512×1024×1024/8192/2=32768。

2 进程的阻塞和唤醒(1) •停止进程执行,保存现场信息到PSW 。 •修改PCB的有关内容,如进程状态由运行改为等待等。 进程阻塞的步骤如下: •停止进程执行,保存现场信息到PSW 。 •修改PCB的有关内容,如进程状态由运行改为等待等。 •把修改状态后的PCB加入相应等待进程队列。

进程的阻塞和唤醒(2) •从相应等待进程队列中取出PCB。 •修改PCB有关信息,如进程状态等。 •把修改后PCB加入有关就绪进程队列。 进程唤醒的步骤如下: •从相应等待进程队列中取出PCB。 •修改PCB有关信息,如进程状态等。 •把修改后PCB加入有关就绪进程队列。

3 进程的撤销(1) •进程执行了非法指令。 •进程在常态下执行了特权指令。 •进程运行时间超越了分给的最大时间段。  3 进程的撤销(1) 进程撤销的主要原因(1): •进程正常运行结束。 •进程执行了非法指令。 •进程在常态下执行了特权指令。 •进程运行时间超越了分给的最大时间段。 •进程等待时间超越了设定的最大等待时间。 •进程申请的内存超过了系统能提供最大量。 •越界错误。

进程的撤销(2) •对共享内存区的非法使用。 •算术错误,如除零和操作数溢出。 •严重的输入输出错误。 •操作员或操作系统干预。    进程撤销的主要原因(2): •对共享内存区的非法使用。 •算术错误,如除零和操作数溢出。 •严重的输入输出错误。 •操作员或操作系统干预。 •父进程撤销其子进程。 •父进程撤销。 •操作系统终止。

进程的撤销(3) 撤销原语终止进程具体步骤 •根据撤销进程标识号,从相应队列中找到它的PCB; •将该进程拥有的资源归还给父进程或操作系统; •若该进程拥有子进程,应先撤销它的所有子孙进程,以防它们脱离控制; •撤销进程出队,将它的PCB归还到PCB池。

4 进程的挂起和激活(1) 挂起原语执行过程如下:检查要被挂起进程的状态,若处于活动就绪态就修改为挂起就绪,若处于阻塞态,则修改为挂起阻塞。 被挂起进程PCB的非常驻部分要交换到磁盘对换区。

进程的挂起和激活(2) 激活原语主要工作:把进程PCB非常驻部分调进内存,修改它的状态,挂起等待态改为等待态,挂起就绪态改为就绪态,排入相应队列中。 挂起原语既可由进程自己也可由其他进程调用,但激活原语却只能由其他进程调用。

2.3.6 实例研究:UNIX SVR4的 进程管理 UNIX SVR4采用基于用户进程的运行模型,操作系统功能在用户进程的环境中执行,需要在用户和内核模式间切换。 UNIX SVR4允许两类进程:用户进程和系统进程。系统进程在内核模式下执行,完成系统的一些重要功能。用户进程在用户模式下执行用户程序,系统调用、中断和异常将引起模式切换。

UNIX SVR4 进程状态 • user running: • kernel running: • preempted: • ready to run, in memory: • Asleep in memory: ready to run, swapped: sleeping, swapped: zombie:

UNIX SVR4进程状态及其转换 内存就绪 用户态 运行 内核态 被剥夺 就绪换出 创建 内存 睡眠 换出 僵死 返回用户模式 系统调用或中断 返回 剥夺 选中 退出 中断, 中断返回 内存空间足够 内存空间不足 唤醒 换进 Fork

UNIX进程树(1) UNIX中有两个固定进程: 0号是swap进程,系统自举时被创建; 1号是init进程,由0号进程孵化而创建。其他进程都是1号进程的子进程, 当一个交互式用户登录到系统中时,1号进程为这个用户创建用户进程,用户进程在执行应用时创建子进程,从而,构成一棵进程树。

UNIX进程树(2)

UNIX SVR4的进程描述(1) UNIX进程由三部分组成:proc结构、数据段和正文段,合称进程映像,UNIX中把进程定义为映像的执行。 PCB由基本控制块proc结构和扩充控制块user结构组成。

UNIX SVR4的进程描述(2) proc结构存放一个进程最基本、必需的信息,常驻内存; user结构存放进程运行时才用到的数据和状态信息,当进程暂时不在处理机上运行时,就把它放在磁盘的对换区中,进程的user结构总和进程的数据段一起,在主存和磁盘对换区之间换进/换出。

UNIX 进程组成(1) System data structure user space process structure user kernel stack text data System data structure user space Swappable process image Resident tables

UNIX 进程组成(2) 系统中维持一张名叫proc的进程表,共有50个表目,每个表目为一个proc结构,供一个进程使用,

UNIX 进程组成(3) 进程映像内容(1) •proc结构 包括进程标识符、父进程标识符、进程用户标识符、进程状态、等待的事件、调度优先数、进程的大小、指向user结构和进程存储区(text/data/stack)的指针、有关进程执行时间/核心资源使用/用户设置示警信号等的计时器、就绪队列指针等。

UNIX 进程组成(4) 进程映像内容(2) •user结构 包括现场保护、内存管理、系统调用、文件管理、文件读写、时间信息、映象位置、用户标识、用户组标识、用户打开文件表、各种标志等。

UNIX 进程组成(5) 进程映像内容(3) •系统数据结构 称作ppda,位于数据段的前面,进程proc结构中P-addr指向这个区域的首址。该区共有1KB,前面289B为进程扩充控制块user结构,剩下734B为核心栈,进程运行在核心态时,是它的工作区,用来保存过程调用和中断访问时用到的地址和参数。

UNIX 进程组成(6) 进程映像内容(4) •用户数据区 存放程序运行时用到的数据,如果进程运行的程序是非共享的,那么这个程序也放于此地。 •用户数据区 存放程序运行时用到的数据,如果进程运行的程序是非共享的,那么这个程序也放于此地。 •用户栈区 当进程运行在用户态时,这里是它的工作区。

UNIX 进程组成(7) 进程映像内容(5) •text结构 正文段在磁盘上和主存中的位置和大小、访问正文段进程数、在主存中访问正文段进程数、标志信息、地址转换信息。 •在内存中设置一张正文段表。有40个表目,每个都是一个text结构,记录一个共享正文段的属性(磁盘和主存中的位置、尺寸、共享的进程数等、正文段文件节点指针)。

UNIX 进程组成(8) 进程映像内容(6) 若一个进程有共享正文段,当把该进程的非常驻内存部分调入内存时,应该关注共享正文段是否也在内存,如果发现不在内存,则要将它调入;

UNIX 进程组成(9) 进程映像内容(7) 进程的非常驻内存部分调出内存时,要关注共享正文段被共享的情况,只要还有别的共享进程的映象全部在内存,这个共享正文段就不得调出。 在进程映象的三个组成部分中,proc、user和text这三个数据结构是最为重要的角色。

UNIX 进程组成(10) 进程映像内容(8) •进程区域表 系统为每个进程建立进程区域表PPRT(Per Process Region Table)由存储管理系统使用,定义了物理地址与虚拟地址之间的对应关系,进程对存储区域的访问权限。

UNIX 进程组成(11) struct proc { char p-stat; 进程状态 char p-flag; 进程特征 char p-pri; 进程优先数 char p-sig; 软中断号 char p-uid; 进程所属的用户标识数, char p-time; 进程在内存或外存的驻留时间 char p-cpu; 用于调度优先数计算

UNIX 进程组成(12) char p-nice; 计算调度优先数 int p-ttyp; 指向对应终端的tty结构 int p-pid; 进程标识数 int p-ppid; 父进程的标识数 int p-addr; 进程数据段起始地址(内存或盘上) int p-size; 数据段大小 int p-wchan; 标识进程睡眠的原因 int * p-textp;指向文本的文本结构 } proc [NPROC]

UNIX 进程组成(13) struct user { int u-rsav [2];保存r5, r6,用于程序的正常或非正常返回 int u-fsav [2];用于保留浮点寄存器 char u-segflg; I/O目的地址在用户空间或系统空间的标志 char u-error; 返回出错号码

UNIX 进程组成(14) char u-uid; 有效用户标识数 char u-ruid; 有效用户小组标识数 char u-rgid; 实际用户小组标识数 int u-procp; 指向本进程proc结构指针 char * u-base;指向读写缓冲存储器的起始地址

UNIX 进程组成(15) char * u-count; 存放读写字节数nbytes char * u-offset[2]; 读、写的起始位置 int * u-cdir; 工作目录文件的inode指针 char u-dbuf [DIRSIZ]; 存放当前工作文件的路径名DIRSIZ=14

UNIX 进程组成(16) char * u-dirp; 当前目录文件名的指针 struct {构成文件的目录项,由文件所在节点的节点号 ino和文件的路径 int u-ino; 名组成 char u-name [DIRSIZ]; } u-dent;

UNIX SVR4的进程创建(1) fork( )创建子进程,系统执行操作: •为子进程分配进程表。 •为子进程分配进程标识符。 •复制父进程的进程映像,但不复制共享内存区。 •增加父进程所打开文件的计数,表示新进程也在使用这些文件。 •把子进程置为ready to run状态。 •返回子进程标识符给父进程,把0值返回给子进程。

UNIX SVR4的进程创建(2) 父进程还应执行以下操作之一,以完成进程指派: •继续呆在父进程中。把进程控制切换到父进程的用户模式,在fork()点继续运行,而子进程进入ready to run状态。 •把进程控制传递到子进程,子进程在fork()点继续运行,父进程进入ready to run态。 •把进程控制传递到其他进程,父进程和子进程进入ready to run状态。

fork( )创建子进程的程序(1) /*spawn the process*/ main( ) { int pid; /*process-id*/ printf(“Just one process so far\n”); printf(“Calling fork …\n); pid=fork( ); /*Craat new process*/ if(pid==o) printf (“I am the child process\n); else if(pid>0) printf(“I am the parent process, child has pid d%\n”,pid); else printf(“fork returned error code,no child\n”); }

fork( )创建子进程的程序(2) 1子进程是父进程的复制品,完全一样 2父子进程的指令执行点都在fork( )语句之后的那个语句 3fork( )没有参数,但返回值pid不一样,子进程中pid为0;父进程中pid为非0正整数(即子进程的内部标识号) 4父子进程可根据不同pid值执行不同程序,完成不同工作

2.3.7 实例研究:Linux进程管理 Linux的进程概念与传统操作系统中的进程概念完全一致,进程是操作系统调度的最小单位。

Linux进程和任务 用户态称进程 核心态称任务 实质上是一个实体

Linux的进程状态(1) •TASK_RUNNING:正在运行或准备运行的进程。 •TASK_INTERRUPTIBLE:处于等待队列中的进程,一旦资源可用时被唤醒,也可以由其他进程通过信号或定时中断唤醒。 •TASK_UNINTERRUPTIBLE:处于等待队列中的进程,一旦资源可用时被唤醒,不可由其他进程通过信号或定时中断唤醒。

Linux的进程状态(2) •TASK_ZOMBIE:进程运行结束但是尚未消亡时处于的状态。 •TASK_STOPPED:进程被暂停,正在等待其他进程发出的唤醒信号。 •TASK_SWAPPING:页面被交换出内存的进程。

Linux的进程状态转换 僵死TASK_ZOMBIE 就绪TASK_RUNNING 不可中断TASK_UNINTERRUPTIBLE 可中断TASK_INTERRUPTIBLE 停止TASK_STOPPED 占有CPU运行 调度schedulle 时间片到 申请资源未果,调用 interruptible_sleep_on() 申请资源未果,调用sleep_on() 申请资源可用后wake_up() 申请资源可用, 收到信号、wake_up() wake_up_interruptible() 创建do_fork() 执行do_exit() 跟踪系统调用,执行syscall_trace() sys_exit()schedulle() 收到SIG_KILL或SIG_CONT后,执行wake_up()

Linux创建进程(1) •sys_fork()和sys_clone都通过调用do_fork()函数来完成进程的创建。 •分配进程控制块task_struct的内存和进程所需的堆栈,并监测是否可以增加新进程; •拷贝当前进程的内容,并对数据成员初始化;为进程运行做准备;返回生成的新进程的进程标识号(pid)。

Linux创建进程(2) 如果进程是根据sys_clone()产生的,它的进程标识号就是当前进程的进程标识号,并且对于进程控制块中的一些成员指针并不进行复制,而仅仅把这些成员指针的计数count增加1。这样,父子进程可以有效地共享资源。

Linux进程终止 进程终止的系统调用sys_exit()通过调用do_exit()函数实现。函数do_exit()释放进程占用的大部分资源,进入TASK_ZOMBIE状态,调用exit_notify()通知。

Linux 进程控制块(1) Linux的PCB由结构struct task_struct描述。它的构成如下:

Linux进程控制块(2) 调度用数据成员 State 进程状态 Flags 进程状态标记 Priority 进程优先数 rt_priority 实时进程优先数 Counter 时间片 Policy 调度策略

Linux进程控制块(3) 信号处理 Signal 记录进程接收到的信号,共32位,每位对应一种信号 Blocked 进程接收到信号的屏蔽位

Linux进程控制块(4) 进程队列指针 next_task,prev_task 双向链接指针 next_run,prev_run 就绪队列双向链接指针 p_opptr,p_pptr,p_cptr,p_ysptr,p_osptr 分别指向原始父进程、父进程,子进程、新老兄弟进程

Linux进程控制块(5) 进程标识 uid,gid 用户标识和组标识 Group 进程同时拥有的一组用户组号 euid,egid 有效的uid和gid系统安全考虑 fsuid,fsgid 文件系统的uid和gid suid,sgid 系统调用改变uid和gid时,存放真正的uid和gid pid,pgrp,session 进程标识号、组标识号、session标识号

Linux进程控制块(6) 时间数据成员 timeout 指出进程间隔多久被重新唤醒 it_real_value,it_real_incr 时间片计时 real_timer 一种定时器结构 it_virt_value,it_virt_incr 进程用户态执行时间的软件定时 it_prof_value,it_prof_incr 进程执行时间的软件定时 utime,stime,cutime,cstime,start_time 进程在用户态、内核态运行时间,所有进程在用户态、内核态运行时间,创建进程时间

Linux进程控制块(7) 信号量 semundo 进程操作信号量的undo操作 semsleeping 信号量对应等待队列 上下文 ldt 进程关于段式存储管理的局部描述符指针 tss 通用寄存器

Linux进程控制块(8) saved_kernel_stack MSDOS仿真程序保存的堆栈指针 saved_kernel_page 内核堆栈基地址 文件系统 fs 保存进程与VFS的关系信息 files 系统打开文件表 link_count 文件链的数目

Linux进程控制块(9) 内存数据成员 mm_struct结构 swappable 指示页面是否可以换出 swap_address 换出用的地址 min_flt,maj_flt 该进程累计缺页次数

Linux进程控制块(10) nswap 进程累计换出的页面数 cmin_flt,cmaj_flt 进程及其子进程累计缺页次数 cnswap 进程及其子进程累计换出页面数 swap_cnt 下一次循环最多可以换出的页数

Linux进程控制块(11) SMP支持 processor 进程正在使用的CPU last_processor 进程上一次使用的cpu lock_depth 上下文切换时系统内核锁的深度

Linux进程控制块(12) 其他 used_math 是否使用浮点运算器 comm 进程对应的可执行文件的文件名 rlim 系统使用资源的限制 errno 错误号 debugreg 调试寄存器

Linux进程控制块(13) exec_domain,Personality 与运行iBCS2标准程序有关 Binfmt 指向全局执行文件格式结构,包括a.out,script,elf,java exit_code,exit_signal 返回代码,引起出错的信号名 Dumpable 出错时是否能够进行memory dump  

Linux进程控制块(14) did_exec 用于区分新老程序代码 tty_old_pgrp 进程显示终端所在的组标识 wait_chldexit 在进程结束需要等待子进程时处于的等待队列,

(1)current 当前正在运行的进程的指针,在SMP中则指向CPU组中正被调度的CPU的当前进程。 Linux进程调度的全局变量(1) (1)current 当前正在运行的进程的指针,在SMP中则指向CPU组中正被调度的CPU的当前进程。 (2)init-task 即0号进程的PCB,是进程树的根。

Linux进程调度的全局变量(2) (3)*task[NR-TASKS] 进程PCB数组,规定系统可同时运行的最大进程数,task[0]必须指向0号进程init-task,可以通过tasks[]数组遍历所有进程的PCB,另外,还提供了宏for-each-task(),它通过next-task遍历所有进程的PCB。

Linux进程调度的全局变量(3) (4)jiffies 是Linux的基准时间,系统初始化时清0,每隔10ms由时钟中断处理程序do-timer()增1。 (5)need-resched 重新调度标志位,当进程需要系统调度时置位,在系统调用返回前或其他情况下,判别标志位是否为1,以决定是否调用schedule()进行CPU调度。 (6)intr-count 记录中断服务程序的嵌套重数。