qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          Linux的動態定時器-時間輪

           定時器—有時也稱為動態定時器或內核定時器—是管理內核時間的基礎。定時器是一種軟件功能,即允許在將來的某個時刻,函數在給定的時間間隔用完時被調用。注意的是定時器并不會周期運行,它在超時后就自行銷毀,這也是定時器被稱為動態定時器的一個原因。動態定時器不斷地創建和銷毀,而且它的運行次數也不受限制。
            定時器在內核代碼中屬于一個基礎組件。要想完全弄清楚linux2.6中內核定時器的實現,得先從初始化開始。
            在start_kernel(void)-->init_timers(void)
          void __init init_timers(void)
          {
          int err = timer_cpu_notify(&timers_nb, (unsigned long)CPU_UP_PREPARE,
          (void *)(long)smp_processor_id());
          init_timer_stats();
          BUG_ON(err == NOTIFY_BAD);
          register_cpu_notifier(&timers_nb);
          open_softirq(TIMER_SOFTIRQ, run_timer_softirq);
          }
          在timer_cpu_notify(&timers_nb,(unsigned long)CPU_UP_PREPARE,
          (void*)(long)smp_processor_id());
            中執行
            init_timers_cpu(cpu) //初始化本cpu中的timers
            初始化的主要代碼是:
          spin_lock_init(&base->lock);
          for (j = 0; j < TVN_SIZE; j++) {
          INIT_LIST_HEAD(base->tv5.vec + j);
          INIT_LIST_HEAD(base->tv4.vec + j);
          INIT_LIST_HEAD(base->tv3.vec + j);
          INIT_LIST_HEAD(base->tv2.vec + j);
          }
          for (j = 0; j < TVR_SIZE; j++)
          INIT_LIST_HEAD(base->tv1.vec + j);
          base->timer_jiffies = jiffies;
          base->next_timer = base->timer_jiffies;
            這段代碼的主體是base,base的定義是:structtvec_base *base;
            這個tvec_base是動態定時器的主要數據結構,每個cpu上有一個,它包含相應cpu中處理動態定時器需要的所有數據。為簡化分析僅考慮單cpu。給出這個數據機構:
          struct tvec_base {
          spinlock_t lock;
          struct timer_list *running_timer;
          unsigned long timer_jiffies;
          unsigned long next_timer;
          struct tvec_root tv1;
          struct tvec tv2;
          struct tvec tv3;
          struct tvec tv4;
          struct tvec tv5;
          } ____cacheline_aligned;

          posted on 2014-08-25 10:13 順其自然EVO 閱讀(532) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄linux

          <2014年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 两当县| 司法| 星子县| 安新县| 临邑县| 肇州县| 开封县| 中山市| 东至县| 桑日县| 电白县| 格尔木市| 洞口县| 吉木乃县| 瑞安市| 岳阳市| 隆昌县| 兴隆县| 闵行区| 余江县| 赤壁市| 浦北县| 仪陇县| 鱼台县| 普定县| 呈贡县| 仁寿县| 济南市| 喀喇沁旗| 宿松县| 五家渠市| 安顺市| 彭水| 蕉岭县| 涿州市| 诸城市| 陆丰市| 平远县| 沾益县| 岳普湖县| 莫力|