- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3-2010-进程模型精品课件
fork()系统调用使用返回值区分子进程还是父进程,子进程fork返回0,父进程中返回子进程的PID * 写时复制技术(copy_on_write) Linux通过写时复制技术来调入执行的程序 Linux将可写虚拟内存页的页表项标志为只读,当进程向该内存页写入数据时,处理器会发现内存访问中的问题(向只读页中写入),然后会导致操作系统可以捕获的页故障,由操作系统来完成内存页的复制一个给定的物理页面可以代表多个逻辑页面,当这个页被一个进程从另一个进程处得到共享时,它是逻辑上的拷贝如前面的fork调用,逻辑拷贝整个进程的地址空间,仅当试图修改页面(产生写错误)才真正的拷贝 * * * * PCB的内容(1/3) 进程描述信息: 进程标识符(process ID),唯一,通常是一个整数 进程名,通常基于可执行文件名(不唯一) 用户标识符(user ID);进程组关系 进程控制信息: 当前状态 优先级(priority) 代码执行入口地址 程序的外存地址 运行统计信息(执行时间、页面调度) 进程间同步和通信;阻塞原因 PCB的内容(2/3) 进程的队列指针 进程的消息队列指针 所拥有的资源和使用情况: 虚拟地址空间的现状 打开文件列表 CPU现场保护信息: 寄存器值(通用、程序计数器PC、状态PSW,地址包括栈指针) 指向赋予该进程的段/页表的指针 PCB的内容(3/3) A. S. Tanenbaum 进程映像 代码段(用户程序) 数据段(用户数据) 用户栈(堆栈) 用于过程调用和参数传递 与系统栈区分 进程控制块PCB (进程属性) 用户进程不能直接访问、修改自己的PCB 进程虚拟地址空间 进程上下文环境(context) 对进程执行活动全过程的静态描述 由进程的用户地址空间内容、硬件寄存器内容及与该进程相关的核心数据结构组成 用户级上下文:进程的用户地址空间(包括用户栈各层次),包括用户正文段、用户数据段和用户栈 寄存器级上下文:程序计数器、程序状态寄存器、栈指针、通用寄存器的值 系统级上下文: 静态部分(PCB和资源表格) 动态部分:核心栈(核心过程的栈结构,不同进程在调用相同核心过程时有不同核心栈) Solaris的进程控制块与进程表 proc数据结构 PCB表:系统把所有PCB组织在一起,并把它们放在内存的固定区域,就构成了PCB表 PCB表的大小决定了系统中最多可同时存在的进程个数,称为系统的并发度 (注:多道程序中的多道与系统并发度不同) 进程队列:不同状态进程分别组成队列 运行队列、就绪队列、等待队列 相关了解:Linux/Solaris的相关数据结构 PCB组织方式(1/2) PCB组织方式(2/2) William Stallings 5.进程控制 创建、撤消进程以及完成进程各状态之间的转换,由具有特定功能的原语完成 进程创建原语 进程撤消原语 阻塞原语 唤醒原语 挂起原语 激活(解挂)原语 改变进程优先级 (1)进程的创建 给新进程赋予一个唯一的进程标识符 为进程映像分配空间 初始化进程控制块 许多默认值 (如: 状态为 New,无I/O设备或文件...) 设置相应的链接 如: 把新进程加到就绪队列的链表中 创建或扩充其他数据结构 (2)进程的撤消 收回进程所占有的资源 撤消该进程的PCB (3)进程阻塞和进程唤醒 处于运行状态的进程,在其运行过程中期待某一事件发生,如等待键盘输入、等待磁盘数据传输完成、等待其它进程发送消息,当被等待的事件未发生时,由进程自己执行阻塞原语,使自己由运行态变为阻塞态 (4)UNIX进程创建 fork() 通过复制调用进程来建立新的进程,是最基本的进程建立过程 exec() 包括一系列系统调用,它们都是通过用一个新的程序覆盖原来的内存空间,实现进程的转变 wait() 提供初级的进程同步措施,能使一个进程等待,直到另外一个进程结束为止 exit() 该系统调用用来终止一个进程的运行 使用fork()的示例代码 fork()的过程 为子进程分配新的PID和进程描述符 初始化子进程描述符结构 为子进程分配地址转换表 以一次一页的方式复制父进程地址数据和堆栈区,并更新子进程地址转换表,指向这些新页面 (运用写时复制技术) 获得由子进程继承的共享资源的指针,如打开的文件和当前工作目录 子进程就绪,加入调度队列 设置子进程从fork返回0 向父进程返回子进程PID (5)Solaris的进程创建 fork系统调用创建一个新的子进程,并把父进程的很多对象复制到子进程中,例如地址空间、线程、文件描述符等 fork有不同的形式,包括fork1、forkall和vfork 主要区别1:
您可能关注的文档
最近下载
- 捕歼战斗中地排教案设计.doc VIP
- 深圳希莱恒电解质说明书.doc VIP
- 开展体育领域突出问题专项整治工作情况汇报.docx VIP
- 学校安全生产风险分级管控和隐患排查治理双重预防体系建设实施指南.pdf VIP
- 双眼视异常分析临床处理2020.pptx VIP
- 排捕歼战斗连贯演练.docx VIP
- Illustrator教程Illustrator绘图技巧Illustrator经典实例Illustrator网格工具绘制逼真花瓣.pdf VIP
- 民企混改公司合作协议书10篇.docx VIP
- 如何免费申请QQ号申请qq号方法.docx VIP
- Illustrator进阶技巧.pdf VIP
文档评论(0)