第3章进程管理2020/2/92内容纲要•进程的概念•并发的概念•进程的结构•进程的状态变迁图•进程控制2020/2/93进程vs.程序•程序:代码+数据–是静态的•进程是程序关于某数据集上的一次运行活动–是动态的–是资源分配和调度的单位2020/2/94程序组成•HelloWorld实例•C-汇编程序.filehello.c.section.rodata.LC0:.stringHelloWorld.text.globlmain.typemain,@functionmain:leal4(%esp),%ecxandl$-16,%esppushl-4(%ecx)pushl%ebpmovl%esp,%ebppushl%ecxsubl$4,%espmovl$.LC0,(%esp)callprintfmovl$0,%eaxaddl$4,%esppopl%ecxpopl%ebpleal-4(%ecx),%espret.sizemain,.-main.identGCC:(GNU)4.1.2(Ubuntu4.1.2-0ubuntu4).section.note.GNU-stack,,@progbits2020/2/95程序组成•HelloWorld实例•C-汇编程序.filehello.c.section.rodata.LC0:.stringHelloWorld.text.globlmain.typemain,@functionmain:leal4(%esp),%ecxandl$-16,%esppushl-4(%ecx)pushl%ebpmovl%esp,%ebppushl%ecxsubl$4,%espmovl$.LC0,(%esp)callprintfmovl$0,%eaxaddl$4,%esppopl%ecxpopl%ebpleal-4(%ecx),%espret.sizemain,.-main.identGCC:(GNU)4.1.2(Ubuntu4.1.2-0ubuntu4).section.note.GNU-stack,,@progbits2020/2/96程序组成•HelloWorld实例•C-汇编程序.filehello.c.section.rodata.LC0:.stringHelloWorld.text.globlmain.typemain,@functionmain:leal4(%esp),%ecxandl$-16,%esppushl-4(%ecx)pushl%ebpmovl%esp,%ebppushl%ecxsubl$4,%espmovl$.LC0,(%esp)callprintfmovl$0,%eaxaddl$4,%esppopl%ecxpopl%ebpleal-4(%ecx),%espret.sizemain,.-main.identGCC:(GNU)4.1.2(Ubuntu4.1.2-0ubuntu4).section.note.GNU-stack,,@progbits2020/2/97进程=程序的执行•程序的执行过程–(可选)接受外部输入的参数–逐步依次执行程序中的每条指令–返回结果2020/2/98内容纲要•进程的概念•并发的概念•进程的结构•进程的状态变迁图•进程控制2020/2/99以前的顺序执行环境•顺序环境:只执行一个程序(Uniprogramming)•这种情况下,OS只要每次为程序指定程序代码和数据如何装载到内存,并指导CPU如何逐步执行每一条指令,整个系统的资源由唯一的一个进程所独占仅支持单道程序的系统中,不需要有进程的概念,因为程序执行期间不存在对资源的竞争2020/2/910并发概念的引出•多任务OS•一段时间同时运行多个程序(Multiprogramming)–多个进程就必须竞争使用系统中的资源,特别是CPU资源2020/2/911并发执行vs.顺序执行2020/2/912并发执行vs.顺序执行在多任务系统中,并发可以减少CPU的闲置时间,增加CPU的利用率2020/2/913并发的优点•充分利用系统资源–CPU和外设可以并行起来–CPU利用率和外设的利用率都得到提高•用户应答时间短–并发(二者=45秒)vs.顺序(后执行的任务=80秒)•系统吞吐量大–并发(两任务/45秒)vs.顺序(两任务/80秒)2020/2/914并发引出的问题•如何在多个进程之间合理的分配共享的系统资源–CPU资源=进程调度算法–内存资源=内存管理–I/O资源=设备管理•操作系统如何协调所有的活动–从一个任务的开始,到它运行结束,期间它不再独占CPU资源,当任务执行期间执行期间被切换的话,那么它的这一中间状态如何保存?=进程控制结构2020/2/915内容纲要•进程的概念•并发的概念•进程的结构•进程的状态变迁图•进程控制2020/2/916进程活动•在自己的地址空间中执行程序中的指令序列•程序的执行过程:逐条指令进行•每条指令的执行都会影响机器的状态(用寄存器保存)2020/2/917CPU的工作过程•取指/解码/执行(Fetch/Decode/Execute)–从存储器(地址在程序计数器PC中)中读取一条指令–放入指令寄存器(IR)中,然后执行这条指令–一个单条指令处理过程称为一个指令周期–程序的执行由不断地取指和执行的指令周期组成–当程序的全部指令执行完毕时,程序停止2020/2/918程序的指令序列subl$4,%esp•movl$.LC0,(%esp)•callprintf•movl$0,%eax•addl$4,%esp•popl%ecx•popl%ebp•leal-4(%ecx),%esp•ret%esp,%ecx,%ebp,%eax都是CPU寄存器,在执行过程中可能会不断变化2020/2/919进程上下文•当系统要从进程A切换到进程B时,需要保存那些信息呢?2020/2/920CPU现场结构•进程A当前的CPU状态–通用寄存器(%eax,%ecx,…)–程序计数器PC(存放在寄存器IR中)–状态PSW–栈指针(%ebp,%esp)–…2020/2/921内存资源•内存的地址空间•内存的地址映射2020/2/922地址空间•一个地址空间+与之相联系的状态–32位处理器:4G的空间–访问这些地址会出现如下状态•读写内存•写忽略•引起I/O•引起异常•…2020/2/923地址映射通过映射Map1和Map2造成“分离地址空间“的假象Map1和Map2是要保存的内存上下文2020/2/924完整的上下文(PCB)•描述信息:进程ID号,用户标识号,进程的家族关系•控制信息–进程当前状态,进程优先级,程序开始地址–各种计时信息,通信信息•资源管理信息–存储资源的使用信息–I/O设备的使用信息–文件系统信息•CPU现场保护结构–关注CPU执行状态的内容2020/2/925进程复用CPU2020/2/926内容纲要•进程的概念•并发的概念•进程的结构•进程的状态变迁图•进程控制2020/2/927进程状态•进程在执行的过程中会有多种状态•会有怎样的几种呢?可以想一想多个进程同时在执行的时候,却只有一个CPU,怎么处理的呢?2020/2/928进程状态转换•先考察两个状态2020/2/929进程状态转换•(1)就绪=运行–就绪的进程可以使用CPU了,于是转到运行状态•(2)运行=就绪–当前运行的进程由于某种原因需要让出CPU2020/2/930进程状态转换•引入阻塞态–进程由于某种原因(如,等待设备I/O操作)暂时不能继续往下执行2020/2/931进程状态转换•(1)运行=阻塞:当进程等待某事件•(2)阻塞=就绪:等待的事件已经发生2020/2/932进程状态转换•引入新建态和退出态•(1)新建=就绪•(2)运行=退出2020/2/933内容纲要•进程的概念•并发的概念•进程的结构•进程的状态变迁图•进程控制2020/2/934进程创建•什么时候需要创建新进程?–用户向用户提交了一个新任务–当前进程需要创建一个新的进程来完成某个相对独立的子任务2020/2/935进程创建•创建过程:–创建一个PCB–建立新的地址映射–从父进程拷贝数据和代码(如,UNIX中的fork)–拷贝其他的信息(IO设备使用信息,文件描述符信息等)2020/2/936进程撤销•导致进程被撤销的情况–正常终止–错误导致进程非正常终止–祖先进程要求杀死某子进程•进程撤销要做的事情包括–释放进程所占用的资源–释放PCB2020/2/937进程阻塞与唤醒•进程阻塞–原因:进程需要等待某一事件发生后才能继续执行–方式:进程自己调用阻塞源于来是自己进入阻塞状态–阻塞进程被放入等待队列2020/2/938进程阻塞与唤醒•唤醒进程–原因:进程所等待的事件已经发生–方式:调用唤醒原语–谁来唤醒:(1)由系统进程唤醒(2)由事件发生的进程唤醒2020/2/939Windows的进程控制接口•进程创建:CreateProcess(…)•进程撤销:ExitProcess(…)•阻塞原语:WaitForSingleObject(…)•挂起原语:SuspendThread(…)•激活(唤醒)原语:ResumeThread(…)2020/2/940上机实践•实验2•实验17