第二章进程、线程与作业2.1多道程序设计–Multi-programming2.2进程的引入–Process2.3线程与轻进程–Threadandlight-weightedprocess作业–JobActiveobjects2.1多道程序设计2.1.1单道程序设计的缺点2.1.2多道程序设计的提出2.1.3多道程序设计的问题Multi-programming多道程序设计目标提高系统效率(吞吐量)全部处理时间作业道数吞吐量2.1.1单道程序设计的缺点处理机利用率低设备利用率低内存利用率低运行程序ACPU设备1运行程序Att1t2t5t6设备22.1.2多道程序设计的提出CPU设备1程序Att1t2t5t6设备2程序B提高处理机、设备、内存等各种资源的利用率,从而提高系统效率。程序At3t42.1.2多道程序设计的提出(Cont.)增加同时运行程序的道数可以提高资源利用率,从而提高系统效率,但道数应与系统资源数量相当。道数过少,系统资源利用率低。道数过多,系统开销(systemoverhead)增大,程序响应速度下降。2.1.3多道程序设计的问题处理机资源的管理–程序个数处理机个数(如何分配?)存储资源的管理–地址空间的相对独立性、共享性–内存、外存(swapspace)的分配与去配设备资源管理–分配策略–IO控制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进程与程序间的联系与差别多道系统中的程序:推进,暂停,推进,暂停,…….暂停:保存现场(断点,寄存器)推进:恢复现场暂停原因:(1)自身原因:等待资源,启动IO(2)剥夺CPU—给其它程序运行机会2.2进程的引入(Cont.)2.2.1进程的概念定义:–可参与并发执行的程序称为进程。–进程是具有一定独立功能的程序关于一个数据集合的一次运行活动。定义强调两个方面:–动态:执行中的程序;–并发:可与其他进程同时执行。并发vs.并行并发:concurrent–宏观同时,“交替执行”,不要求多个CPU并行:parallel–微观同时,要求多个CPU–“并行算法”2.2.2进程状态及状态转换2.2.2.1进程状态(基本状态)–运行态(RUN):占有CPU正在向前推进–就绪态(READY):可以运行,但未得到CPU–等待态(WAIT):等待某一事件发生2.2.2.2状态转换–就绪运行:获得处理机–运行就绪:剥夺处理机–运行等待:申请资源未得到,启动IO–等待就绪:得到资源,IO中断就绪等待运行获得处理机剥夺处理机等待事件事件发生2.2.2.2进程状态转换图2.2.2.2进程状态转换图就绪等待运行获得处理机剥夺处理机等待事件事件发生初创终止创建结束2.2.3进程控制块(PCB)标志进程存在的数据结构,其中保存系统管理进程所需的全部信息PCB内容:(不同系统不尽相同)–进程标识(pid)家族联系–进程状态地址信息–现场信息打开文件–调度参数消息指针–所属用户(uid)队列指针ProcessControlBlock2.2.4进程的组成与上下文进程的组成–进程控制块(processcontrolblock)建立进程建立PCB撤销PCB撤销进程–程序代码(code)数据(data)堆栈(stack+heap)2.2.4进程的组成与上下文进程的表记PCB程序PCB代码数据+堆栈表记1表记2系统空间用户空间2.2.4进程的组成与上下文进程上下文(processcontext)–进程的物理实体与支持进程运行的物理环境统称为进程上下文PCB+程序系统环境:地址空间,系统栈,打开文件表,…上下文切换(contextswitch)–由一个进程的上下文转到另外一个进程的上下文系统开销(systemoverhead)–运行操作系统程序完成系统管理工作所花费的时间和空间2.2.5进程的队列PCBPCBPCB……head1.就绪队列:系统一个或若干个(根据调度算法确定)2.等待队列:每个等待事件一个3.运行指示字:每个处理机一个PCB构成的队列:(不一定FIFO)2.2.6进程的类型与特征进程类型–系统进程运行操作系统程序,完成系统管理(服务)功能.例如:UNIX#0--sched,#1--init–用户进程运行用户(应用)程序,为用户服务。例如:UNIXvi,shell2.2.6进程的类型与特征(Cont.)进程的特征–并发性:可以与其它进程一道向前推进;–动态性:动态产生、消亡,生存期内状态动态变化;–独立性:一个进程是可以调度的基本单位;–交往性:同时运行的进程可能发生相互作用;–异步性:进程以各自独立,不可预知的速度向前推进;–结构性:每个进程有一个PCB。2.2.7进程间相互联系与相互作用相互联系–相关进程同一家族的进程可以共享文件,需要相互通讯,协调推进速度…父进程可以监视子进程,子进程完成父进程交给的任务。–无关进程没有逻辑关系、同时执行的进程。有资源竞争关系,互斥、死锁、饿死。2.2.7进程间相互联系与相互作用相互作用1.直接相互作用:发生在相关进程之间2.间接相互作用:发生在任何进程之间RP2P1syncsendreceiveP1:P2:holdwait2.2.8进程的创建与撤销进程的创建–建立PCB,分配内存,加载程序,入就绪链–UNIX:pid=fork(),exec(prog,args)进程的撤销–去配资源,撤销PCB,通知父进程–UNIX:exit()vs.kill除初始进程外,其它进程由(父)进程创建,并形成进程家族。2.2.9进程与程序的联系与差别进程与程序的联系–进程包括一个程序–进程存在的目的就是执行这个程序进程与程序的差别–程序静态,进程动态–程序可长期保存,进程有生存期–一个程序可对应多个进程,一个进程只能执行一个程序2.3线程与轻进程2.3.1线程的引入2.3.2线程的概念2.3.3线程的结构2.3.4线程的实现2.3.5线程的应用2.3.6Java线程ThreadLight-weightedprocess2.3.1线程的引入进程切换–上下文涉及内容多,开销大,“笨重”–相关进程之间耦合关系差解决方案–Multi-threading–同一进程中包含多个线程–上下文只涉及寄存器和用户栈,切换速度快–相关线程之间通讯方便、快捷2.3.2线程的概念进程中一个相对独立的执行流。进程vs.线程–进程是资源分配单位–线程是执行单位多线程优点–切换速度快(地址空间不变)(lightweighted)–系统开销小–通讯容易(共享数据空间)线程控制块TCB(Threadcontrolblock)–标志线程存在的数据结构,其中包含对线程管理需要的全部信息.内容–线程标识–线程状态–调度参数–现场(通用寄存器,PC,SP)存放位置–用户级线程:目态空间(运行系统)–核心级线程:系统空间2.3.3线程结构寄存器静态数据程序代码栈寄存器进程2动态堆内存多进程结构(用户视图)静态数据程序代码栈进程1动态堆内存寄存器2.3.3线程结构静态数据程序代码栈栈寄存器寄存器线程1:线程2:进程动态堆内存多线程结构(用户视图)2.3.3线程结构(另一种表示)textsegmentdatasegmentProgramcounterTask:2.3.4线程的实现2.3.1用户级别线程–User-levelthread2.3.2核心级别线程–Kernel-levelthread2.3.3混合线程–Hybridapproach2.3.4.1用户级别线程实现方法:–基于library函数,系统不可见–线程创建、撤销、状态转换在目态完成–TCB在用户空间,每个进程一个系统栈优点:–不依赖于操作系统,调度灵活–切换速度快缺点:–同一进程中多个线程不能真正并行–一个线程进入系统受阻,进程中其它线程不能执行2.3.4.1用户级别线程运行系统TCB进程线程核心栈进程表用户空间系统空间2.3.4.2核心级别线程实现方法:–基于系统调用–创建、撤销、状态转换由操作系统完成优点:–同一进程内多线程可以并行执行–一线程进入核心等待,其它线程仍可执行缺点:–系统开销大,同一进程内多线程切换速度慢–调度算法不能灵活控制2.3.4.2核心级别线程进程线程核心栈进程表用户空间系统空间TCB2.3.4.3混合线程Solaris例子Userlevelthread:–由Lib程序支持(创建.调度)Lightweightedprocess(LWP):–由Lib程序支持–每个task至少一个LWP–用戶级别线程与LWP可以多对多–只有与LWP相联系的用户线程向前推进Kernellevelthread:–由kernel支持–每个核心线程与唯一一个LWP对应–核心线程可与CPU多对多,可对一2.3.4.3混合线程(Solaris)CPUtask1task2task3kernelUserlevelthreadLightweightprocessKernelthread2.3.5线程的应用内在的多控制流–生产-消费问题多线程优于多进程–快100倍!提高处理机与设备的并行性多处理机环境–提高处理机利用率,加快进程推进速度2.3.5线程的应用例子:–Word字处理(不同代码)交互编辑(T1)词法检查(T2)定时保存(T3)–HTTPserver(相同代码)对每个http请求,popup一个线程2.4作业(Job)作业概念–用户要求计算机系统为其完成的计算任务集合。作业步(jobstep)–作业处理过程中一个相对独立的步骤–一般一个作业步可由一个进程完成–某些作业步之间可以并行作业分类–批处理作业–交互式作业2.4.1批处理作业作业控制语言(JCL)–描述批处理作业控制意图的语言作业说明书(JCL语句的序列)–一般一特殊符号起始$JOBJ1$FORTN…$LINK…$ENDJOB作业控制程序–解释并处理作业说明书的程序作业控制进程–执行作业控制程序的进程作业控制进程读入作业内容释放输入井空间顺取作业控制语句是结束语句执行该作业步(可能创建子进程)申请输出井空间输出作业结果进程自我终止FT2.4.2交互式作业帐户管理–/etc/passwd文件–(用户名,口令,用户根目录,同组用户,余额…)创建与撤销–创建:用户提供(用户名,口令,资金)系统操作员建立(根目录/usr/zhang,填写passwd文件)–撤销:删除该用户目录及所有文件在passwd文件中清除对应entry2.4.2交互式作业注册与注销–注册:logon:用户名password:********–注销:显示注销:–logout隐式注销:–(如5分钟无输入命令)命令解释程序提示符$读入终端命令分析Logout内部命令处理建立子进程后台命令等子进程结束输出子进程号记帐TFTFFT小结:作业、进程、线程作业与进程–作业进入内存后变为进程–一个作业通常与多个进程相对应进程与线程–不支持多线程的系统,可视为单线程进程–一个进程一般包含多个线程,至少包含一个线程2.5.1Java线程Java线程四种基本状态–New:新建的线程–Runnable:可运行状态–Blocked:封锁状态–Dead:终止状态.Java线程Java线程状态之间的转换关系图Sleep()Suspend()IORunnableSuspendDeadNewStart()Stop()Resume()JAVA线程与JVMJava线程是由Java虚拟机JVM支持的JVM位于操作系统之上Java线程与操作系统线程之间的对应关系由JVM确定–对于WindowsNT的JVM,Java线程与操作系统线