欢迎来到天天文库
浏览记录
ID:36315185
大小:743.50 KB
页数:45页
时间:2019-05-09
《linux2.6进程调度分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Linux2.6进程调度分析.杨帆王凯左尧严丹.322小组源码阅读方法在分析源码前,先从整体出发,知道该操作系统的工作原理弄清Linux内核源代码的分布情况,即目录结构分析随时Baidu阅读代码的方法:纵向与横向。纵向:顺着程序的执行顺序逐步进行;横向:就是分模块进行两种方法应交替进行源码阅读工具SourceInsight想看变量某一定义,先把光标定位于该变量,然后点击工具条上的相应选项,该变量的定义就显示出来,同样可以用该方法查看函数定义。工具下载:http://home.ustc.edu.cn/~phanyoung/i
2、ndex_in.html可在课程BBS里找到该地址SourceInsight简介该软件符合优秀软件的设计标准:用户不需要专门的学习就能使用。Linux2.6调度系统的特性(1)继承和发扬2.4版调度器的特点:交互式作业优先轻载条件下调度/唤醒的高性能公平共享基于优先级调度高CPU使用率SMP高效亲和实时调度和cpu绑定等调度手段Linux2.6调度系统的特性(2)在此基础之上的新特性:O(1)调度算法,调度器开销恒定(与当前系统负载无关),实时性能更好高可扩展性,锁粒度大幅度减小新设计的SMP亲和方法优化计算密集型的批处理
3、作业的调度重载条件下调度器工作更平滑子进程先于父进程运行等其他改进增加了对可抢占内核的支持进程的几个要素的精僻描述剧本:依赖的程序。不同剧场可以演出同一个剧本----一个程序可以有多个进程。私有财产:专用的系统堆栈和独享的用户空间户口登记表:task_struct对进程的描述(如果没有独享的用户空间,只能被称为线程)。主要分析文件/include/linux/sched.h/kernel/sched.c进程控制块task_struct类似uC/OS-II中的OS_TCB,Linux的进程控制块task_struct包含有进
4、程的描述信息、控制信息以及资源信息,是进程的静态描述进程与任务:似乎是同一回事。Linux文档把process和task的概念未加区分。为了方便和出于个人习惯,后文在不会造成误解的条件下,对task_struc也称为任务(进程)控制块或TCB。进程控制块应包含哪些内容进程标识符优先级堆栈空间进程状态任何操作系统的TCB都应该直接或间接地定义出这四个方面……task_struct定义在/kernel/include/linux/sched.h的第437行-587行……task_struct重要成员statevolatilel
5、ongstate;/*-1unrunnable,0runnable,>0stopped*/2.6与2.4的宏定义数值上有较大的差别2.6新增了两种状态:TRACED、DEADTASK_DEAD是表示已经退出且不需父进程回收的进程的状态。TASK_TRACED供调试使用(似乎有STOPPED有点儿重复?)TASK_ZOMBIE一个已经终止的但仍保留有任务结构的进程(已经死了,户口未注销)。TASK_RUNNING就绪态(准确的说应该是task_runable)TASK_INTERRUPTIBLE、TASK_UNITERRUP
6、TIBLE不同深度的睡眠态TASK_STOPPED描述一个已经停止的进程,当进程接收到一个特殊信号或被使用ptrace系统调用的进程监控,并将控制权交给监控进程(我的理解就是断点调试)。关于state的volatile修饰据说是:“区分C程序员和嵌入式系统程序员的最基本的问题”一个变量加上修饰符volatile后:说明这个变量可能会被意想不到地改变,编译器就不会去假设这个变量的值了。这样,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值(FromMemory),而不是使用保存在计算单元寄存器里的备份。举例:计数器
7、的寄存器,多线程,中断Linux2.4任务堆栈uniontask_union{//cxl:分配/回收/访问structtask_structtask;unsignedlongstack[INIT_TASK_SIZE/sizeof(long)];};课堂上的讲述:http://staff.ustc.edu.cn/~xlanchen/EmbeddedOperatingSystems2008Spring/sched.h.html2.4版中,内核在创建进程时,为每个进程分配两个连续的物理页面(8KB),它的顶端(低地址部分)用
8、作存储进程的task_struct结构(约1KB),剩下的约7KB就是进程的系统空间堆栈,内核可以通过栈寄存器指针ESP快速地访问该进程.在Linux2.6中,这两个页面顶端存放的不再是进程的整个task_struct结构,而是task_struct中的thread_info,task_struct的大
此文档下载收益归作者所有