版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,第四章 并发处理,本资料由-校园大学生创业网-提供 在线代理,2,4.10 UNIX系统的进程管理4.10.1 UNIX系统的进程的映像(image),(一)进程映像的组成 进程控制块PCB 正文段 数据段,3,4.10 UNIX系统的进程管理4.10.1 UNIX系统的进程及映像(image),(一)进程映像的组成 1、进程控制块PCB 基本进程控制块 proc结构 存放进程最基本的控制和管理信息,不论该进程是否处于运行状态,系统都要访问的信息,必须常驻内存; 扩充进程控制块 user结构 存放进程的管理和控制信息,这些信息只有当进程处于运行状态时,系统才访问,不一定常驻内存。,4,2、
2、正文段(共享正文段) 进程的执行程序,可为多个进程共享执行。 3、数据段 用户栈 用户数据区 进程数据区(ppda),4.10 UNIX系统的进程管理4.10.1 UNIX系统的进程及映像(image),5,(二)UNIX系统进程数据结构 1、proc结构/sys/proc.h; 2、user结构 /sys/user.h; 3、 text结构/sys/text.h;,4.10 UNIX系统的进程管理4.10.1 UNIX系统的进程及映像(image),6,struct proc charp_stat; /* 进程状态 */ charp_flag; /* 进程特征 */ charp_pri; /
3、* 进程优先数 */ charp_sig; /* 软中断号 */ charp_uid; /* 用户号 */ charp_time; /* 驻留时间 */ charp_cpu; /* 有关进程调度的时间变量 */ charp_nice; /* 用于计算优先数 */,4.10 UNIX系统的进程管理4.10.1 UNIX系统的进程及映像(image),7,intp_ttyp; /* 控制终端tty结构的地址 */ intp_pid; /* 进程号 */ intp_ppid; /* 父进程号 */ intp_addr; /* 数据段地址 */ intp_size; /* 数据段大小 */ intp_
4、wchan; /* 等待的原因 */ intp_textp; /* 对应正文段text项地址 */ procNPROC;,4.10 UNIX系统的进程管理4.10.1 UNIX系统的进程及映像(image),8,p_addr: 数据段地址 p_textp:正文段text项地址 x_daddr:磁盘地址 x_caddr:主存地址 u_procp:proc结构地址,4.10 UNIX系统的进程管理4.10.1 UNIX系统的进程及映像(image),9,4.10 UNIX系统的进程管理 4.10.2 UNIX进程的状态及变迁一、UNIX进程树,10,4.10 UNIX系统的进程管理 4.10.2
5、UNIX进程的状态及变迁一、UNIX进程树,0进程: 系统初启时建立,完成系统初启相应工作后,创建1进程;然后的工作有两项:进程映像管理;进程调度。 1 进程: 为系统的每个联机终端创建一个终端进程,然后就做托管工作。 2、3、n、n+1进程: 终端进程,执行程序是shell,该进程接受和执行用户键入的shell命令,或shell命令程序。 用户创建的进程: 用户的shell命令或shell程序所创建的进程;用户在其程序中创建的进程。,11,4.10 UNIX系统的进程管理 4.10.2 UNIX进程的状态及变迁二、UNIX进程状态,(一)运行状态 进程正在处理机上运行。 特征: p_stat
6、 :SRUN p_flag 中SLOAD位为1,表示该进程映像在内存。 进程执行用户程序:用户态运行 进程执行核心程序:核心态运行,12,4.10 UNIX系统的进程管理 4.10.2 UNIX进程的状态及变迁二、UNIX进程状态,(二)就绪状态 在内存中就绪: 指进程处于就绪状态,且进程映像在内存; 就绪且换出: 指进程处于运行状态,且进程映像不在内存。 p_stat:SRUN; p_flag的SLOAD为1,表示在内存中就绪; 为0,表示就绪且换出。,13,4.10 UNIX系统的进程管理 4.10.2 UNIX进程的状态及变迁二、UNIX进程状态,(三)睡眠状态 进程等待某事件发生而暂时
7、让出处理机时所取的状态。 p_stat为SSLEEP 高优先级睡眠状态; SWAIT 低优先级睡眠状态; 在UNIX系统中,当进程进入睡眠状态时,系统根据该进程等待事件的轻重缓急程度赋予不同的优先数,该进程被唤醒后,就以系统赋予的优先数参与处理机的竞争。若系统赋予的优先数是小于0(负数),进程进入高优先级睡眠状态,否则,进程进入低优先级睡眠状态。,14,4.10 UNIX系统的进程管理 4.10.2 UNIX进程的状态及变迁二、UNIX进程状态,进程进入高优先级睡眠的原因: (1)0进程进入睡眠状态,系统设置最高优先数; (2)申请资源得不到满足的进程,系统将根据所等待资源的不同设置不同的优先
8、数; (3)等待块设备I/O完成的进程。,15,4.10 UNIX系统的进程管理 4.10.2 UNIX进程的状态及变迁二、UNIX进程状态,进程进入低优先级睡眠的原因: (1)等待字符设备I/O完成的进程; 处于用户态的进程间的同步。 这样做的目的是什么? 为使系统资源得到充分的利用,换句话说,是为了提高系统资源的使用效率。,16,4.10 UNIX系统的进程管理 4.10.2 UNIX进程的状态及变迁二、UNIX进程状态,(四)创建状态 子进程被创建时所取的状态; 父进程创建子进程时,子进程要复制父进程的全部的进程映像(除proc结构外)。,17,4.10 UNIX系统的进程管理 4.10
9、.2 UNIX进程的状态及变迁二、UNIX进程状态,(五)僵死状态 子进程等待父进程作善后处理时所处的状态。 特征: 进程转换成僵死状态后,就不能再转换成其它任何状态; 进程已释放它占用的所有资源(除proc结构外)。 p_stat 为SZOMB(zombi,zombie 还魂尸,僵尸)。,18,4.10 UNIX系统的进程管理 4.10.2 UNIX进程的状态及变迁二、UNIX进程状态 (六)进程状态变迁,19,4.10 UNIX系统的进程管理 4.10.3 进程控制,进程创建fork() 进程睡眠sleep() 进程唤醒wakeup() 进程终止exit() 等待进程终止wait() 执行
10、用户程序exec(),20,4.10 UNIX系统的进程管理 4.10.3 进程控制1. 进程创建fork,调用形式:pid=fork(); 功能:创建一个子进程 返回值: 1 创建失败 0 从子进程返回 0 从父进程返回,且返回值为子进程号,21,4.10 UNIX系统的进程管理 4.10.3 进程控制1. 进程创建fork,在UNIX系统中,除了0进程外,其它进程都是调用fork()创建的。 调用fork的进程是父进程,新创建的进程是子进程。 被创建的子进程是父进程进程映像的一个副本。 调用fork的三种情况: 在shell键入一个shell命令,在shell中会调用fork为键入的命令创
11、建一个进程; 在用户程序中调用fork系统调用创建一个进程; 执行shell程序时,在shell中会调用fork创建进程。,22,4.10 UNIX系统的进程管理 4.10.3 进程控制1. 进程创建fork,系统调用fork完成下列操作: 1.为新进程分配一个空闲的proc结构; 2.为新进程申请一个唯一的进程标识数PID; 3.填写proc的有关参数: p_pid=PID;p_ppid=父进程的p_pid;若有共享正文段,将text相应表目中的访问计数加1,表示访问该正文段的进程增加一个。其它项则复制父进程的proc。 4.以父进程的进程映像的大小申请内存,若得到满足,则将父进程的映像复制
12、到申请到的内存区,在内存中建立子进程的进程映像;否则,将父进程置为创建状态,在外存建立子进程的进程映像。,23,4.10 UNIX系统的进程管理 4.10.3 进程控制1. 进程创建fork,5.将与父进程有关的系统打开文件表和活动索引节点中的访问计数加1,即子进程继承父进程的全部打开文件; 6.对父进程返回子进程标识数(或称子进程号),对子进程返回0。,24,4.10 UNIX系统的进程管理 4.10.3 进程控制1. 进程创建fork,算法fork 取唯一的PID; 取一个空闲的proc表项; 初始化proc表项; 当前目录的I节点根目录的引用数加1; 文件表中的打开文件的引用数加1; 以
13、父进程映像的大小申请内存; if (内存充足) 复制父进程的映像到新内存区; else 将父进置为创建状态; 在外存建立子进程的映像; ,if (正在执行的是父进程) 将子进程的状态置为就绪状态 return (PID); /*从核心态返回用户态*/ else /* 正在执行的是子进程*/ 初始化U区的计时域; return (0); ,25,fork通常用法如下: n = fork(); if (n) /* 父进程代码 */ else /* 子进程代码 */ ,4.10 UNIX系统的进程管理 4.10.3 进程控制1. 进程创建fork,26,#include main() int chi
14、ld; child = fork(); if (child = 0) printf(“My PID is: %dn”, getpid(); printf (“My Child PID is: %dn”, child); ,4.10 UNIX系统的进程管理 4.10.3 进程控制1. 进程创建fork,输出?,27,#include main() int child; child = fork(); if (child = 0) printf(“My PID is: %dn”, getpid(); printf (“My Child PID is: %dn”, child); ,4.10 UNI
15、X系统的进程管理 4.10.3 进程控制1. 进程创建fork,父进程输出: My child PID is: 5677 子进程输出: My PID is:5677 My child PID is: 0 注:子进程号与实际运行情况有关,不一定是5677。,28,Unix系统中当一个进程完成了它的使命后,将调用系统调用exit来终止运行。每个终止的进程转换成僵死状态,释放它占用的资源,撤销进程映像,但保留进程的proc结构。 格式: exit(status); 其中:status 是终止进程向其父进程传递的参数。 exit(0)表示进程正常终止, exit(1)表示进程运行有错,异常终止。,4.
16、10 UNIX系统的进程管理 4.10.3 进程控制2. 进程终止exit,29,算法exit 输入:给父进程的返回码 输出:无 关闭所有打开的文件; 放弃正文段; 将进程user结构暂存到盘块上; 修改proc:p_addr为此盘块号; p_stat置为SZOMB; 释放本进程数据段;,if(父进程未找到) 将1#进程作为父进程; 唤醒父进程或1#进程; 将自己的所有子进程的父进程改为1#进程; 转进程调度程序; ,4.10 UNIX系统的进程管理 4.10.3 进程控制2. 进程终止exit,30,#include main() int child; child = fork(); if
17、(child = 0) printf(“My PID is: %dn”, getpid(); exit(0); printf (“My Child PID is: %dn”, child); ,4.10 UNIX系统的进程管理 4.10.3 进程控制 2. 进程终止exit,输出?,31,#include main() int child; child = fork(); if (child = 0) printf(“My PID is: %dn”, getpid(); exit(0); printf (“My Child PID is: %dn”, child); ,4.10 UNIX系统的
18、进程管理 4.10.3 进程控制 2. 进程终止exit,父进程输出: My Child PID is: 5687 子进程输出: My PID is:5687 注:子进程号与实际运行情况有关,不一定是5687。,32,在程序中可显示地调用exit,也可以在程序的结尾隐式调用exit。 C语言的main()函数返回时,调用exit,称显示调用; 若在main()的结尾没有调用exit,C语言编译程序在预处理时将在程序的结尾加上调用exit的语句。 exit是个不返回的系统调用,当它完成了进程终止的工作后,就直接调用进程调度程序,调度一个处于就绪态的进程占用处理机,因此,它没有返回值。,4.10
19、UNIX系统的进程管理 4.10.3 进程控制 2. 进程终止exit,33,父进程调用wait等待它的子进程终止。 wait和exit是Unix系统向用户态程序提供提进程间同步的主要手段。一个进程可以通过调用wait与子进程同步。 格式: pid = wait(stat_addr); 其中:stat_addr:地址指针,包含子进程退出状态码; pid:僵死子进程号。,4.10 UNIX系统的进程管理 4.10.3 进程控制 3. 等待进程终止wait,34,算法wait 输入:存放终止进程状态的变量地址 输出:子进程的标识号,子进程退出码 if (等待进程没有子进程) return (错误码
20、); for(;) if(等待进程有僵死子进程) ,取任一僵死子进程; 将子进程的CPU使用量加到父进程; 释放子进程的proc; retrun (子进程号,子进程退出码); 睡眠在可中断的优先级上(事件:子进程退出) ,4.10 UNIX系统的进程管理 4.10.3 进程控制 3. 等待进程终止wait,35,#include main() int i, ret_code; if (fork() i = wait( ,这是一个典型的父子进程同步的例子:父进程创建子进程,并等待子进程的终止。,4.10 UNIX系统的进程管理 4.10.3 进程控制 3. 等待进程终止wait,36,#incl
21、ude main() int i, ret_code; if (fork() i = wait( ,输出结果: 此处是子进程. 此处是父进程. 子进程标识号PID:xxxx,4.10 UNIX系统的进程管理 4.10.3 进程控制 3. 等待进程终止wait,37,进程因等待某事件发生(如请求分配资源、等待I/O完成)而暂停执行时,进程由运行状态转换成睡眠状态,这个工作由进程睡眠操作完成; 当等待的事件发生后,要把等待在该事件上的进程唤醒,即将进程的状态置为就绪状态。 进程阻塞操作:sleep 进程唤醒操作:wakeup,4.10 UNIX系统的进程管理 4.10.3 进程控制 4. 进程睡眠与唤醒,38,(1)进程睡眠 sleep(pri,chan); 其中: pri:系统将给睡眠进程设置的优先数,当该进程被唤醒后,进程就以这个优先数去参与处理机的竞争; chan:进程睡眠的原因。,4.10 UNIX系统的进程管理 4.10.3 进程控制 4. 进程睡眠与唤醒,39,4.10 UNIX系统的进程管理 4.10.3 进程控制 4. 进程睡眠与唤醒,算法sleep 输入:睡眠地址 chan; 优先数 pri 输出:无 提高处理机执行级来屏蔽所有中断; 置该进程状态为睡眠; if(pri 0) /*高优先级睡眠*/ p_wchan = chan; p_pri = pri; s_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安鑫园施工方案
- 河北省保定市唐县一中2023-2024学年高三9月月考生物试题(解析版)
- 儿科护理学护理实践中的健康教育
- 吉林省镇赉县镇赉镇中学2025-2026学年初三教学情况调研语文试题含解析
- 卵巢癌患者的日常护理要点
- 福建省部分市县2025-2026学年初三下学期第一次模拟考英语试题含解析
- 养老护理消防安全培训方法
- 学习四项监督制度测试题一模板
- 行为金融学视角下的资产定价
- 应急抗早预案(3篇)
- 三级 模块二 项目六 功能促进 任务三 指导或协助老年人使用安全防护性辅助器具
- 2026年上半年新疆维吾尔自治区招聘事业单位人员考试参考试题及答案解析
- 门窗销售考核制度
- 化工设备操作与应急处理手册
- 2026年浙江机电职业技术学院单招综合素质考试模拟试题含详细答案解析
- 黑龙江2025年黑龙江省疾病预防控制中心招聘27人笔试历年参考题库附带答案详解
- 器材仓库制度规范
- 2026年陕西航空职业技术学院单招职业适应性测试题库及完整答案详解1套
- 2025年旅游管理专升本经典真题集(附答案)
- 法律咨询服务方案模板
- 血液透析患者心力衰竭的诊断与治疗
评论
0/150
提交评论