Lab3-进程管理.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Lab3-进程管理.ppt

Lab2 syscall 参数问题 参数check在当前代码框架下并不具有任何含义, 它就只是个参数而已 参数不超过四个: 系统调用号 字符串 字符串长度 打印参数 Lab2 putc 系统调用 基于 putc 实现或不基于 putc 实现库函数都是可以的, 因为没有什么具体的区别 滚屏和清屏 Lab1中部分同学已经实现 在之后的实验中大家可以尝试加入键盘中断来实现翻页 Lab2 段 用户程序重定位到 0x0 用户段基地址 0x200000 核心段基地址 0x0 在内核中访问用户数据时, 访问地址应该加上用户段的基地址才是正确的地址 切换特权级后的第一步应该是切换各个段的值 Lab3-进程管理 2016-4-5 目录 实验要求 进程与线程 PCB 进程调度 相关系统调用 实验要求 内核:实现进程切换,并提供系统调用fork, exit, sleep(时钟中断); 库:封装上述系统调用; 用户:实现一个Pingpong的测试程序,Ping进程与Pong进程各自sleep若干秒之后分别打印出Ping和Pong。 实验要求 除了 Ping, Pang 两个进程外, 你还需要一个 IDLE内核线程 在其他进程撤销没有进程可以进行调度的时候由 IDLE 线程掌控 CPU IDLE 线程什么都不做, 只是等待中断到来 实验要求 Ping 程序由内核直接加载, 并分配地址空间 Pang 程序是由 Ping 程序通过系统调用 fork() 产生的子进程 实验要求 我们需要什么? 时钟中断 进程调度 两个进程 进程与线程 进程和线程 线程是调度的基本单位 进程是资源分配的基本单位 在操作系统实验中, 进程和线程将一视同仁进行调度, 因此我们将使用 PCB 的概念来描述一个进程或线程 PCB PCB(Process Control Block) 进程控制块记录了进程的运行状态, 也是内核进行进程调度的基本单位 我们说 PCB 可以直接代表一个进程, 那么它应该包含一个进程的所有内容, 那究竟应该有哪些内容呢? PCB 进程在进行调度的时候, 需要保存的进程现场状态有哪些? 地址空间是独立的, 但是 CPU 只有一个 所有可能被修改的内容 状态寄存器, 通用寄存器, 段寄存器, 指令寄存器, 栈顶指针寄存器 PCB 一个进程的生命周期 PCB 进程运行状态 就绪(Runnable/Ready) 运行(Runing) 阻塞(Block/Sleep) 相对的, 内核中必然存在至少两个队列 就绪队列 阻塞队列 PCB 其他的一些内容 运行时间(时间片轮转) 阻塞时间(sleep) 进程号 进程名 优先级 ... 进程调度 简单的调度 进程 A 运行中 进程状态被保存, 进程被挂起 进程调度 进程 B 被启动 时钟中断发生 进程调度 何时保存进程状态? 时钟中断发生后立即保存进程现场信息 怎么保存? 两种方法 怎么恢复? 进程状态保存1 CS, EIP, EFLAGS, ESP, SS 从堆栈中 pop 出来 通用寄存器 一个一个保存到 PCB 中 段寄存器 分别保存到 PCB 中 问题: 在保存通用寄存器的值前, 通用寄存器的值可能已经被修改, 不推荐 进程状态保存2 进程状态保存2 ss esp eflags cs eip PCB tss.esp0 高地址 低地址 esp 通用寄存器 eax eca edx ebx ... PCB tss.esp0 pusha esp 段寄存器 ds es fs gs PCB tss.esp0 esp 进程状态保存2 其他信息的保存或修改 运行状态 运行时间 ... 进程调度 我们在中断发生的第一时间将进程现场信息保存到了 PCB 中, 同时我们也发现我们的栈顶就在 PCB 中, 为了做到对 PCB 的正确访问, 在保存完进程的现场信息后, 修改栈的内容前, 应该进行一次栈的切换 从 PCB 表切换到内核栈 防止 PCB 表内数据被修改 进程调度 基本调度策略 时间片轮转(RR-Round Robin) 给每个进程分配一定的时间片 优点? 最简单, 最古老, 最公平 其他: 先到先服务(FIFO)... 进程恢复 在调度结束之后, 时钟中断会将需要恢复的进程的现场进程恢复, 当然会包括以下内容: 段寄存器 通用寄存器 指令寄存器 状态寄存器 如果你使用了进程状态保存方法2, 那就需要再次在调度结束后从内核栈切换到 PCB中, 使用 pop 和 popa 指令恢复, 最后使用 iret 返回 段寄存器 ds es fs gs PCB esp 通用寄存器 eax eca edx ebx ... PCB pusha esp 进程恢复 ss esp eflags cs eip PCB esp iret 进程恢复 注意!!! 因

文档评论(0)

ailuojue + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档