linux内核24分析(进程结构体和调度函数).pdfVIP

linux内核24分析(进程结构体和调度函数).pdf

  1. 1、本文档共15页,可阅读全部内容。
  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 的进程调度策略和算法。 要求以源码(V2.4)为依据,回答下面的问题: 1. 进程调度队列是如何组织的? 2. 三种调度类型(SCHED_FIFO, SCHED_RR, SCHED_OTHER)的实现过程是怎样的?【注: 不同版本的内核对调度类型的定义有差异,例如2.6 的调度类型增加为4 种,任意给出 三种即可】 3. 优先级是如何定义和动态变化的? 4. 时间片是怎样赋值的?它与优先级的关系是怎样的? 5. 对实时进程和多CPU 是如何支持的? 6. 评价linux 的调度策略;假设一种应用场景,在此场景下提出改进意见。(选作) 提示:重点分析内核数据结构task_struct (在include/linux/sched.h 中)和调度函 数schedule() (在kernel/sched.c 中) 使用 source Insight 或者其它工具找出代码之间的依赖关系,可参考互联网相关代码 分析资料 以源码为依据,写出关于上述问题的分析报告。 实验步骤 1、重点分析内核数据结构 task_struct (在include/linux/sched.h 中)和调度函数 schedule() Linux 的进程管理由进程控制块、进程调度、中断处理、任务队列、定时器、bottom half 队列、系统调用、进程通信等等部分组成。Linux 系统的进程控制块用数据结构 task_struct 表示,这个结构体包含了一个进程所需的所有信息。它定义在 include/linux/sched.h 文件中。每个进程都会被分配一个task_struct 结构,它包含 了这个进程的所有信息,在任何时候操作系统都能跟踪这个结构的信息。 ①、进程状态主要有如下: TASK_RUNNING 正在运行或在就绪队列run-queue 中准备运行的进程,实际参与进程调度。 TASK_INTERRUPTIBLE 处于等待队列中的进程,待资源有效时唤醒,也可由其它进程通过信号 或定时中断唤醒后进入就绪队列run-queue 。 TASK_UNINTERRUPTIBLE 处于等待队列的进程,待资源有效时唤醒,不也可由其它进程通过信 号或者定时中断唤醒。 TASK_ZOMBIE 表示进程结束但尚未消亡的一种状态(僵死) ,此时,进程已经结束运行并且已经释 放了大部分资源,但是尚未释放进程控制块。 TASK_STOPPED 进程暂停,通过其它进程的信号才能唤醒。 源代码如下: ②、内核数据结构task_struck 源码和相关解释: struct task_struct { /* * offsets of these are hardcoded elsewhere - touch with care */ volatile long state; /* -1 unrunnable, 0 runnable, 0 stopped */ //说明了该进程是否可以执行,还是可中断等信息 unsigned long flags; /* per process flags, defined below */ //Flage 是进程号,在调用fork()时给出 int sigpending; //进程上是否有待处理的信号 mm_segment_t addr_limit; /* thread address space: 0-0xBFFFFFFF for user-thead 0-0xFFFFFFFF for kernel-thread */ //进程地址空间,区分内核进程与普通进程在内存存放的位置不同 struct exec_domain *exec_domain; volatile long need_resched; //调度标志,表示该进程是否需要重新调度,若非 0,则当从内核态返回到用 户态,会发生调度 unsigned long ptrace; int lock_depth; /* Lock depth */ //锁深度 /* * offset 32 begi

文档评论(0)

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

文档爱好者~

1亿VIP精品文档

相关文档