linux内核源代码分析进程管理及调度.pptVIP

linux内核源代码分析进程管理及调度.ppt

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

进程管理、调度 进程管理任务 进程管理与其他模块的依赖关系 进程描述符及任务队列 进程的创建(FORK,copy-on-write) 线程实现 进程的终止 进程调度 进程管理的任务 允许进程复制自己 (真正作到一个应用多进程) 确定哪个进程能够拥有CPU 接受中断并将中断导向响应的内核子系统 向用户进程发送信号 管理时钟硬件 当一个进程结束时,释放其资源 动态装载执行模块 进程模块与其他模块的依赖关系 在整个内核中的功能位置和源码依赖关系 进程模块与其他模块的依赖关系 进程调度模块的内外界面 对用户进程提供了一组简单的系统调用接口; ??? 对内核的其他模块提供了丰富的接口功能。 进程模块与其他模块的依赖关系 进程调度模块和其他模块的相互依赖关系 内存管理模块:当一个进程被调度的时候,为它建立内存映射。 ?IPC子模块:bottom-half处理使用了其中的信号量队列。 文件系统模块:在装载module的时候为进程调度提供实际设备的 访问途径。 所有的其他模块都依赖于进程调度模块,因为当要进行硬件访问的时候它们需要CPU挂起用户进程,切换到系统态进行处理。 进程描述符及任务队列 分配进程描述符(http://lxr.linux.no) 预分配描述符(SLAB机制),把动态分配的过程省略掉一部分(不需要频繁调用内存管理响应功能),相当于一种高级缓存,提高效率。最后的操作主要是直接填写结构。 进程描述符及任务队列 进程状态 #define TASK_RUNNING ?? ? ? 0 (进程是可执行的或正在执行)?? #define TASK_INTERRUPTIBLE ?? 1(进程睡眠或阻塞,等待某一事件到来中断它) #define TASK_UNINTERRUPTIBLE ?? 2(进程睡眠或阻塞,不能其他进程的信号打断,直接等待硬件条件) #define TASK_ZOMBIE ?? ? ? 4(僵尸,呆傻状态,已结束,但其父进程未接到通知,描述符未释放)???? #define TASK_STOPPED ?? ? ? 8(进程停止,接受到SIGSTP信号) ???????? #define TASK_SWAPPING ?? ? ? 16??(进程页面被兑换出内存) 进程描述符及任务队列 进程描述符及任务队列 索引组织形式之一:队列 进程描述符及任务队列 索引组织形式之二:树 进程的创建(FORK,copy-on-write) 进程创建过程描述 Linux中,进程的创建是通过拷贝已存在进程来实现的。 在Linux内核启动的时候,首先由start_kernel()初始化各个系统数据结构,同时生成了和系统共存亡的后台进程:init。 init进程通过拷贝自身,产生了若干内核子进程。然后这些进程就可以通过系统调用fork()生成它们的子进程,当然这些子进程的原始数据都是他们的父亲的副本。进程的终止是通过系统调用_exit()实现的。 进程的创建(FORK,copy-on-write) FORK() FORK()、VFORK()、_CLONE() =CLONE() =DO_FORK()(在kernel/fork.c中) =COPY_PROCESS(),并执行 {dup_task_struct(建内核栈、thread_info、task_struct); 检查进程数目限制; 描述符设置,以区别于父进程; 子进程状态设置为TASK_UNINTERRUPTIBLE copy_flags get_pid 资源引用复制 父子进程平分剩余时间片 返回指向子进程的指针(一般子进程先执行) }(注意:此时并未复制代码) 进程的创建(FORK,copy-on-write) EXEC() 对应内核中一族函数:execve(),execv(),execlp(),execvp() 负责加载可执行的代码,覆盖本进程的代码、数据。 进程的创建(FORK,copy-on-write) FORK()应用实例 main() { pid_t pid; pintf(“this location in parent process\n”); if ((pid=fork())= =0) { printf(“this location in child process\n”); execlv(….); } } 进程的创建(FORK,copy-on-write) VFORK() 除不拷贝父进程的页表项和FORK()完全相同。 目前已基本不用。 体会一下书上20页有关VFORK()主要过程的描述 线程实

文档评论(0)

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

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

版权声明书
用户编号:5134022301000003

1亿VIP精品文档

相关文档