Linux 2.6 进程调度分析.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux 2.6 进程调度分析 .杨帆 王凯 左尧 严丹.      322小组 源码阅读方法 在分析源码前,先从整体出发,知道该操作系统的工作原理 弄清Linux内核源代码的分布情况,即目录结构分析 随时Baidu 阅读代码的方法:纵向与横向。 纵向:顺着程序的执行顺序逐步进行; 横向:就是分模块进行 两种方法应交替进行 源码阅读工具 SourceInsight 想看变量某一定义,先把光标定位于该变量,然后点击工具条上的相应 选项,该变量的定义就显示出来,同样可以用该方法查看函数定义。 工具下载:/~phanyoung/index_in.html 可在课程BBS里找到该地址 Source Insight 简介 该软件符合优秀软件的设计标准:用户不需要专门的学习就能使用。 Linux 2.6调度系统的特性(1) 继承和发扬 2.4 版调度器的特点: 交互式作业优先 轻载条件下调度/唤醒的高性能 公平共享 基于优先级调度 高 CPU 使用率 SMP 高效亲和 实时调度和 cpu 绑定等调度手段 Linux 2.6调度系统的特性(2) 在此基础之上的新特性: O(1)调度算法,调度器开销恒定(与当前系统负载无关),实时性能更好 高可扩展性,锁粒度大幅度减小 新设计的 SMP 亲和方法 优化计算密集型的批处理作业的调度 重载条件下调度器工作更平滑 子进程先于父进程运行等其他改进 增加了对可抢占内核的支持 进程的几个要素的精僻描述 剧本:依赖的程序。不同剧场可以演出同一个剧本----一个程序可以有多个进程。 私有财产:专用的系统堆栈和独享的用户空间 户口登记表:task_struct对进程的描述 (如果没有独享的用户空间,只能被称为线程)。 主要分析文件 /include/linux/sched.h /kernel/sched.c 进程控制块task_struct 类似uC/OS-II中的OS_TCB ,Linux的进程控制块task_struct包含有进程的描述信息、控制信息以及资源信息,是进程的静态描述 进程与任务:似乎是同一回事。 Linux文档把process和 task的概念未加区分。 为了方便和出于个人习惯,后文在不会造成误解的条件下,对task_struc也称为任务(进程)控制块或TCB。 进程控制块应包含哪些内容 进程标识符 优先级 堆栈空间 进程状态 task_struct定义在 /kernel/include/linux/sched.h 的第437行-587行 task_struct重要成员state volatile long state; /* -1 unrunnable, 0 runnable, 0 stopped */ 2.6与2.4的宏定义数值上有较大的差别 2.6新增了两种状态:TRACED、DEAD TASK_DEAD是表示已经退出且不需父进程回收的进程的状态。 TASK_TRACED供调试使用(似乎有STOPPED有点儿重复?) TASK_ZOMBIE一个已经终止的但仍保留有任务结构的进程(已经死了,户口未注销)。 TASK_RUNNING 就绪态(准确的说应该是task_runable) TASK_INTERRUPTIBLE、TASK_UNITERRUPTIBLE 不同深度的睡眠态 TASK_STOPPED 描述一个已经停止的进程,当进程接收到一个特殊信号或被使用ptrace系统调用的进程监控,并将控制权交给监控进程(我的理解就是断点调试)。 关于state的volatile修饰 据说是:“区分C程序员和嵌入式系统程序员的最基本的问题” 一个变量加上修饰符volatile后:说明这个变量可能会被意想不到地改变,编译器就不会去假设这个变量的值了。这样,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值(From Memory),而不是使用保存在计算单元寄存器里的备份。 举例:计数器的寄存器, 多线程, 中断 Linux2.4任务堆栈 union task_union { //cxl: 分配/回收/访问 struct task_struct task; unsigned long stack[INIT_TASK_SIZE/sizeof(long)]; }; 课堂上的讲述:/~xlanchen/EmbeddedOperatingSystems2008Spring/sched.h.html 2.4版中,内核在创建进程时,为每个进程分配两个连续的物理页面(8KB),它的顶端(低地址部分)用作存储进程的task_s

文档评论(0)

飞扬的岁月 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档