第1页:第二章进程、线程与作业
2.1多道程序设计Multi-programming2.2进程的引入Process2.3线程与轻进程Threadandlight-weightedprocess2.4作业Job2.5系统举例
第2页:2.1 多道程序设计
- 2.1 多道程序设计
- 2.1.1 单道程序设计的缺点
- 2.1.2 多道程序设计的提出
- 2.1.3 多道程序设计的问题
第3页:2.1 多道程序设计(续)
- 目的
- 提高系统效率;
- 衡量指标
- 吞吐量(throughput)单位时间内系统所处理作业(程序)的道数(数量)。吞吐量=作业道数全部处理时间
- 解决方式
- 提高系统资源利用率。多道程序设计能最大限度地提高系统资源的利用率
第4页:2.1.1 单道程序设计的缺点
- 概念
- 一次只允许一个程序进入系统运行。
- 缺点
- 资源利用率低,表现在:⑴设备利用率低:同一时刻只能用一种设备或子集;⑵内存利用率低:单个程序所占内存远远小于主存容量;⑶处理器利用率低:当有I/O操作时CPU通常处于等待状态。t运行程序ACPU设备1运行程序At1t2t5t6设备2
第5页:2.1.2 多道程序设计的提出
- 思想
- 增加资源使用者数量,即增加系统中程序运行个数。
- 优点
- 提高处理器、设备、内存等各种资源的利用率,从而提高系统效率。CPU设备1程序Att1t2t5t6设备2程序B程序At3t4
第6页:2.1.2 多道程序设计的提出(续)
- 道数确定
- 增加同时运行程序的道数可以提高资源利用率,从而提高系统效率,但道数应与系统资源数量相当。
- 道数过少
- 系统资源利用率低。
- 道数过多
- 系统开销(system overhead)增大,程序响应速度下降。
第7页:2.1.2 多道程序设计的提出道数限制因
:⑴内存容量限制:由于虚拟地址空间的引入,内存可同时运行多个程序。但每个程序不可能全部装入内存,会出现缺页/段的情况,导致频繁调入调出,即出现“抖动”现象;⑵设备数量限制:道数过多,程序之间会出现互相等待设备情况;⑶CPU竞争:道数过多会出现对CPU的竞争,增加处理器分配开销,影响系统响应速度。
第8页:2.1.3 多道程序设计的问题
- 1.处理器资源管理问题
- 程序个数→处理器个数程序对CPU有竞争,如何分配、调度;
- 2.存储资源管理问题
- 存储空间的分配与管理;
- 程序逻辑地址到内存物理地址的映射;
- 程序之间存储空间的保护;
- 内存、外存(swap space)的分配与去配。
- 3.设备资源管理问题
- 4.多道程序之间通信、互斥、死锁等问题。
第9页:2.2 进程的引入
- 2.2 进程的引入
- 2.2.1 进程的概念
- 2.2.2 进程状态及状态转换
- 2.2.3 进程控制块
- 2.2.4 进程的组成与上下文
- 2.2.5 进程的队列
- 2.2.6 进程的类型和特性
- 2.2.7 进程间相互联系与相互作用
- 2.2.8 进程的创建与撤销
- 2.2.9 进程与程序间的联系与差别
第10页:2.2 进程的引入(续)
多道系统中的程序:推进暂停推进暂停暂停:保存现场(PSW+PC,寄存器)推进:恢复现场(寄存器,PSW+PC)暂停原因:⑴自身原因:等待资源,启动I/O;⑵剥夺CPU—给其它程序运行机会。
第11页:2.2.1 进程的概念进程的多种观点
:⑴进程是程序的一次执行;⑵进程是可参与并发执行的程序;⑶进程是一个程序与数据通过处理器执行所发生的活动;⑷进程是给定空间和初始环境下,在处理器上的执行过程;⑸定义:进程是具有一定独立功能的程序关于一个数据集合的一次运行活动”。
第12页:2.2.2 进程状态及状态转换
- 1.进程状态(基本状态)
- 运行态(RUN):占有CPU正在向前推进
- 就绪态(READY):可以运行,但未得到CPU
- 等待态(WAIT):等待某一事件发生
- 2.状态转换
- 就绪→运行:获得处理机
- 运行→就绪:剥夺处理机
- 运行→等待:申请资源未得到;启动I/O
- 等待→就绪:得到资源;I/O中断
第13页:2.2.2 进程状态及状态转换(续)
- 就绪等待运行调度选中剥夺等待事件事件发生进程状态转换图2.2.2进程状态及状态转换
- 进程状态转换由操作系统完成,对用户是透明的;
- 进程在其生存期内经过多次状态转换,体现了进程的动态性和并发性。
第14页:2.2.2 进程状态及状态转换(续3)
2.2.3进程控制块PCB定义(Process Control Block)标志进程存在的数据结构,其中包含系统对进程进行管理所需的全部信息。PCB内容:(不同系统不尽相同)⑴进程标识⑺程序地址⑵用户标识⑻当前打开文件⑶进程状态⑼消息队列指针⑷调度参数⑽资源使用情况⑸现场信息⑾进程队列指针⑹家族联系
第15页:2.2.4 进程的组成与上下文进程的组成
- 1.进程控制块(Process Control Block)
- 2.程序
- 代码( code ):纯代码、可重定位;
- 数据( data )•静态变量;•栈、堆( stack + heap )栈:保存返回点、参数、返回值、局部变量、寄存器内容;堆:动态变量
第16页:2.2.4 进程的组成与上下文进程的表记
:进程的物理形式表征。PCB程序PCB代码数据整体性代码可共享性系统空间用户空间定义:进程的程序(代码和数据)称为进程影像(Process Image)。
第17页:2.2.4 进程的组成与上下文
- 进程上下文(process context)进程的物理实体与支持进程运行的物理环境。统称为进程上下文
- PCB +程序(数据、代码)
- 系统环境:地址空间,系统堆/栈,打开文件表,通用寄存器…
- 上下文切换(context switch)由一个进程的上下文转到另外一个进程的上下文。定义:系统开销(system overhead)运行操作系统程序、对系统进行管理所花费的时间和空间。
第18页:2.2.5进程的队列PCBPCBPCB…
- 2.2.5进程的队列PCBPCBPCB……head
- 1.就绪队列:系统一个或若干个(根据调度算法确定);
- 2.等待队列
- 每个等待事件一个;
- 3.运行队列
- 每个处理器一个,每个队列只有一个进程。运行指示字:指向运行队列头部的指针叫做运行指示字。PCB构成的队列:(不一定FIFO,单向或双向)
第19页:2.2.5 进程的队列就绪队列时间片用完
1等待队列2等待队列nCPU等待事件1等待事件2等待事件n事件1发生事件2发生事件n发生创建完成………进程队列模型运行
第20页:2.2.6 进程的类型和特性进程类型
- 系统进程
- 运行操作系统程序,完成系统管理(服务)功能.
- 也称作守护进程(daemon)
- 用户进程
- 运行用户(应用)程序,为用户服务。
- 例如:UNIX vi, shell, cc
第21页:2.2.6 进程的类型和特性进程…(续)
- 2.2.6进程的类型和特性进程的特性
- ①并发性:可以与其它进程宏观上一齐向前推进;
- ②动态性
- 动态产生、消亡,生存期内状态动态变化;
- ③独立性
- 一个进程是可以调度的基本单位;
- ④交互性
- 同时运行的进程可能发生相互作用;
- ⑤异步性
- 进程以各自独立不可预知的速度向前推进;
- ⑥结构性
- 每个进程有一个PCB。
第22页:2.2.7 进程间相互联系与相互作用相互
- 相关进程
- 同一家族的进程;
- 可以共享文件,需要相互通信,协调推进速度;
- 父进程可以监视子进程,子进程完成父进程交给的任务。
- 无关进程
- 没有逻辑关系、同时执行的进程。
- 有资源竞争关系,互斥、死锁、饿死。
第23页:2.2.7 进程间相互联系与相互…(续)
- 1.直接相互作用:发生在相关进程之间,不通过媒介。
- 2.间接相互作用:发生在任何进程之间,通过媒介。syncsendreceiveP1:P2:RP2P1holdwait
第24页:2.2.8 进程的创建与撤销
- 进程创建:⑴初始进程;(系统调用)⑵其它进程由(父)进程创建,并形成进程家族。
- 建立PCB,分配内存,加载程序,入就绪链
- UNIX:pid=fork(),execl(prog,args)
- 进程的撤销⑴正常终止;⑵地址越界、非法指令、用户或父进程的KILL.
- 去配资源,撤销PCB,通知父进程
- UNIX:exit() vs. kill
第25页:2.2.8 进程的创建与撤销(续)
考虑进程生灭的状态转换图结束创建事件发生剥夺处理机就绪等待运行调度选中等待事件创建终止
第26页:2.2.9 进程与程序的联系与差别
- 进程与程序的联系
- 进程包括一个程序;
- 进程存在的目的就是执行这个程序。
- 进程与程序的差别
- 程序静态,进程动态;
- 程序可长期保存,进程有生存期;
- 一个程序可对应多个进程,一个进程只能执行一个程序。
第27页:2.3 线程与轻进程
- 2.3 线程与轻进程
- 2.3.1 线程的引入
- 2.3.2 线程的概念
- 2.3.3 线程的结构
- 2.3.4 线程控制块
- 2.3.5 线程的实现
- 2.3.6 线程的应用
第28页:2.3.1 线程的引入
- 进程切换
- 早期OS,进程是CPU基本调度单位;
- 上下文涉及内容多,开销大,”笨重”;
- 相关进程之间耦合关系差;
- 线程思想有些应用需要多个涉及相同代码或数据的执行流,执行流之间的切换不涉及地址空间的变化。
- 解决方案
- Multi-threading;
- 同一进程中包含多个线程;
- 上下文只涉及寄存器和用户栈,切换速度快;
- 相关线程之间通信方便、快捷。
第29页:2.3.2 线程的概念
- 线程(Thread):是进程内一个相对独立的执行流。也称轻进程(Light Weighted Process: LWP).
- 进程vs.线程
- 一个进程可以包含多个线程;
- 同一进程中的不同线程可以执行同一程序中的相同代码或不同代码段;
- 进程是资源分配单位;线程是CPU的调度单位。
- 多线程优点
- 切换速度快:地址空间不变;(light weighted)
- 系统开销小;
- 通信容易:共享数据空间。
第30页:2.3.3 线程的结构多进程结构
(用户视图)用户栈寄存器进程2静态数据程序代码用户栈进程1动态堆动态堆静态数据程序代码内存寄存器内存
第31页:2.3.3 线程结构多线程结构
(用户视图)静态数据程序代码用户栈寄存器寄存器线程1线程2进程动态堆内存用户栈
第32页:2.3.4 线程控制块
- TCB(Thread Control Block)
- 标志线程存在的数据结构,其中包含对线程管理需要的全部信息。
- 内容
- 线程标识
- 线程状态
- 调度参数
- 现场(通用寄存器,PC,用户栈指针SP)
- 链接指针
- 存放位置
- 用户级线程:系统空间,或目态空间(运行系统)
- 核心级线程:系统空间
第33页:2.3.5 线程的实现
- 2.3.5 线程的实现
- 2.3.5.1 用户级别线程
- 2.3.5.2 核心级别线程
- 2.3.5.3 混合线程
第34页:2.3.5.1 用户级别线程
- 实现方法:
- 基于library函数,系统不可见;
- 线程创建、撤销、状态转换在目态完成;
- TCB在用户空间,CPU调度的基本单位是进程;
- 每个进程一个系统栈。
- 优点:
- 不依赖于操作系统,可采用与问题相关的调度策略,调度灵活;
- 同一进程中多线程切换速度快(不需进入操作系统)。
- 缺点:
- 同一进程中多个线程不能真正并行;
- 一个线程通过系统调用进入系统受阻,进程中其它线程也不能执行。
第35页:2.3.5.1 用户级别线程(续)
2.3.5.1用户级别线程核心栈PCB栈栈栈栈栈代码数据堆代码数据堆TCB进程线程用户空间系统空间用户级别线程环境示意图运行系统
第36页:2.3.5.1 用户级别线程(续3)
2.3.5.1用户级别线程运行系统TCB进程线程核心栈进程表用户空间系统空间
第37页:2.3.5.1 用户级别线程(续4)
- 进程状态
- 若进程的多个线程中至少有一个处于运行态,则该进程状态为运行态;
- 若进程的多个线程均不处于运行态,但至少有一个处于就绪态,则该进程处于就绪态;
- 若进程的多个线程均处于等待态,则该进程处于等待态。
第38页:2.3.5.2 核心级别线程
- 实现方法:
- 基于系统调用;
- 创建、撤销、状态转换由操作系统完成;
- TCB保存在系统空间;
- 线程是CPU调度的基本单位。
- 优点:
- 同一进程内多线程可以并行执行(多CPU);
- 一线程进入核心等待,其它线程仍可执行。
- 缺点:线程控制和状态转换由操作系统完成。
- 系统开销大,同一进程内多线程切换速度慢;
- 调度算法不能灵活控制。进程状态无实际意义!
第39页:2.3.5.2 核心级别线程(续)
2.3.5.2核心级别线程进程线程核心栈PCB用户空间系统空间TCB
第40页:2.3.5.3 混合线程
- (Hybrid approach)Solaris例子:
- User level thread
- Light weighted process(LWP)
- 由Lib程序支持;
- 每个task至少一个LWP;
- 用戶级别线程与LWP可以多对多;
- LWP对操作系统可见。
- 只有与LWP相联系的用户线程向前推进。
- Kernel level thread
- 由kernel支持;
- 每个LWP与唯一一个核心线程对应;
- 核心线程可与CPU多对多,可多对一。
第41页:2.3.5.3 混合线程(续)
(Solaris)CPUtask1task2task3kernelUser levelthreadLight weightprocessKernelthread
第42页:2.3.6 线程的应用多线程的优点
- :①内在的多控制流,需要共享数据;
- ②多线程速度优于多进程:建立和切换;
- ③提高处理机与设备的并行性;
- ④多处理机环境
第43页:2.3.6 线程的应用例子
- :
- Word文字处理(不同代码)
- HTTP server(相同代码)
第44页:2.4 作业
- (Job)
- 作业概念用户要求计算机系统为其完成的计算任务集合。
- 作业步(job step)
- 作业处理过程中一个相对独立的步骤;
- 一般一个作业步可由一个进程完成;
- 某些作业步之间可以并行。
- 作业分类
第45页:2.4.1 批处理作业
- (Batch process)
- 作业控制块(JCB)标志作业存在的数据结构,其中包含系统对作业管理所需要的全部信息。
- JCB内容作业名称;作业状态;调度参数;资源请求;相关进程;作业长度;I/O井中存放位置;记账信息
第46页:2.4.1 批处理作业(续)
- 作业控制语言(JCL)描述批处理作业控制意图的语言。
- 作业说明书(JCL的语句序列)一般一特殊符号起始$ JOB J1$ FORTN …$ LINK …$ EXEC …$ ENDJOB
- 作业控制程序:解释并处理作业说明书的程序。
- 作业控制进程:执行作业控制程序的进程。
第47页:2.4.1 批处理作业(续3)
作业控制程序流程读入作业内容释放输入井空间顺取作业控制语句是结束语句?执行该作业步(可能创建子进程)申请输出井空间输出作业结果进程自我终止NoYes
第48页:2.4.2 交互式作业
- 交互式作业:分时系统用户的每次登录称为一个交互式作业。
- 帐户管理:口令文件
- 口令文件位置:/etc/passwd文件
- 口令文件内容:用户名,口令,用户根目录,同组用户,余额…
- 用户创建与撤销
- 用户提供(用户名,口令,注册资金);
- 系统操作员建立(根目录/usr/zhang,填写passwd文件)
- 删除该用户目录及所有文件;
- 在passwd文件中清除对应entry。
第49页:2.4.2 交互式作业注册
- (登录)与注销
- 注册logon
- 用户名password: ********
- 使用
- 通过shell与系统交互。
- 注销
- 显式注销:logoff
- 隐式注销:如5分钟无输入命令
第50页:2.4.2 交互式作业注册(续)
提示符$读入终端命令分析Logoff?处理内部命令?建立子进程后台命令?等子进程结束输出子进程号记账终止2.4.2交互式作业终端命令解释程序YesYesNoNoNoYes
第51页:2.4.2 交互式作业注册(续3)
- 小结:作业、进程、线程
- 作业与进程
- 作业进入内存后变为进程;
- 一个作业通常与多个进程相对应。
- 进程与线程
- 一个进程一般包含多个线程,至少包含一个线程;
- 不支持多线程的系统,可视为单线程进程。
第52页:2.5 系统举例
2.5.1 Java线程2.5.2 Linux进程与线程2.5.3 Windows 2000/XP进程、线程与纤程
第53页:2.5 系统举例(续)
- 2.5.1 Java线程Java线程四种基本状态
- New
- 新建的线程
- Runnable
- 可运行状态
- Blocked
- 封锁状态
- Dead
- 终止状态.
第54页:2.5 系统举例(续3)
Java线程状态之间的转换关系图Sleep()Suspend()RunnableBlockedDeadNewStart()Stop()Resume()2.5.1 Java线程
第55页:JAVA线程与JVM
- JAVA线程与JVM
- Java线程是由Java虚拟机JVM支持的;
- JVM位于操作系统之上;
- Java线程与操作系统线程之间的对应关系由JVM确定:
- 对于Windows NT的JVM,Java线程与操作系统线程具有一对一关系;
- 对于Solaris的JVM,其对应关系为多对多。2.5.1 Java线程
第56页:2.5.2 Linux进程与线程
- 2.5.2 Linux进程与线程
- 进程与线程在系统内部具有统一的表示;
- 进程与线程的差别通过与fork不同的另外一个系统调用clone体现出来;
- Clone系统调用的形式pid = clone(function,stack_ptr,sharing_flag,arg)
第57页:将把柄返给新进程和线程
- 2.5.3 Windows2000/XP进程、线程与纤程2.5.3.1.进程
- Win32环境中进程的创建
- Win32应用执行CreateProcess调用,创建进程消息发给Win32子系统;
- Win32子系统调用进程管理器创建进程,进程管理器调用OM (Object Management )创建进程对象,然后返回对象把柄给Win32;
- Win32子系统再次调用进程管理器为该进程创建线程,最后Win
第58页:将把柄返给新进程和线程(续)
2.5.3.1进程—进程对象描述类型:进程( type : process )对象头部属性进程标识(Process id)访问令牌(Access token)基础优先级(Base priority)默认处理器亲和度(Default processor affinity)配额限制(Quota limits)执行时间(Execution time)输入/输出记数(I/O counters)异常/调试端口(Exception/debugging ports)退出状态(exit status)对象体属性创建进程(Create process)打开进程(Open process)查询进程信息(Query process information)设置进程信息(Set process information)当前进程(Current process)终止进程(Terminate process)分配/释放虚拟存储(Allocate/free virtual memory)读/写虚拟存储(Read/write virtual memory)保护虚拟存储(Protect virtual memory)加锁/开锁虚存(Lock/unlock virtual memory)查询虚拟存储(Query virtual memory)刷新虚拟存储(Flush virtual memory)服务
第59页:调用创建,可以访问进程内的对象
- 2.5.3.2线程Windows 2000/XP线程
- 每个进程至少包含一个线程,线程是核心调度的基本单位;
- 每个线程包括两个栈:系统栈和用户栈;
- 线程通过Win
第60页:调用创建,可以访问进程内的对象(续)
2.5.3.2线程—线程对象描述类型:线程(Type: thread)对象头部属性客户标识(client id)线程上下文(thread context)动态优先级(dynamic priority)线程处理器亲合度(thread processor affinity)线程执行时间(thread execution time)警示状态(alert status)挂起记数(suspension count)非角色令牌(impersonation token)终止端口(termination port)终止状态(exit status)对象体属性创建线程(Create thread)打开线程(Open thread)查询线程状态(Query thread information)设置线程状态(Set thread information)当前线程(Current thread)终止线程(Terminate thread)取上下文(Get context)置上下文(Set context)挂起(Suspend)恢复(Resume)警示线程(Alert thread)测试线程警示(Test thread alert)注册终止端口(Register termination port)服务
第61页:2.5.3.2线程—线程状态⑴初始(i…
2.5.3.2线程—线程状态⑴初始(initialized):初始创建过程经历的状态;⑵就绪(ready):等待选择CPU运行;⑶备用(standby):已经选好CPU,等待切换进入运行状态。每个CPU上只有一个处于备用状态的进程;⑷运行(running):占有CPU运行;⑸等待(waiting):等待某对象;⑹转换(transition):在外存等待(的就绪状态);⑺终止(terminated):执行结束。
第62页:2.5.3.2线程—线程状态⑴初始(i
2.5.3.2线程—线程状态转换转换等待就绪运行终止初始备用创建线程对象入就绪队列选中抢占切换执行完重新初始化抢占等待某对象唤醒换入内核栈Windows线程状态转换图唤醒队列在外未知
第63页:2.5.3.2 纤程
- (fiber)Windows 2000/XP纤程相当于用户级别的线程或轻进程,由库函数支持,核心不可见。
- 应用程序通过ConvertThreadToFiber将线程转换为线程;
- 纤程包含独立的目态栈、寄存器状态等控制信息;
- 纤程之间切换:SwitchToFiber;
- 一个纤程被封锁,其所在纤程被封锁;