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 閱讀(529) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄linux

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

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 镇江市| 壶关县| 桦南县| 八宿县| 崇州市| 安庆市| 丽江市| 神池县| 新郑市| 浪卡子县| 邹平县| 曲麻莱县| 卢氏县| 通江县| 蒙城县| 商水县| 上蔡县| 巴东县| 湘阴县| 姜堰市| 广灵县| 乌兰浩特市| 随州市| 辉南县| 长治市| 错那县| 金溪县| 深州市| 类乌齐县| 天全县| 龙南县| 吉木萨尔县| 宁强县| 厦门市| 临澧县| 淳化县| 布尔津县| 许昌市| 旺苍县| 乡宁县| 武汉市|