进程调度与系统调用.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文档。上传文档
查看更多
进程调度与系统调用

屏蔽信号 int sys_ssetmask(int newmask) //定义在signal.c(P104第20行) 作用:为进程设置信号屏蔽位图 参数:newmask——新的信号屏蔽位图 返回:老的信号屏蔽位图 * interruptible_sleep_on 当资源有效时或是任一进程有信号时,在该资源等待队列上的进程全部都被唤醒。 资源冲突 没有信号而被唤醒 常见的使用的方法是 while(资源无效没有信号) interruptible_sleep_on(资源等待队列 头指针的指针); * 进程管理 进程0的创建 创建子进程 调度进程 进程睡眠 终止进程 * 进程资源 进程终止时,要释放它占用的所有资源,包括: 内存 进程描述符和内核堆栈占用4K空间 页表和页目录占用的物理页面 代码和数据占用的物理页面 GDT中的LDT和TSS描述符 打开的文件 * 进程 task 数组 tss 数据段描述符 其它属性 代码段描述符 没用 代码段 数据段 线性地址 页目录 页表 TSSn LDTn * 进程终止的问题 通常父进程在子进程终止后,需要查询子进程的终止状态,但是该状态保存在子进程的进程描述符中。如果,子进程终止时释放了进程描述符,则无法查询终止状态。 子进程(sys_exit) 释放物 理页面 关闭打 开文件 父进程(sys_waitpid) 释放子进 程描述符 通知 * 进程终止的问题 由父进程负责回收子进程的进程描述符。但是,如果父进程在子进程之前终止,谁来负责回收子进程的进程描述符? 进程在终止时,把所有未终止的子进程过继给进程1。由进程1负责接收这些子进程终止信号,并回收子进程的进程描述符。 * sys_exit int sys_exit(int error_code) //定义在exit.c(P111第137行) 作用:释放进程占用的物理内存并关闭进程打开的文件。 参数:error_code 退出码 返回:无意义 * 释放代码和数据占用 的物理内存、页表 把子进程过 继给进程1 关闭打开的 文件和终端 修改状态为僵死 schedule 发送信号给父进程 * sys_waitpid int sys_waitpid(pid_t pid, unsigned long * stat_addr, int options) 作用:如果任意一个符合pid条件的子进程僵死,则释放子进程占用的进程描述符;如果所有符合pid条件的子进程都不处于僵死状态,则按照option选项或者等待或立即返回。(P111第142行) * sys_waitpid 参数:pid pid 0 等待进程号为pid的子进程 pid = 0 等待进程组号等于当前进程 组号的任何一个子进程 pid = -1 等待任何一个子进程 pid -1 等待进程组号等于-pid的任 何一个子进程 * sys_waitpid 参数: stat_addr:存放子进程的退出码(P67) options: options中WNOHANG置位:表示如果没有满足pid标识的子进程是僵死状态,则当前进程马上返回;否则当前进程挂起。 返回:正常返回子进程的pid,出错返回负数。 * 所有进程都搜索完毕 是符合pid条件的子进程 子进程的状态是僵死 回收子进程的 进程描述符 有符合pid条件的子进程 改状态为可中断睡眠 schedule 设置WNOHANG 收到SIGCHLD信号 返回 是 否 是 否 否 是 是 否 是 否 是 否 * 讲课内容 中断管理 进程管理 信号处理 * 信号 信号是一种进程间通讯的方式,这种机制是异步的。 Linux支持32个信号,每个信号用一个整数值来标识。参见书P107表5-5。 * 信号处理数据结构 参见task_struct,P404第83行 long signal; 对应32个信号,向进程发送信号就是把singal中信号对应的那一位置1。 signal |= 1(信号值-1) long blocked; 对应32个信号,如果某个信号对应的那一位置1表示该信号被屏蔽。 signal~blocked表示进程中未被屏蔽的信号。 * 信号处理数据结构 struct sigaction { void (*sa_handler)(int); //信号处理函数指针,可以是用户自定义的函数 sigset_t sa_mask; //在处理当前信号时需要屏蔽的信号,一般屏蔽本信号 int sa_flags; //改变信号处理过程的标志 void (*sa_restorer)(void)

文档评论(0)

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

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

1亿VIP精品文档

相关文档