内核资料收集
1. 进程链表
进程链表把所有进程的描述符链接起来。每个task_struct结构都包含有一个list_head类型的tasks字段,这个类型的
的prev和next字段分别指向前面和后面的task_struct元素。
进程链表的头是init_task描述符,它是0进程(或称swapper进程)的进程描述符。init_task的tasks.prev指向链表中的
最后插入的进程描述符的tasks字段。
宏for_each_process()扫描整个进程链表
2. TASK_RUNNING状态的进程链表
linux2.6实现的运行队列,可以在固定时间内选出“最佳”可运行进程,而与队列中可运行进程的数量无关。
linux2.6内核建立多个可运行进程链表,每个进程优先级对应一个不同的链表。进程描述符task_struct包含一个list_head
类型的字段run_list。运行队列链表分成140个不同的队列。如果进程的优先权为k(取值范围是0到139),run_list字段会
把该进程链入优先仅为k的可运行进程链表中。
多处理器系统中,每个CPU都有它自己的的运行队列,即自己的进程链表集。
组成运行队列的进程描述符链表,都由一个单独的prio_array_t数据结构实现。
enqueue_task(p, array)和dequeue_task(p, array)函数,向队列中插入/从运行队列中删除进程描述符。
阅读(1124) | 评论(0) | 转发(0) |