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

Linux的时钟处理机制

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

函数 process_timeout 直接调用 wake_up_process 将进程唤醒。当内核重 新调用该进程执行时,该进程继续执行 schedule_timeout 函数,执行流则从 schedule 函数中返回,之后调用 del_singleshot_timer_sync 函数将软件时钟 卸载,然后函数 schedule_timeout 结束。函数 del_singleshot_timer_sync 是实际上就是函数 del_timer_sync (参见3.3.2节),如清单3-14

清单3-14 函数del_singleshot_timer_sync

#define del_singleshot_timer_sync(t) del_timer_sync(t)

以上就是进程定时睡眠的实现过程。接下来介绍的是软件时钟在网络超时重 传上的应用。

3.5.2 网路超时重传

对于 TCP 协议而言,如果某次发送完数据包后,并超过一定的时间间隔还没 有收到这次发送数据包的 ACK 时, TCP 协议规定要重新发送这个数据包。

在 Linux2.6.25 的内核中,这种数据的重新发送使用软件时钟来完成。这个 软件时钟保存在面向连接的套接字(对应内核中 inet_connection_sock 结构) 中。对这个域的初始在函数 tcp_init_xmit_timers 中,如清单3-15

清单3-15 函数 tcp_init_xmit_timers 、函数 inet_csk_init_xmit_timers 和函数 setup_timer

void tcp_init_xmit_timers(struct sock *sk)
{
  inet_csk_init_xmit_timers(sk,
                  &tcp_write_timer, &tcp_delack_timer,
                  &tcp_keepalive_timer);
}
void inet_csk_init_xmit_timers(struct sock *sk,
                  void (*retransmit_handler)(unsigned long),
                  void (*delack_handler)(unsigned long),
                  void (*keepalive_handler)(unsigned long))
{
  struct inet_connection_sock *icsk = inet_csk(sk);
  setup_timer(&icsk->icsk_retransmit_timer, retransmit_handler,
          (unsigned long)sk);
  ……
}
static inline void setup_timer(struct timer_list * timer,
                  void (*function)(unsigned long),
                  unsigned long data)
{
  timer->function = function;
  timer->data = data;
  init_timer(timer);
}

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

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

热点阅读