资源预览内容
第1页 / 共45页
第2页 / 共45页
第3页 / 共45页
第4页 / 共45页
第5页 / 共45页
第6页 / 共45页
第7页 / 共45页
第8页 / 共45页
第9页 / 共45页
第10页 / 共45页
亲,该文档总共45页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
提纲提纲(tgng)(tgng)1 1 进程基本概念2 UNIX2 UNIX系统中的进程3 UNIX3 UNIX系统进程调度(diod)(diod)和管理4 4 进程存储管理与存储技术5 UNIX5 UNIX进程的存储管理6 UNIX6 UNIX进程控制第1页/共44页第一页,共45页。1 1 进程进程(jnchng)(jnchng)的基本概念的基本概念1进程(jnchng)与程序(a)程序:程序代码,静态进程:可以看作某种特定任务的程序在一个数据集合上的一次具体(jt)的活动,动态。(b)进程与程序相比具有动态性、独立性、并发性等特点。第2页/共44页第二页,共45页。1 1 进程进程(jnchng)(jnchng)的基本概念的基本概念2进程(jnchng)的描述进程(jnchng)的结构进程(jnchng)描述信息进程(jnchng)实体PCB程序段数据结构集PCB:包括进程的描述信息、控制信息及进程使用资源信息、处理器现场保护结构等,其中内容是进程动态特征的集中反映。OS通过PCB感知一个进程的存在。程序段:进程需要完成功能的程序代码。数据结构集:进程的程序执行时要完成功能的程序代码。第3页/共44页第三页,共45页。1 1 进程进程(jnchng)(jnchng)的基本概念的基本概念3进程的状态程序(chngx)静态进程动态,具有生命周期两状态进程模式:两状态进程(jnchng)模式中包含的进程(jnchng)状态转换过程:进程(jnchng)开始;调度运行;暂停运行;进程(jnchng)结束第4页/共44页第四页,共45页。1 1 进程进程(jnchng)(jnchng)的基本概念的基本概念五状态进程(jnchng)模式:创建阻塞就绪运行退出事件等待超时调度事件发生提交新建释放五状态进程模式中包含的进程状态转换过程:创建新进程;进程提交;调度(diod)运行;释放;超时;事件等待;事件发生第5页/共44页第五页,共45页。1 1 进程进程(jnchng)(jnchng)的基本概念的基本概念4进程控制主要实现进程状态的转换和并发进程的管理1)原语不可分解,不间断,不可并发执行的程序段2)临界区指共享某个资源时,不允许多个并发的程序交叉执行的一段代码。并发产生的原因:随机发生,程序需要互不干涉。3)进程互斥4)信号量描述共享资源使用情况的数据结构5)进程同步有两种方式:互斥:我在,你不能在间接(jinji)制约关系同步:你不来,我不能走直接制约关系第6页/共44页第六页,共45页。2 UNIX2 UNIX中的进程中的进程(jnchng)(jnchng)1UNIX创建(chungjin)进程的过程第7页/共44页第七页,共45页。2 UNIX2 UNIX中的进程中的进程(jnchng)(jnchng)2UNIX中进程的描述运行中的每个进程都有一个(y)独立的运行环境,这个环境是进程生存的基础,即进程上下文。第8页/共44页第八页,共45页。3 UNIX3 UNIX进程调度进程调度(diod)(diod)和管理和管理 1进程调度的方法(fngf)动态优先级多级反馈循环调度法公式:2计算公式P-priP-cpuPUSER(25)P-niceNZERO(20)优点:1)创建新进程,cpu0,P-pri值较小,优先级较大(jiod)2)使用越多,P-cpu越大,P-pri值较大(jiod),优先级较小3)使用越少,P-cpu越小,P-pri值较小,优先级较大(jiod)第9页/共44页第九页,共45页。4 4 进程进程(jnchng)(jnchng)存储管理存储管理 存储管理的主要功能:(1)存储空间的分配(fnpi),回收;(2)地址变换;(3)存储共享和保护;(4)存储器扩充(5)提高主存的利用率计算机的存储结构图:第10页/共44页第十页,共45页。4.1 4.1 进程进程(jnchng)(jnchng)存储技术存储技术 程序以进程的方式存放于内存中,CPUCPU在内存中实现进程之间的切换调度。采用一些策略和算法来分配存储空间,使进程在内存和磁盘之间来回(lihu)(lihu)切换。此过程为进程的存储管理过程。 1连续分配存储技术操作系统为运行的进程分配一个(y)连续的内存空间(a)单一连续分配存储方式:第11页/共44页第十一页,共45页。4.1 4.1 进程进程(jnchng)(jnchng)存储技术存储技术 1连续分配存储技术操作系统为运行(ynxng)的进程分配一个连续的内存空间(b)分区式连续存储方式:第12页/共44页第十二页,共45页。4.1 4.1 进程进程(jnchng)(jnchng)存储技术存储技术 (1)覆盖目的:在较小的可用内存中运行较大的程序原理(yunl):一个程序的几个代码段或数据段按照使用的先后顺序以覆盖方式占用共享内存区域。原则:将程序中必要的数据放在常驻内存中。将不经常用的放在交换区。将不存在调用关系的模块可以采用覆盖方式共享内存分区。(2 2)交换:在多个(du (du )程序并发执行的时候,将暂时不执行的代码放入交换区,从而可以用更大的内存空间装入新的进程。 2覆盖和交换技术第13页/共44页第十三页,共45页。4.1 4.1 进程进程(jnchng)(jnchng)存储技术存储技术 3页式存储管理解决内存碎片,提高内存的利用率1)基本思想(sxing):进程逻辑空间划分为若干页,内存划分为若干物理页。进程按照页的大小分配内存空间,可以连续或不连续分配。页号页面号05176212静态页式管理:进程在执行前将程序段和数据段一次性装入内存的各个(gg)(gg)页面中。数据结构: 进程页表:每个进程都有进程页表,逻辑页号对应物理页面号 第14页/共44页第十四页,共45页。4.1 4.1 进程进程(jnchng)(jnchng)存储技术存储技术 请求表:系统有一个请求表,可以(ky)(ky)放到PCBPCB描述中 进程号请求数页表地址页表长度状态120102220已分配用于地址转换存储页面表:系统有一张,用于描述(miosh)内存各个页面的分配情况动态页式管理:只需要将执行部分调入(缺页中断则调入),动态管理程序各部分在内存中的调入调出。第15页/共44页第十五页,共45页。4.1 4.1 进程进程(jnchng)(jnchng)存储技术存储技术 2)页式管理(gunl)的地址变换第16页/共44页第十六页,共45页。4.1 4.1 进程进程(jnchng)(jnchng)存储技术存储技术 4段式存储管理1)将内存分为不同的分区,视为二维空间,进程按照逻辑内容分段。2)特点:以段为单位分配内存分区,段可以不连续。每个段可以占用一个内存分区。内存管理采用动态(dngti)分区方法,采用缺段中断处理。3)数据结构:进程段表第17页/共44页第十七页,共45页。4.2 4.2 虚拟存储技术虚拟存储技术(jsh) (jsh) 1局部性原理程序执行过程中,在较短的时期内,所执行的指令地址以及(yj)操作数地址分别局限在一个区域内。时间局限性:当前指令执行与下条指令执行,数据的当前访问和下次访问集中在一个时间段中。空间局部性:当前访问指令和临近访问的指令,当前访问的数据和临近访问的数据集中在一个较小区域内。原因:大部分程序在空间上顺序执行,在时间上循环执行第18页/共44页第十八页,共45页。4.2 4.2 虚拟存储技术虚拟存储技术(jsh) (jsh) 2虚存的原理只需将当前需要执行的部分页和部分段读入到内存中就可让程序开始执行。利用(lyng)缺页和缺段请求,动态实现存储管理。3特点:存储空间变大内存外存,支持程序的并发(bngf)执行,采用部分交换。4虚拟存储器的种类1)页式虚存2)段式虚存3)段页式虚存第19页/共44页第十九页,共45页。5 UNIX5 UNIX进程进程(jnchng)(jnchng)存储管理存储管理 1交换策略(cl)早期内存和交换区之间传送整个进程费时,影响效率现代部分交换关键信息,PCB不参与交换,常驻内存。0号进程负责调度和交换工作,无限循环的执行。数据结构映射图来管理交换设备的空间资源,包含可分配的资源地址及该地址可用的资源单位。UNIX系统采用(ciyng)交换和请求调页两种策略完成存储管理第20页/共44页第二十页,共45页。5 UNIX5 UNIX进程进程(jnchng)(jnchng)存储管理存储管理 2请求调页策略内存分页外存分页进程运行时系统只在内存中保留当前活动进程的某些(muxi)页面,而不放入整个进程页面缺页中断虚存技术不受空间限制为了提高运行效率,核心进程提供了一个工作区,存放内存中最近被访问过的页面集合。3UNIX系统中进程存储管理结构(jigu)ProcUserPCB放内存中放外存中第21页/共44页第二十一页,共45页。8 UNIX8 UNIX进程管理的系统进程管理的系统(xtng)(xtng)调用调用 例题(lt)(lt):#include #include main()main() int pid; int pid; pid = fork(); pid = fork(); if ( pid 0 ) if ( pid 0 ) printf(“forkfailed!”);printf(“forkfailed!”); exit(1); exit(1); if( pid = = 0) if( pid = = 0) exec(“ls”, “-l”,0); exec(“ls”, “-l”,0); else else printf(“This is the parent process”); printf(“This is the parent process”); 第22页/共44页第二十二页,共45页。8 UNIX8 UNIX进程管理的系统进程管理的系统(xtng)(xtng)调用调用parentchildchildchildparentforkexecexit自动(zdng)wait第23页/共44页第二十三页,共45页。6 UNIX6 UNIX进程进程(jnchng)(jnchng)控制控制 6.16.1进程(jnchng)(jnchng)创建 include int getpid(void); int getppid(void);getpidgetpid函数返回调用(dioyng)(dioyng)进程的进程IDIDgetppidgetppid函数则返回调用(dioyng)(dioyng)进程的父进程IDID。include int fork(void);forkfork函数创建一新进程。第24页/共44页第二十四页,共45页。6 UNIX6 UNIX进程进程(jnchng)(jnchng)控制控制 #include #include #include “err_exit.h”int global = 5;int main(void) int pid; char *string = “these are values before fork:”; int local =10; printf( “before fork *”); if( (pid = fork( ) )0) /fork调用(dioyng)失败 err_exit (“fork”);第25页/共44页第二十五页,共45页。6 UNIX6 UNIX进程进程(jnchng)(jnchng)控制控制UNIX系统在实现fork()调用完成的主要(zhyo)工作:1)为子进程在进程表中分配一个空闲的proc结构2)赋给子进程一个唯一的进程标识符pid3)复制一个父进程上下文的逻辑副本4)增加与父进程相关联的文件表和索引节点表的引用次数5)对父进程返回子进程的标识符为pid.对子进程返回标识符pid.第26页/共44页第二十六页,共45页。6 UNIX6 UNIX进程进程(jnchng)(jnchng)控制控制 if( pid = 0) /*子进程(jnchng)*/ printf (“Its Child process, pid is %dn”, getpid ();else /*父进程(jnchng)*/ printf( “Its Father process pid is %dn”, getpid();exit( EXIT_SUCCESS );第27页/共44页第二十七页,共45页。6 UNIX6 UNIX进程进程(jnchng)(jnchng)控制控制 6.26.2执行(zhxng)(zhxng)一个新程序include external char *environ;int execl(const char *path,const char *arg0,);int execlp(const char *file,const char *arg0,);int execle(const char *path,const char *arg0,), const char *envp);int execv(const char *path,const char *argv);int execvp(const char *file,const char *argv);int execve(const char *path,const char *argv, const char *envp);这6 6个函数具有相同的功能,它们都能用新程序的程序映像覆盖进程原来(yunli)(yunli)的程序映像。新程序文件名由参数pathpath或filefile给出,它的程序代码将替代原来(yunli)(yunli)的程序代码被执行。第28页/共44页第二十八页,共45页。6 UNIX6 UNIX进程进程(jnchng)(jnchng)控制控制Main().Printf(“onen”):Execl(/bin/ls”,”ls”,0);Printf(“twon”);Perror(“execerror);.6 UNIX6 UNIX进程进程(jnchng)(jnchng)控制控制第29页/共44页第二十九页,共45页。6 UNIX6 UNIX进程进程(jnchng)(jnchng)控制控制 #include #include #include “err_exit.h”int main(void) pid_t pid; if(pid = fork( )0) err_exit(“fork error”); else if (pid = 0) if( execlpexeclp(“/demo.exe”, “myarg1”, “MYARG2”,(char*)0)0) err_exit(“execle error”); exit(EXIT_SUCCESS);第30页/共44页第三十页,共45页。6 UNIX6 UNIX进程进程(jnchng)(jnchng)控制控制 char *arg=“file1”,“file2”,0;Char *env=“PATH=/home/usr”,”TERM=console”,0int main(void) execl(“/bin/mycat”,”file1”,”file2”,(char*)argv0); execlp(“mycat”, ”file1”,”file2”,(char*)argv0); execle(“/bin/mycat”,”file1”,”file2”,(char*)argv0, env); execv(“/bin/mycat”,arg); execvp(“mycat”, arg); execvle(“/bin/mycat”,arg, env);第31页/共44页第三十一页,共45页。6 UNIX6 UNIX进程进程(jnchng)(jnchng)控制控制 6.36.3等待(dngdi)(dngdi)进程完成include int wait(int *stat_loc);int waitpid(pid_t pid,int *stat_loc,int options); 通常,父进程用forkfork派生了一个子进程后,常常会需要等待(dngdi)(dngdi)子进程执行完后才能继续执行。 UNIX UNIX提供了两个函数来等待(dngdi)(dngdi)子进程的结束wait和waitpid函数允许等待子进程结束,并获取其子进程的状态信息。wait(stat_loc)相当于waitpid(-1, stat_loc,0)第32页/共44页第三十二页,共45页。6 UNIX6 UNIX进程进程(jnchng)(jnchng)控制控制 例1:#include#include#include#include “err_exit.h”int main(void) pid_t pid; int status; if( (pid = fork() 0 ) /派生子进程 1 err_exit(“call fork() failed!”); else if ( pid = 0 ) /子进程 1 exit(1); if ( wait(&status) != pid ) /等待(dngdi)子进程1的结束 err_exit(“call wait() failed”);第33页/共44页第三十三页,共45页。6 UNIX6 UNIX进程进程(jnchng)(jnchng)控制控制main()int pid;printf(“just I process now.n”);printf(“calling fork()n”);pid=fork();if (pid=0) printf(“I am the childn”); exit(1);else wait(0);printf(“I am thr parentn”);elseprintf( “fork failed.n”);Printf(“program end.n”);第34页/共44页第三十四页,共45页。6 UNIX6 UNIX进程进程(jnchng)(jnchng)控制控制 6.4 6.4 进程(jnchng)(jnchng)终止与僵死进程(jnchng)(jnchng)1 1、正常终止(a a)从mainmain函数内执行returnreturn。这相当于调用exitexit。(b b)调用exitexit函数。(c c)调用_exit_exit函数,该函数由exitexit调用并处理与UNIXUNIX相关的特定(tdng)(tdng)细节。第35页/共44页第三十五页,共45页。6 UNIX6 UNIX进程进程(jnchng)(jnchng)控制控制 6.4 6.4 进程终止(zhngzh)(zhngzh)与僵死进程2 2、异常终止(a a)调用abortabort函数。(c c)当进程(jnchng)(jnchng)收到某种信号时。第36页/共44页第三十六页,共45页。6 UNIX6 UNIX进程进程(jnchng)(jnchng)控制控制 6.4 6.4 进程(jnchng)(jnchng)终止与僵死进程(jnchng)(jnchng)3.3.僵死进程 僵死进程一般指的是已经(y (y jing)jing)终止但并没有由父进程等待的进程第37页/共44页第三十七页,共45页。6 UNIX6 UNIX进程进程(jnchng)(jnchng)控制控制 例 1int main(void) pid_t pid; int n; printf(“fork program startingn”); pid = fork(); switch(pid) case 0: exit(0); default: sleep(5); break; exit(EXIT_SUCESS);该子进程将成为(chngwi)僵死进程第38页/共44页第三十八页,共45页。6 UNIX6 UNIX进程进程(jnchng)(jnchng)控制控制 例 2int main(void) pid_t pid; int n; printf(“fork program startingn”); pid = fork(); switch(pid) case 0: exit(0); default: sleep(60000); /在父进程sleep期间(qjin),子进程为僵死状态 wait(&n); /僵死的子进程被释放 exit(EXIT_SUCESS);第39页/共44页第三十九页,共45页。6 UNIX6 UNIX进程进程(jnchng)(jnchng)控制控制 # ps alS UID PID PPID TIME COMDR 181 2081 1872 0:00 ps S 181 2074 1872 0:00 testZ 181 2080 2074 0:00 S 181 2041 1860 0:00 ftp 状态Z表示该进程(jnchng)为僵死进程(jnchng),该进程(jnchng)的父进程(jnchng)PPID为2074,其父进程(jnchng)test仍然在运行第40页/共44页第四十页,共45页。6 UNIX6 UNIX进程进程(jnchng)(jnchng)控制控制 6.5 system6.5 system函数(hnsh)(hnsh)include int system(const char * command); 参数command为要执行的命令(mng lng)字符串,它将被直接传送给UNIX的命令(mng lng)解释程序shell,由shell来执行该命令(mng lng)。 例如 system(“ls”); system(“/home/user/test.exe”);第41页/共44页第四十一页,共45页。6 UNIX6 UNIX进程进程(jnchng)(jnchng)控制控制 #include#includeint main() printf(“running ps with systemn”); system(“ps-af”); printf(“Done.n”); exit(EXIT_SUCCESS); 第42页/共44页第四十二页,共45页。6 UNIX6 UNIX进程进程(jnchng)(jnchng)控制控制 6.6 6.6 进程组 进程组IDID类似于进程ID,ID,它是一个(y (y )整数,并且也用pid_tpid_t数据类型表示。# include pid_t getpgrp(void); 每一个进程组有一个组长,称为进程组组长,它是PIDPID与PGIDPGID相同的进程。通常,一个进程从它的父进程继承进程组IDID,并且,在此组内的所有其他进程都是该进程组长的子孙后代。 通过调用setpgidsetpgid函数,进程可以改变它的进程组IDID从而加入到一个已经存在的进程组中;或者(huzh)(huzh)改变自己的进程组IDID等于自身的PIDPID而创建一个新的进程组,从而使自己成为新进程组的组长。# include int setpgid(pid_t pid,pid_t pgid); 该函数改变参数pidpid所指定的进程组IDID为pgidpgid所给定值。如果这两个参数相同,则由pidpid所指定的进程成为一个进程组长。第43页/共44页第四十三页,共45页。感谢您的欣赏(xnshng)!第44页/共44页第四十四页,共45页。内容(nirng)总结提纲。(b)进程与程序相比具有动态性、独立性、并发性等特点。采用一些策略和算法来分配存储空间,使进程在内存和磁盘之间来回切换。此过程为进程的存储管理过程。进程按照页的大小分配内存空间,可以连续或不连续分配。请求表:系统(xtng)有一个请求表,可以放到PCB描述中。存储页面表: 系统(xtng)有一张,用于描述内存各个页面的分配情况。动态页式管理:只需要将执行部分调入(缺页中断则调入),动态管理程序各部分在内存中的调入调出。感谢您的欣赏第四十五页,共45页。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号