再读《Linux内核设计与实现》之时间管理

时间管理在Linux中也是重要的组成部分

PART 1 系统时间
linux内核需要tick来驱动,Hz不能太大也不能太小。jiffies是一个全局时间计数变量,可以被访问。由于存在回绕的可能,故系统提供了一个回绕安全的判断宏。
time_after()
time_before()
time_after_eq()
time_before_eq()


PART2 RTC
RTC用于保存系统时间

PART3 时钟中断

PIC产生时钟中断,时钟中断处理函数主要工作
   获得jeffies的保护锁
   必要时,应答或重新设置系统时钟
   周期性的使用墙上时间更新实时是时钟(RTC)
   do_timer
do_timer的主要工作
   jeffies+1
   更新资源消耗统计值,如进程消耗的系统和用户时间
   执行到期的动态定时器
   schedule_tick()
   更新墙上时间
   计算平均负载

PART4 定时器
struct time_list{
       struct list_head entry;
       unsigned long expire;
       void (*function)(unsigned long);
       .....
};
init_timer();
add_timer();
mod_timer();
del_timer();
del_timer_sync() // 不能在中断上下文中执行

PART5 延时等待
    方案 1 忙等待
   while(time_before(jeffies,delay)){
   };
   while(time_before(jeffies,delay)){
    cond_resched();
  };//不能用于中断上下文

  方案2 短延时
  udelay()
  mdelay()
 
  方案3 schedule_timeout()
  代码必需能够睡眠,就是处于进程上下文,且没有持有锁。
  demo
  {
    set_current_state(TASK_INTERUPTBLE);
    schedule_timeout();
   } 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值