linux内核源代码-定时器与时间管理详解
定时器与时间管理、内存管理 上次课的回顾及后面的安排 内核中的时间概念 Linux中时间表示 硬件时钟和定时器 Linux下的时钟中断和相关时间应用 Linux内存页 Linux内存区 内存管理提供的服务 内存管理缓存机制 内存映射 上次内容回顾和后面的安排 系统调用和中断(回顾上节课内容) 中断处理程序的上、下半部机制 LINUX下半部处理机制 同步的经典问题 LINUX内核同步实现 增加一次课,课本内容完成后通过两个专题的形式增加对内核的认识 内核中的时间概念 事件驱动与时间驱动 内核中需管理相对时间和绝对时间 内核时间的硬件基础(系统定时器以某种频率触发,hitting or poping,该频率可以通过编程预定(tick rate) 直接用处: 更新系统运行时间 更新实际时间 定期均衡运行队列(SMP上) 时间片 定期统计 Linux中时间表示(HZ) 节拍率(HZ) 系统定时器频率,可以通过设置修改,系统启动时设置,不同体系结构下不同。 如:在include/asm-i386/param.h中: #define Hz 1000 //相当于1秒中断1000次 思考:时间的精确性 书上P116表9-1给出一般情况下各种体系结构下的时钟中断频率 理想的HZ值应该是多少? 多时会产生中断频繁 但提高精度(分析:平均误差) Linux中时间表示(HZ) 精度提高的进一步讨论 一些关键系统调用的效率提高(poll(),select()) 进程抢占的精度提高 时间测量方面精度提高 中断次数增加带来的问题 综合考虑认为目前体系结构的系统设为1000可以忍受。 Linux中时间表示(jiffies) 全局变量,用来记录系统启动以来产生的节拍总数 在中定义: Extern unsigned long volatile jiffies;响应地有: Seconds* HZ = jiffies; (jiffies/HZ) = seconds;(还有一些其他的转换) 有关jiffies的内部位数问题: 溢出时间问题 64位问题(2.6中) Linux中时间表示(jiffies) 64位与32位的结合 Jiffies的回绕 unsigned long timeout = jiffies + HZ/2; /*执行一些任务….*/ if (timeout