预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共45页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Linux2.6进程调度分析源码阅读方法源码阅读工具SourceInsightSourceInsight简介Linux2.6调度系统的特性(1)Linux2.6调度系统的特性(2)进程的几个要素的精僻描述主要分析文件进程控制块task_struct进程控制块应包含哪些内容task_struct定义在/kernel/include/linux/sched.h的第437行-587行 task_struct重要成员stateTASK_ZOMBIE一个已经终止的但仍保留有任务结构的进程(已经死了,户口未注销)。 TASK_RUNNING就绪态(准确的说应该是task_runable) TASK_INTERRUPTIBLE、TASK_UNITERRUPTIBLE不同深度的睡眠态 TASK_STOPPED描述一个已经停止的进程,当进程接收到一个特殊信号或被使用ptrace系统调用的进程监控,并将控制权交给监控进程(我的理解就是断点调试)。关于state的volatile修饰Linux2.4任务堆栈2.4版中,内核在创建进程时,为每个进程分配两个连续的物理页面(8KB),它的顶端(低地址部分)用作存储进程的task_struct结构(约1KB),剩下的约7KB就是进程的系统空间堆栈,内核可以通过栈寄存器指针ESP快速地访问该进程. 在Linux2.6中,这两个页面顶端存放的不再是进程的整个task_struct结构,而是task_struct中的thread_info,task_struct的大部分信息保存在栈外,通过thread_info的task指针可以方便地访问到. Linux2.6任务堆栈存储结构include/asm-i386/thread_info.h中对thread_info的定义 thread_info的重要成员有趣的0长度数组thread_info和硬件相关task_struct的thread_info指针通过thread_info指针,我们可以把TCB和它的堆栈联系起来arm中的current()定义intprio,static_priorun_list成员activated成员就绪进程队列runqueuerunqueue源代码队列进程个数nr_running两个子队列active、expiredqueue是指定优先级进程list的指针,如queue[i]就是priority为i的进程的指针。 bitmap是一张优先级的位图,或者可以说的位数组,每一位代表了一个优先级(类似uC/OS-II)。 MAX_PRIO指的是优先级的数量.include/asm-arm/bitops.h中寻找最高优先级函数按宏定义,会生成160bit的位数组(5个long),构成一张表。 每一位对应一个优先级,该优先级有active状态(时间片未用完)的,在相应位置1,否则置0。 从右向左位扫描1,得到优先级最高(值最小)的优先级号k 进入queue[k]数组 经验交流