chap5 UNIX进程调度和进程存储 unix.ppt_第1页
chap5 UNIX进程调度和进程存储 unix.ppt_第2页
chap5 UNIX进程调度和进程存储 unix.ppt_第3页
chap5 UNIX进程调度和进程存储 unix.ppt_第4页
chap5 UNIX进程调度和进程存储 unix.ppt_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五讲 UNIX进程调用 和进程存储,概述,UNIX系统是分时多任务、多道程序环境系统。它采用时间片轮转转方式为系统中的多个用户的多道程序提供服务。为了跟踪计算机并行活动的状态及并发程序对资源的共享使用,提出了进程的概念。,提纲,1 进程基本概念 2 UNIX系统中的进程 3 UNIX系统进程调度和管理 4 进程存储管理与存储技术 5 UNIX进程的存储管理 6 UNIX进程控制,1 进程的基本概念,1进程与程序,(a)程序:程序代码,静态 进程:可以看作某种特定任务的程序在一个数据集合上的一次具体的活动,动态。,(b)进程与程序相比具有动态性、独立性、并发性等特点。,1 进程的基本概念,2进程的描述,进程的结构进程描述信息 进程实体,PCB:包括进程的描述信息、控制信息及进程使用资源信息、处理器现场保护结构等,其中内容是进程动态特征的集中反映。OS通过PCB感知一个进程的存在。 程序段:进程需要完成功能的程序代码。 数据结构集:进程的程序执行时要完成功能的程序代码。,1 进程的基本概念,3进程的状态 程序 静态 进程 动态,具有生命周期,两状态进程模式:,两状态进程模式中包含的进程状态转换过程: 进程开始;调度运行;暂停运行;进程结束,1 进程的基本概念,五状态进程模式:,五状态进程模式中包含的进程状态转换过程: 创建新进程;进程提交;调度运行;释放;超时;事件等待;事件发生,1 进程的基本概念,4进程控制 主要实现进程状态的转换和并发进程的管理 1)原语 不可分解,不间断,不可并发执行的程序段 2)临界区 指共享某个资源时,不允许多个并发的程序交叉执行的一段代码。并发产生的原因:随机发生, 程序需要互不干涉。 3)进程互斥 4)信号量 描述共享资源使用情况的数据结构 5)进程同步 有两种方式:互斥: 我在,你不能在 间接制约关系 同步: 你不来,我不能走 直接制约关系,2 UNIX中的进程,1 UNIX创建进程的过程,2 UNIX中的进程,2UNIX中进程的描述 运行中的每个进程都有一个独立的运行环境,这个环境是进程生存的基础,即进程上下文 。,3 UNIX进程调度和管理,1进程调度的方法 动态优先级多级反馈循环调度法公式:,2计算公式 P-priP-cpuPUSER(25)P-niceNZERO(20) 优点: 1)创建新进程,cpu0, P-pri值较小,优先级较大 2)使用越多,P-cpu越大,P-pri值较大,优先级较小 3)使用越少,P-cpu越小,P-pri值较小,优先级较大,4 进程存储管理,存储管理的主要功能: (1)存储空间的分配,回收; (2)地址变换; (3)存储共享和保护; (4)存储器扩充 (5)提高主存的利用率,计算机的存储结构图:,4.1 进程存储技术,程序以进程的方式存放于内存中,CPU在内存中实现进程之间的切换调度。采用一些策略和算法来分配存储空间,使进程在内存和磁盘之间来回切换。此过程为进程的存储管理过程。,1连续分配存储技术 操作系统为运行的进程分配一个连续的内存空间 (a) 单一连续分配存储方式:,4.1 进程存储技术,1连续分配存储技术 操作系统为运行的进程分配一个连续的内存空间 (b)分区式连续存储方式:,4.1 进程存储技术,(1)覆盖 目的: 在较小的可用内存中运行较大的程序 原理: 一个程序的几个代码段或数据段按照使用的先后顺序以覆盖方式占用共享内存区域。 原则: 将程序中必要的数据放在常驻内存中。 将不经常用的放在交换区。将不存在调用关系的模块可以采用覆盖方式共享内存分区。,(2)交换:在多个程序并发执行的时候,将暂时不执行的代码放入交换区,从而可以用更大的内存空间装入新的进程。,2覆盖和交换技术,4.1 进程存储技术,3页式存储管理 解决内存碎片,提高内存的利用率 1)基本思想:进程逻辑空间划分为若干页,内存划分为若干物理页。进程按照页的大小分配内存空间,可以连续或不连续分配。,静态页式管理:进程在执行前将程序段和数据段一次性装入内存的各个页面中。 数据结构: 进程页表:每个进程都有进程页表,逻辑页号对应物理页面号,4.1 进程存储技术,请求表:系统有一个请求表,可以放到PCB描述中,存储页面表: 系统有一张,用于描述内存各个页面的分配情况,动态页式管理:只需要将执行部分调入(缺页中断则调入),动态管理程序各部分在内存中的调入调出。,4.1 进程存储技术,2)页式管理的地址变换,4.1 进程存储技术,4段式存储管理 1)将内存分为不同的分区,视为二维空间,进程按照逻辑内容分段。 2)特点:以段为单位分配内存分区,段可以不连续。每个段可以占用一个内存分区。内存管理采用动态分区方法,采用缺段中断处理。 3)数据结构:进程段表,4.2 虚拟存储技术,1局部性原理 程序执行过程中,在较短的时期内,所执行的指令地址以及操作数地址分别局限在一个区域内。 时间局限性: 当前指令执行与下条指令执行,数据的当前访问和下次访问集中在一个时间段中。 空间局部性: 当前访问指令和临近访问的指令,当前访问的数据和临近访问的数据集中在一个较小区域内。 原因:大部分程序在空间上顺序执行,在时间上循环执行,4.2 虚拟存储技术,2虚存的原理 只需将当前需要执行的部分页和部分段读入到内存中就可让程序开始执行。利用缺页和缺段请求,动态实现存储管理。,3特点: 存储空间变大 内存外存, 支持程序的并发执行,采用部分交换。,4虚拟存储器的种类 1)页式虚存 2)段式虚存 3)段页式虚存,5 UNIX进程存储管理,1交换策略 早期 内存和交换区之间传送整个进程 费时,影响效率 现代 部分交换 关键信息,PCB不参与交换,常驻内存。 0号进程负责调度和交换工作,无限循环的执行。 数据结构 映射图来管理交换设备的空间资源,包含可分配的资源地址及该地址可用的资源单位。,UNIX系统采用交换和请求调页两种策略完成存储管理,5 UNIX进程存储管理,2请求调页策略 内存分页 外存分页 进程运行时系统只在内存中保留当前活动进程的某些页面,而不放入整个进程页面 缺页中断 虚存技术不受空间限制 为了提高运行效率,核心进程提供了一个工作区,存放内存中最近被访问过的页面集合。,3UNIX系统中进程存储管理结构 Proc User PCB 放内存中 放外存中,8 UNIX进程管理的系统调用,例题: #include main() int pid; pid = fork(); if ( pid 0 ) printf(“forkfailed!”); exit(1); if( pid = = 0) exec(“ls”, “-l”,0); else printf(“This is the parent process”); ,8 UNIX进程管理的系统调用,parent,child,child,child,parent,fork,exec,exit,自动,wait,6 UNIX进程控制,6.1进程创建,include int getpid(void); int getppid(void);,getpid函数返回调用进程的进程ID getppid函数则返回调用进程的父进程ID。,include int fork(void);,fork函数创建一新进程。,6 UNIX进程控制,#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调用失败 err_exit (“fork”);,6 UNIX进程控制,UNIX系统在实现fork()调用完成的主要工作: 1)为子进程在进程表中分配一个空闲的proc结构 2)赋给子进程一个唯一的进程标识符pid 3)复制一个父进程上下文的逻辑副本 4)增加与父进程相关联的文件表和索引节点表的引用次数 5)对父进程返回子进程的标识符为pid.对子进程返回标识符pid.,6 UNIX进程控制,if( pid = 0) /*子进程*/ printf (“Its Child process, pid is %dn”, getpid (); else /*父进程*/ printf( “Its Father process pid is %dn”, getpid(); exit( EXIT_SUCCESS ); ,6 UNIX进程控制,6.2执行一个新程序,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个函数具有相同的功能,它们都能用新程序的程序映像覆盖进程原来的程序映像。新程序文件名由参数path或file给出,它的程序代码将替代原来的程序代码被执行。,6 UNIX进程控制,Main() . Printf(“onen”): Execl(/bin/ls”,”ls”,0); Printf(“twon”); Perror(“exec error); . ,6 UNIX进程控制,6 UNIX进程控制,#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( execlp(“/demo.exe”, “myarg1”, “MYARG2”,(char*)0)0) err_exit(“execle error”); exit(EXIT_SUCCESS); ,6 UNIX进程控制,char *arg=“file1”,“file2”,0; Char *env=“PATH=/home/usr”,”TERM=console”,0 int 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); ,6 UNIX进程控制,6.3等待进程完成,include int wait(int *stat_loc); int waitpid(pid_t pid,int *stat_loc,int options);,通常,父进程用fork派生了一个子进程后,常常会需要等待子进程执行完后才能继续执行。 UNIX提供了两个函数来等待子进程的结束,wait和waitpid函数允许等待子进程结束,并获取其子进程的状态信息。 wait(stat_loc)相当于waitpid(-1, stat_loc,0),6 UNIX进程控制,例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( ,6 UNIX进程控制,main() int pid;printf(“just I process nown”); printf(“calling fork()n”); pid=fork(); if (pid=0) printf(“I am the childn”); exit(1); else wait(0);printf(“I am thr parentn”); else printf( “fork failed.n”); Printf(“program endn”);,6 UNIX进程控制,6.4 进程终止与僵死进程,1、正常终止 (a)从main函数内执行return。这相当于调用exit。 (b)调用exit函数。 (c)调用_exit函数,该函数由exit调用并处理与UNIX相关的特定细节。,6 UNIX进程控制,6.4 进程终止与僵死进程,2、异常终止 (a)调用abort函数。 (c)当进程收到某种信号时。,6 UNIX进程控制,6.4 进程终止与僵死进程,3.僵死进程 僵死进程一般指的是已经终止但并没有由父进程等待的进程,6 UNIX进程控制,例 1 int 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); ,该子进程将成为僵死进程,6 UNIX进程控制,例 2 int main(void) pid_t pid; int n; printf(“fork program startingn”); pid = fork(); switch(pid) case 0: exit(0); default: sleep(60000); /在父进程sleep期间,子进程为僵死状态 wait( ,6 UNIX进程控制,# ps al S UID PID PPID TIME COMD R 181 2081 1872 0:00 ps S 181 2074 1872 0:00 test Z 181 2080 2074 0:00 S 181 2041 1860 0:00 ftp,状态Z表示该进程为僵死进程,该进程的父进程PPID为207

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论