任何LINUX内核都要记录系统进行了多少CPU活动
监管器基于废话藏简单的蒙特卡洛算法,在每一次时钟中断发生时,内核确定该中断若发生在内核态,则内核从堆栈取回中断发生前的eip寄存器的值,并用这个值揭示中断发生前内核区在做什么
Linux依赖adjtimex()系统调用来实现
通常把系统配置成能在常规基准上运行时间同步协议,依赖网络定时协议NTP,以在每个节拍逐渐地调整时间
第七章、进程调度
LINUX的调度基于分时time sharing技术,多个进程以时间多路复用方式运行,因为CPU的时间被分为“片“slice,给每个可运行进程分配一片
交互式进程相对有较高的优先级
内核用从100(最高优先级)到139(最低优先级)的数来表示普通进程的静态优先级。优先级越高,基本时间片就越长
Runqueue数据结构中最重要的字段是与可运行进程的链表相关的字段
一个保持可运行状态的进程通常被限制在一个固定的CPU上
调度域schedualing domain实际上是一个CPU集合,他们的工作量应由内核保持平衡。调度域采取分层的组织形式
第八章、内存管理
RAM的其余部分称为动态内存dynamicmemory,这是进程内核所宝贵资源,系统资源取决于如何有效管理动态内存
对于每个CPU而言,内存都试图把耗时节点的访问次数减到最少
这就要小心地选择CPU最常用的引用的内核数据结构的存放位置
Linux2.6支持非。内存访问NCMA模型,在这模型中,给定CPU对不同内存单元的访问时间可能不一样
系统的物理内存被划分为几个节点node。在一个单独的节点内,任意给定CPU访问页面所需的时间都是相同的。然而对不同的CPU,这个时间可能就不同
每个节点中的物理内存又可以划分为几个管理区eone
循环缓冲区的作用是消除CPU负载的峰值
第十四章块设备驱动程序
块设备的主要特点是,CPU和总线读写数据所花时间与磁盘硬件的速度不匹配
块设备的评价访问时间很高
块设备中的数据存储设备涉及了许多内核组件。每个组件采用不同的块来管理:硬件块设备控制器采用“扇区”的固定长度来传送数据
虚拟文件系统,映射层文件系统将磁盘数据存放在“块”逻辑单元中
块设备驱动程序处理程序的“段“”,段是内存区或内存页的一部分,包含磁盘上物流相连的数据块
磁盘高速缓存作用于磁盘数据上的页,页正好装在一个页框中
通用块层将所有的上层和下层的组件组合在一起,因此它了解数据的扇区、块、段和页
应该把扇区作为传递数据的基本单元,而块是UFS和文件系统传送数据的基本单位
在linux中,块的大小必须是2的幂,而且不能超过一个页框,另,必须是扇区的整数倍
对磁盘的每个I/O操作,就是在磁盘与一些RAM单元之间相互传送一些相邻扇区的内容
磁盘是一个由通用块层处理的逻辑块设备
为了防止块设备驱动程序被挂起,每个I/O都是异步处理的
I/O调度程序也被称为电梯算法
Linux2.6提供了4种:
预期anticipatory算法、最后期限deadline算法、CFQ complete fairness queueing完全公平队列算法以及NOOP no operating算法。如果没有给定引导参数,缺省使用预期I/O调度程序
“最后期限”算法的基本机制:两个最后期限队列和两个排序队列;I/O调度程序在读和写之间交互扫描排序队列,不过更倾向于读请求。扫描基本上是连续的
块设备驱动程序是Linux块子系统中的最低层组件