Chinaunix

标题: 读书笔记之《深入理解LINUX内核》第7、8、9章 . [打印本页]

作者: 三里屯摇滚    时间: 2011-12-09 16:51
标题: 读书笔记之《深入理解LINUX内核》第7、8、9章 .
读书笔记之《深入理解LINUX内核》第7、8、9章 .













第7章:进程调度

进程调度(scheduling)主要关心什么时候进行进程切换及选择哪一个进程来运行。

    第一节调度策略。“Linux的调度基于分时(time sharing)技术:多个进程以“时间多路复用”方式运行,因为CPU的时间被分成“片(slice)”,给每个可运行进程分配一片。”

    第二节调度算法。分为普通进程的调度和实时进程的调度。每个普通进程都有它自己的静态优先级,根据该优先级可以算出它的基本时间片。当然,还有根据进程的平均睡眠时间来调整的动态优先级。

    第三节调度程序所使用的数据结构。“数据结构runqueue是Linux2.6调度程序最重要的数据结构。系统中的每个CPU都有它自己的运行队列,所有的runqueue结构存放在runqueue每CPU变量中。”此外,进程描述符也是很重要的数据结构。

    第四节调度程序所使用的函数。这一节讲解的函数有以下几个:scheduler_tick()、try_to_wake_prio()、recalc_task_prio()、schedule()。

    第五节多处理器系统中运行队列的平衡。调度域的概念:实际上是一个CPU集合,它们的工作量应当由内核保持平衡。还有三个重要函数:rebalance_tick()、load_balance()、move_tasks()。

    第六节与调度相关的系统调用。讲解了好几个系统调用:nice()系统调用,不过已经被setpriority()取代、getpriority()、setpriority()、sched_getaffinity()、sched_setaffinity()、sched_getscheduler()、sched_setscheduler()、sched_getparam()、sched_setparam()、sched_yield()、sched_get_priority_min()、sched_get_priority_max()、sched_rr_get_interval()。


第8章:内存管理

这章有三大块内容,“页框管理”和“内存区管理”两节分别介绍对连续物理内存区处理的两种不同技术,而“非连续内存区管理”一节介绍的是处理非连续内存区的技术。


第9章:进程地址空间

“当用户态进程请求动态内存时,并没有获得请求的页框,而仅仅获得对一个新的线性地址区域的使用权,而这一线性地址区间就成为进程地址空间的一部分。这一区间叫做“线性区””
    第一节进程的地址空间只是简单介绍了线性地址的一些相关内容。例如进程获得新的线性地址的几种情况。

    第二节内存描述符。每一个内存描述符包含了它所对应的进程的地址空间的全部信息,一共有50个左右的字段用于标识各种信息。由于内核的特殊性,内核进程不拥有内存描述符。

    第三节线性区。这是本章的重点。因为进程的地址空间就是有一个一个的线性区组成的。线性区描述符由vm_area_struct结构体实现。进程所拥有的线性区从来不重叠,并且内核尽力把新分配的线性区与紧邻的现有线性区进行合并。对某一个进程所拥有的所有的线性区,有两种组织方式,一种是链表,另一种是红黑树。

    第四节缺页异常处理程序。这一节讨论了各种导致缺页异常的情况及其处理方法。另外还介绍了请求调页技术和写时复制技术。

    第五节创建和删除进程的地址空间。创建时调用copy_mm()函数,使用写时复制技术。当进程结束时调用exit_mm()函数,释放进程的地址空间。
作者: 健康木乃伊    时间: 2011-12-22 18:56
学习鸟  谢谢分享




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2