第2讲-处理机管理.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2.12 UNIX系统进程控制 2.12.1进程树 2.12.2进程的创建 2.12.3执行一个文件 2.12.4进程的睡眠与唤醒 2.12.5进程的终止 2.12.6等待子进程终止 2.12.1进程树 进程0 (系统进程) 进程1 (初始进程) fork过程 P21 P2i P2n P31 P3m …… (终端用户进程) fork() fork() fork() fork() …… …… …… …… (终端子进程) 图2.12 UNIX进程树 2.12.2进程的创建 指一个进程(称为父进程)调用系统调用fork创建一个与父进程具有基本一致内存映象的新进程(称为子进程)。 【算法2.3 fork】 功能:创建一个子进程。 调用格式:fork()。 输入:无 输出:对父进程为子进程 的进程标识号;子进程为 0。 N 设置子进程为创建态 增加系统打开文件表中引用计数 在父进程的fork专用保存区中保存进程的上下文,以使子进程被调度时从这里开始 在内存中对父进程上下文进行逻辑复制 执行的是父进程? 置子进程为内存就绪态 初始化user区的计时字段 返回(0) 返回(子进程的PID) N Y 将父进程proc结构中数据复制到子进程的proc结构中 增加当前目录i节点和改变过的根目录i节点的引用计数 返回(错) 检查是否有足够的资源? 分配一空闲proc[]数组项和一个唯一的进程标识符号PID 检查是否建立子进程太多? Y Y N fork() 图2.13 fork算法流程 正文段 数据段 用户段 打开文件当前目录 核心栈 · · · · · · · · · · · · · · · 共享父进程 正文段 数据段 用户段 打开文件当前目录 核心栈 user结构 user结构 i节点表 系统打开文件表 父进程上下文 子进程上下文 图2.14 父进程使用fork创建子进程上下文示意图 2.12.3执行一个文件 使子进程具有独有的正文段和数据段的系统调用是 exec()。共6个,它们的调用格式是: (1)int execl (path,arg0,…,argn,(char *)0) char *path,*arg0,…,*argn; (2)int execv (path,argv)char *path,*argv[ ]; (3)int execle (path,arg0,…,argn,(char *)0,envp [ ]char *path,*arg0,……,*argn,*envp[ ]; (4)int execve(path,argv, envp) char *path,*argv[ ],*envp[ ]; (5)int execip (file,arg0,…,argn,(char* ) char *file,*arg0,…,*argn; (6)int execvp (file,argv) char *file,* argv[ ]; 确认文件是 否可执行,用户是否有执行权限? N 返回(错) Y 将文件头读入内存 将exec参数从旧的进程地址空间复制到系统空间 调用detach参数逐个释放与旧进程连接的每个区 装入完毕? Y N 调用allocreg将分配新区quqquuquqqu区 调用attachreg将区连接到进程上 调用loadreg将区装入内存 将exec的参数从系统空间复制到用户栈区 置用户态寄存器上下文 调用iput释放文件的i节点 返 回 调用算法namei获取可执行文件的i节点 exec 图2.15 exec算法流程 【算法2.4 exec】 功能:用一个可执行的二进制文件覆盖在一个进程的用户级上下文的存储空间上,然后执行新的程序代码。 输入:(1)文件名; (2)参数; (3)环境变量表。 输出:无。 2.12.4进程的睡眠与唤醒 通过sleep函数和wakeup函数实现 sleep函数的格式为: sleep (chan,disp) wakeup函数的格式为: wakeup(chan) Y Y 把进程从睡眠Hash队列中移出 恢复处理机运行级 进程睡眠优 先级可捕捉软中断信号? 返回(1) 调用longjmp函数 Y Y sleep(chan,disp) 提高处理机的运行级以屏蔽 所有的中断 置进程为睡眠状态 根据睡眠地址把进程放入睡眠Hash队列 把睡眠地址和优先级保存在proc结构中 N N 返回(0) 进程睡眠不可中断? 做上下文切换 恢复处理机运行级 返回 进程无 待处理软中断信号? 做上下文切

文档评论(0)

0520 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档