快速业务通道

Linux 时钟处理机制

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-09
加入时钟事件设备这个事件,将会调用函数 tick_check_new_device .顺着该函数的调用序列向下查找.tick_set_periodic_handler 函数将时钟事件设备的 event_handler 成员赋值为 tick_handle_periodic 函数的地址.由此可知,函数 tick_handle_periodic 为硬件时钟中断发生时,真正的运行函数.

函数 tick_handle_periodic 的处理过程分成了以下两个部分:

1全局处理:整个系统中的信息处理
2局部处理:局部于本地 CPU 的处理
●总结一下,一次时钟中断发生后, OS 主要执行的操作( tick_handle_periodic ):

●全局处理(仅在一个 CPU 上运行):
1更新 jiffies_64
2更新 xtimer 和当前时钟源信息等
3根据 tick 计算 avenrun 负载
●局部处理(每个 CPU 都要运行):
1根据当前在用户态还是核心态,统计当前进程的时间:用户态时间还是核心态时间
2 唤醒 TIMER_SOFTIRQ 软中断
3唤醒 RCU 软中断
4调用 scheduler_tick (更新进程时间片等等操作,更多内容参见参考文献)
5profile_tick 函数调用
以上就介绍完了硬件时钟的处理过程,下面来看软件时钟.

Empire CMS,phome.net

在函数 inet_csk_init_xmit_timers 中,变量 icsk 就是前面提到的面向连接的套接字,其成员 icsk_retransmit_timer 则为实现超时重传的软件时钟.该函数调用 setup_timer 函数将函数 tcp_write_timer (参考函数 tcp_init_xmit_timers )设置为软件时钟 icsk->icsk_retransmit_timer 当时间到期后的处理函数.初始化的时候并没有设置该软件时钟的到期时间.

在 TCP 协议具体的一次数据包发送中,函数 tcp_write_xmit 用来将数据包从 TCP 层发送到网络层,如清单3-16.


清单3-16 tcp_write_xmit 函数

static int tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle)

{

    struct tcp_sock *tp = tcp_sk(sk);

    struct sk_buff *skb;

    ……

    if (unlikely(tcp_transmit_skb(sk, skb, 1, GFP_ATOMIC)))

        break;

    tcp_event_new_data_sent(sk, skb);

    ……

    return !tp->packets_out && tcp_send_head(sk);

}

注意该函数中加粗的函数,其中 tcp_transmit_skb 函数是真正将数据包由 TCP 层发送到网络层中的函数.数据发送后,将调用函数 tcp_event_new_data_sent ,而后者又会调用函数 inet_csk_reset_xmit_timer 来设置超时软件时钟的到期时间.

当函数 tcp_event_new_data_sent 结束之后,处理超时的软件时钟已经设置好了.内核会在每一次时钟中断处理完成后检测该软件时钟是否到期.如果网络真的超时,没有 ACK 返回,那么当该软件时钟到期后内核就会执行函数 tcp_write_timer .函数 tcp_write_timer 将进行数据包的重新发送,并重新设置超时重传软件时钟的到期时间.

4 总结

本文介绍了 Linux 内核的时钟处理机制.简单介绍了系统的硬件计时器,然后重点介绍了硬件时钟的处理过程和软件时钟的处理过程以及软件时钟的应用.

Empire CMS,phome.net

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

上一页1234
分享到: 更多
你可能对下面的文章感兴趣
上一篇: linux常用命令解析下一篇: 11月第3周回顾:45纳米时代来临 Linux利好不断

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号