M-book

求上得中, 求中得下, 求下得无!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2011年8月24日

摘要: 由于linux还不是一个实时的操作系统,因此如果需要更高精度,或者更精确的定时的话,可能就需要打一些实时的补丁,或者用商用版的实时linux,. 这里内的定时器最小间隔也就是1个tick. 这里还有一个要注意的,我这里的分析并没有分析内核新的hrt 定时器.这个定时器是Monta Vista加入到内核的一个高精度的定时器的实现. 先来看几个相关的数据结构. ///这个是一个最主要的数据结构,表示一个完整的定时器级联表 Java代码 structtvec_base{ ///自旋锁 spinlock_tlock; ///表示由本地cpu正在处理的定时器链表 structtimer_list*run 阅读全文

posted @ 2011-08-24 15:23 M-book 阅读(685) 评论(0) 推荐(0) 编辑

摘要: LINUX内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某个函数的一种机制,其实现位于 <linux/timer.h> 和 kernel/timer.c 文件中。被调度的函数肯定是异步执行的,它类似于一种“软件中断”,而且是处于非进程的上下文中,所以调度函数必须遵守以下规则:1) 没有 current 指针、不允许访问用户空间。因为没有进程上下文,相关代码和被中断的进程没有任何联系。2) 不能执行休眠(或可能引起休眠的函数)和调度。3) 任何被访问的数据结构都应该针对并发访问进行保护,以防止竞争条件。内核定时器的调度函数运行过一次后就不会再被运行了(相当于自 阅读全文

posted @ 2011-08-24 15:20 M-book 阅读(314) 评论(0) 推荐(0) 编辑

摘要: Linux per_cpu机制的详解 针对IA64体系结构 在Linux操作系统中,特别是针对SMP或者NUMA架构的多CPU系统的时候,描述每个CPU的私有数据的时候,Linux操作系统提供了per_cpu机制。 per_cpu机制就是让每个CPU都有自己的私有数据段,便于保护与访问。 通过宏DEFINE_PER_CPU,定义这种私有数据,只不过这种私有数据放在特定的数据段中。 #define DEFINE_PER_CPU(type, name) \ __attribute__((__section__(".data.percpu"))) \ PER_CPU_ATTRIB 阅读全文

posted @ 2011-08-24 15:18 M-book 阅读(4893) 评论(0) 推荐(0) 编辑

摘要: 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_timervoid t 阅读全文

posted @ 2011-08-24 15:17 M-book 阅读(475) 评论(0) 推荐(0) 编辑

摘要: 函数首先获得到本地 CPU 的 base 。然后检测如果 jiffies 注: hrtimer_run_pending() 函数是高精度时钟的处理。本文暂没有涉及高精度时钟相关的内容。 大于等于 timer_jiffies ,说明可能已经有软件时钟到期了,此 时就要进行软件时钟的处理,调用函数 __run_timers 进行处 理。如果 jiffies 小于 timer_jiffies ,表明没有软件时钟到期, 则不用对软件时钟进行处理。函数返回。 接下来看一下函数 __run_timers 都作了些什么,如清单3-9 清单3-9 __run_timers函数static inline voi 阅读全文

posted @ 2011-08-24 15:15 M-book 阅读(385) 评论(0) 推荐(0) 编辑

摘要: 3.3 添加或删除软件时钟 在了解了软件时钟的数据组织关系之后,现在来看一下如何添加以及删除一个软件时钟。 3.3.1 添加软件时钟 在 Linux 内核中要添加一个软件时钟,首先必须分配 struct timer_list 类型的变量,然后调用函数 add_timer() 将该软件时钟添加到相应调用 add_timer 函数的 CPU 的 base 中。 Add_timer 是对函数 __mod_timer() 的一层包装。函数 __mod_timer() 的代码如清单3-2: 清单3-2 __mod_timer 函数int __mod_timer(struct timer_list *t. 阅读全文

posted @ 2011-08-24 15:12 M-book 阅读(329) 评论(0) 推荐(0) 编辑

摘要: 3 软件时钟处理 这里所说“软件时钟”指的是软件定时器( Software Timers ),是一个软件上的概念,是建立在硬件时钟基础之上的。它记录了未来某一时刻要执行的操作(函数),并使得当这一时刻真正到来时,这些操作(函数)能够被按时执行。举个例子说明:它就像生活中的闹铃,给闹铃设定振铃时间(未来的某一时间)后,当时间(相当于硬件时钟)更新到这个振铃时间后,闹铃就会振铃。这个振铃时间好比软件时钟的到期时间,振铃这个动作好比软件时钟到期后要执行的函数,而闹铃时间更新好比硬件时钟的更新。 实现软件时钟原理也比较简单:每一次硬件时钟中断到达时,内核更新的 jiffies ,然后将其和软件时钟的到 阅读全文

posted @ 2011-08-24 14:26 M-book 阅读(323) 评论(0) 推荐(0) 编辑

摘要: 2.2.2 运作机制 通知链的运作机制包括两个角色: 1被通知者:对某一事件感兴趣一方。定义了当事件发生时,相应的处理函数,即回调函数。但需要事先将其注册到通知链中(被通知者注册的动作就是在通知链中增加一项)。 2通知者:事件的通知者。当检测到某事件,或者本身产生事件时,通知所有对该事件感兴趣的一方事件发生。他定义了一个通知链,其中保存了每一个被通知者对事件的处理函数(回调函数)。通知这个过程实际上就是遍历通知链中的每一项,然后调用相应的事件处理函数。 包括以下过程: 1通知者定义通知链 2被通知者向通知链中注册回调函数 3当事件发生时,通知者发出通知(执行通知链中所有元素的回... 阅读全文

posted @ 2011-08-24 14:15 M-book 阅读(363) 评论(0) 推荐(0) 编辑

摘要: 【同考网·计算机考试】2008-9-16来源:中国IT实验室 在 Linux 操作系统中,很多活动都和时间有关,例如:进程调度和网络处理等等。所以说,了解 Linux 操作系统中的时钟处理机制有助于更好地了解 Linux 操作系统的运作方式。本文分析了 Linux 2.6.25 内核的时钟处理机制,首先介绍了在计算机系统中的一些硬件计时器,然后重点介绍了 Linux 操作系统中的硬件时钟和软件时钟的处理过程以及软件时钟的应用。最后对全文进行了总结。 1 计算机系统中的计时器 在计算机系统中存在着许多硬件计时器,例如 Real Timer Clock ( RTC )、Time Stam 阅读全文

posted @ 2011-08-24 14:11 M-book 阅读(283) 评论(0) 推荐(0) 编辑

摘要: Sailor_forever sailing_9806@163.com转载请注明【摘要】本文详解了Linux内核的定时器实现机制。具体分析了定时器的分级组织结构,以及在此基础之上的插入、 更新、扫描执行等过程。其动态刷新维护的机制值得借鉴。然后介绍了内核定时器相关的API。【关键字】内核定时器,分级结构,定时器迁移刷 新,DEFINE_TIMER,init_timer,setup_timer,add_timer,mod_timer,del_timer1 内核定时器概述Linux内核2.4版中去掉了老版本内核中的静态定时器机制,而只留下动态定时器。动态定时器与静态定时器这二个概念是相对于Linu 阅读全文

posted @ 2011-08-24 13:50 M-book 阅读(1103) 评论(0) 推荐(0) 编辑