加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux的时钟处理机制

发布时间:2016-01-26 08:34:39 所属栏目:Linux 来源:网络整理
导读:在 Linux 操作系统中,很多活动都和时间有关,例如:进程调度和网络处理 等等。所以说,了解 Linux 操作系统中的时钟处理机制有助于更好地了解 Linux 操作系统

3.4 自我激活

软件时钟可分为两种类型:

仅仅激活一次

激活多次或者周期性激活

多次激活的实现机制就是要在软件时钟处理函数中重新设置软件时钟的到期 时间为将来的一个时间,这个过程通过调用 mod_timer 函数来实现。该函数的 实现如清单3-11

清单3-11 mod_timer 函数

int mod_timer(struct timer_list *timer, unsigned long expires)
{
  ……
  if (timer->expires == expires && timer_pending(timer))
    return 1;
  return __mod_timer(timer, expires);
}

从代码中可以看出,该函数实际上调用 __mod_timer 函数(参见3.3.1节) 来调整软件时钟的到期时间。

3.5 软件时钟的应用

软件时钟的处理是在处理软中断时触发的,而软中断的处理又会紧接着硬件 中断处理结束而进行,并且系统会周期地产生时钟中断(硬件中断),这样,软 件时钟的处理至少会在系统每一次时钟中断处理完成后触发(如果软件时钟的到 期时间大于系统当前的 jiffies ,表明时间未到期,则不会调用保存在软件时 钟中的函数,但此时的确提供了处理软件时钟的时机)。从这点上看,软件时钟 会有较快的相应——一旦时间到期,保存在软件时钟中的函数会将快 地被调用(在时钟软中断中被调用,参见3.3.2节)。所以内核中凡是需要隔一 段时间间隔后作指定操作的过程都通过软件时钟完成。例如大部分设备驱动程序 使用软件时钟探测异常条件、软盘驱动程序利用软件时钟关闭有一段时间没有被 访问软盘的设备马达、进程的定时睡眠( schedule_timeout 函数)和网络超时 重传等等。

本节主要通过介绍进程的定时睡眠( schedule_timeout 函数)和网络超时 重传来说明软件时钟的应用。

3.5.1 进程的定时睡眠

函数 schedule_timeout 的代码如清单3-12

清单3-12 函数 schedule_timeout

signed long __sched schedule_timeout(signed long timeout)
{
  struct timer_list timer;
  unsigned long expire;
  ……
  expire = timeout + jiffies;
  setup_timer(&timer, process_timeout, (unsigned long) current);
  __mod_timer(&timer, expire);
  schedule();
  del_singleshot_timer_sync(&timer);
  timeout = expire - jiffies;
out:
  return timeout < 0 ? 0 : timeout;
}

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读