亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? (ldd) ch06-時間流(轉載).txt

?? 獻給ARM初學者
?? TXT
?? 第 1 頁 / 共 4 頁
字號:
(LDD) Ch06-時間流(轉載)
       
       
      第6章 時間流
       
       
      至此,我們知道怎樣寫一個特性比較完全的字符模塊了。我們將在后面幾章陸續討論驅
      動程序可以訪問的一些內核資源。本章,我們先來看看內核代碼是如何對時間問題進行
      處理的。該問題包括(按復雜程度排列):
       
       
       
      l        如何獲得當前時間
       
       
       

       
      l        如何將操作延遲指定的一段時間
       
       
       
      l        如何調度函數到指定的時間后異步執行
       
      內核中的時間間隔
      我們首先要涉及的是時鐘中斷,操作系統通過時鐘中斷來確定時間間隔。時鐘中斷的發
      生頻率設定為HZ,HZ是一個與體系結構無關的常數,在文件<linux/param.h>中定義。至
      少從2.0版到2.1.43版,Alpha平臺上Linux定義HZ的值為1024,而其他平臺上定義為100
       
       
       
      當時鐘中斷發生時,jiffies值就加1。因此,jiffies值就是自操作系統啟動以來的時鐘
      滴答的數目;jiffies在頭文件<linux/sched.h>中被定義為數據類型為unsigned long
      volatile (32位無符號長整型)的變量,因此連續累加一年又四個多月后就會溢出(假定H
      Z=100,1個jiffies等于1/100秒,jiffies可記錄的最大秒數為42949672.96秒,約合1.3
      8年)。如果你打算連續運行Linux一年又四個多月以上,你最好買臺Alpha,那么,就是
      跑五億年也不會溢出了-Alpha機器上jiffies有64位。我是無法準確地告訴你jiffies溢
      出時會發生些什么的,我可沒有那么長的時間來等這件事發生。
       

       
       
       
      如果你修改HZ值后重編譯內核,在用戶空間你不會注意到有什么不同。盡管jiffies值以
      不同的步長增長,但一切似乎還正常。會產生更多的中斷,系統開銷更大了,但是因為
      處理器調度得更頻繁了,系統會很不穩定。
       
       
       
      我在我的PC上測試了一些jiffies值:在100Hz時,系統的響應很慢;100Hz是缺省值;在
      1kHz時,系統跑的相當慢,但響應得很快;在10kHz時,系統極慢;在50kHz時,系統已
      經令人無法忍受了。修改中斷頻率還有副作用,jiffies值溢出要花的時間不同了(10kHz
      的時鐘頻率下,只要五天),BogoMips值的計算精度也不同了*。而且還有一些別處都沒
      提及的硬件上的限制。例如,19是PC上時鐘頻率的能設的最小值,其他體系結構上也存
      在著類似的限制。
       
       
       
      此外,在使用模塊時還要小心。如果你改變了HZ的定義,你必須重新編譯和安裝你使用
      的所有模塊。內核中一切都與HZ值有關,包括模塊。我是在增加了HZ值因而無法雙擊鼠
      標后,發現到這一點的。
       
       

       
       
      總而言之,時鐘中斷的最好方法是保留HZ的缺省值,因為我們可以完全相信內核的開發
      者們,他們一定已經為我們挑選了最佳值。關于本專題的更多信息可參見頭文件<linux/
      timex.h>。
       
      獲取當前時間
             內核一般通過jiffies值來獲取當前時間。盡管該數值表示的是自上次系統啟動
      到當前的時間間隔,但因為驅動程序的生命期只限于系統的運行期(uptime),所以也是
      可行的。驅動程序利用jiffies的當前值來計算不同事件間的時間間隔(我在kmouse模塊
      中就用它來分辨鼠標的單雙擊)。簡而言之,利用jiffies值來測量時間間隔還是很有效
      的。
       
       
       
             驅動程序一般不需要知道墻上時間,通常只有象cron和at這樣用戶程序才需要墻
      上時間。需要墻上時間的情形是使用設備驅動程序的特殊情況,此時可以通過用戶程序
      來將墻上時間轉換成系統時鐘。
       
       
       
             如果驅動程序真的需要獲取當前時間,可以使用do_gettimeofday函數。該函數
      并不返回今天是本周的星期幾或類似的信息;它是用微秒值來填充一個指向struct

      并不返回今天是本周的星期幾或類似的信息;它是用微秒值來填充一個指向struct
      timeval的指針變量。相應的原型如下:
       
       
       
      #include <linux/time.h>
       
      void do_gettimeofday(struct timeval *tv);
       
       
       
      源碼中聲明的do_gettimeofday在Alpha和Sparc之外的體系結構上有“接近微秒級的分辨
      率” ,在Alpha和Sparc上和jiffies值的分辨率一樣。Sparc的移植版本在2.1.34版的內
      核中升級了,可以支持更細粒度的時間度量。當前時間也可以通過xtime變量(類型為str
      uct timeval)獲得(但精度差些);但是,并不鼓勵直接使用該變量,因為除非關閉中斷
      ,無法原子性地訪問timeval變量的兩個域tv_sec和tv_usec。使用do_gettimeofday填充
      的timeval結構變量會更快些。
       
       
       
      令人遺憾的是,1.2版的Linux并未開放do_gettimeofday函數。如果你要獲取當前時間,
      又希望程序能夠向后兼容,你應該使用該函數下面的這個版本:
       

       
       
       
      #if LINUX_VERSION_CODE < VERSION_CODE(1,3,46)
       
      /*
       
       * 內核頭文件已經該函數是非靜態的。
       
       * 我們應先用其他名字來實現它,再 #define 它。
       
       */
       
      extern inline void redo_gettimeofday(struct timeval *tv)
       
      {
       
       unsigned long flags;
       
       
       
       save_flags(flags);
       

       
       cli();
       
       *tv=xtime;
       
       restore_flags(flags);
       
      }
       
      #define do_gettimeofday(tv) redo_gettimeofday(tv)
       
      #endif
       
       
       
             這個版本比實際的版本精度要差些,因為它只使用xtime結構的當前值,這個值
      并不會比jiffies值的粒度更細。但是,它卻能在不同的Linux平臺間移植。“實際的”
      函數是通過與體系結構相關的代碼查詢硬件時鐘來獲得更高的分辨率。
       
       
       
             獲取當前時間的代碼可見于jit("Just In Time")模塊,源文件可以從O'Reilly
      公司的FTP站點獲得。jit模塊將創建/proc/currentime文件,它以ASCII碼的形式返回它

      公司的FTP站點獲得。jit模塊將創建/proc/currentime文件,它以ASCII碼的形式返回它
      讀該文件的時間。我選擇用動態的/proc文件,是因為這樣模塊代碼量會小些-不值得為
      返回兩行文本而寫一整個設備驅動程序。
       
       
       
             如果你用cat命令在一個時鐘滴答內多次讀該文件,就會發現xtime和do_gettime
      ofday兩者的差異了:
       
       
       
      morgana%cat  /proc/currentime  /proc/currentime  /proc/currentime
       
      gettime: 846157215.937221
       
      xtime:  846157215.931188
       
      jiffies:  1308094
       
      gettime: 846157215.939950
       
      xtime:  846157215.931188
       

       
      jiffies:  1308094
       
      gettime: 846157215.942465
       
      xtime:  846157215.941188
       
      jiffies:  1308095
       
      延遲執行
      使用定時器中斷和jiffies值,時鐘滴答的整數倍的時間間隔很容易獲得,但更小的時延
      ,程序員必須通過軟件循環來獲得,這將在本節稍后處介紹。
       
       
       
      盡管我將會介紹一些很奇特的技術,但我認為最好先看些簡單的延遲實現代碼,盡管下
      面要介紹的第一種實現并不是最好的。
       
      長延遲
      如果你想將執行延遲幾個時鐘滴答或者你對延遲的精度要求不高(比如,你想延遲整數數
      目的秒數),最簡單的實現(最笨的)如下,也就是忙等待:
       
       

       
       
      unsigned long j=jiffies+jit_delay*HZ;
       
       
       
      while (jiffies<j)
       
       /* 什么也不做 */
       
       
       
      這種實現當然要避免*。我在這提到它只是因為有時你可以運行這段代碼來更好地理解其
      他實現(在本章稍后處我會說明如何利用忙等待來做測試)。
       
       
       
      還是先看看這段代碼是如何工作的。因為內核的頭文件中jiffies被聲明為volatile型變
      量,每次C代碼訪問它時都會重新讀取它,因此該循環可以起到延遲的作用。盡管也是“
      正確”的實現,但這個忙等待循環在延遲期間會鎖住整臺計算機;因為調度器不會中斷
      運行在內核空間的進程。而且當前的內核實現為不可重入的,因此內核中的忙等待循環
      將會鎖住一臺SMP機器的所有處理器。
       

       
       
       
      更糟糕的是,如果在進入循環之前關閉了中斷,jiffies值就不會得到更新,那么while
      循環的條件就永真。你將不得不按下大紅按鈕(指冷啟動)。
       
       
       
      這種延遲和下面的幾種延遲方法都在jit模塊中實現了。由該模塊創建的所有/proc/jit*
      文件每次被讀時都延遲整整1秒。如果你想測試忙等待代碼,可以讀/proc/jitbusy文件
      ,當該文件的read方法被調用時它將進入忙等待循環,延遲1秒;而象dd
      if=/proc/jitbusy bs=1這樣的命令每次讀一個字符就要延遲1秒。
       
       
       
      可以想見,讀/proc/jitbusy文件會大大影響系統性能,因為此時計算機要到1秒后才能
      運行其他進程。
       
       
       
      更好的延遲方法如下,它允許其他進程在延遲的時間間隔內運行,盡管這種方法不能用
      于實時任務或者其他時間要求很嚴格的場合:
       

       
       
       
      while (jiffies<j)
       
        schedule();
       
       
       
             這個例子和下面各例中的變量j應是延遲到達時的jiffies值,在忙等待時一般就
      是象這樣使用的。
       
       
       
             這種循環(可以通過讀/proc/jitsched文件來測試它)延遲方法還不是最優的。系

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷综合久久久久中文一区二区 | 成人高清免费观看| 青青草97国产精品免费观看无弹窗版| 综合久久久久久| 国产精品人妖ts系列视频| xvideos.蜜桃一区二区| 538在线一区二区精品国产| 色呦呦一区二区三区| 色婷婷亚洲综合| 色视频一区二区| 一本久久a久久免费精品不卡| av电影一区二区| 成人在线视频一区二区| 从欧美一区二区三区| 成人美女在线观看| 99国产精品久久久久久久久久| 成人免费看片app下载| 一本久久a久久免费精品不卡| 日本乱人伦aⅴ精品| 欧美日韩高清不卡| 日韩欧美国产午夜精品| 精品精品欲导航| 国产日产精品1区| 国产精品久久久久久福利一牛影视| 国产精品无圣光一区二区| ...中文天堂在线一区| 亚洲欧美韩国综合色| 五月天欧美精品| 九色|91porny| 99热精品国产| 欧美精品第1页| 国产亚洲综合av| 亚洲靠逼com| 美女免费视频一区二区| 风间由美性色一区二区三区| 色久优优欧美色久优优| 337p亚洲精品色噜噜狠狠| 久久综合一区二区| 亚洲精品国产一区二区三区四区在线 | 精品蜜桃在线看| 国产欧美视频在线观看| 一区二区三区四区乱视频| 奇米色一区二区| 99久久精品国产一区二区三区| 色美美综合视频| 26uuuu精品一区二区| 亚洲午夜av在线| 国产成人精品aa毛片| 欧美精品18+| 亚洲欧洲国产日韩| 麻豆精品新av中文字幕| 在线亚洲高清视频| 久久久久久久久蜜桃| 婷婷成人综合网| 99re免费视频精品全部| 久久午夜色播影院免费高清| 亚洲成年人网站在线观看| 成人精品一区二区三区四区| 日韩一二在线观看| 亚洲一区二区中文在线| 国产成人免费在线观看不卡| 777午夜精品视频在线播放| 国产精品福利电影一区二区三区四区| 日本91福利区| 91久久精品日日躁夜夜躁欧美| 久久免费看少妇高潮| 久久狠狠亚洲综合| 欧美久久高跟鞋激| 亚洲综合另类小说| 不卡一区二区中文字幕| 欧美精品一区二区三区在线播放 | 日韩视频永久免费| 亚洲手机成人高清视频| 国产一区二区剧情av在线| 日韩午夜av电影| 亚洲国产一区在线观看| 色综合天天综合在线视频| 国产日产精品1区| 国产精品乡下勾搭老头1| 久久久久国产精品麻豆| 国产一区二区三区四区五区美女| 日韩欧美激情在线| 日韩二区在线观看| 51精品国自产在线| 日韩黄色片在线观看| 欧美日韩不卡在线| 日本不卡视频一二三区| 日韩欧美国产精品一区| 男女性色大片免费观看一区二区 | 国产午夜亚洲精品午夜鲁丝片| 久久国产婷婷国产香蕉| 久久久久久日产精品| 国产永久精品大片wwwapp| 国产欧美精品一区二区色综合朱莉| 国产综合色视频| 国产精品久久久久国产精品日日| 成人国产精品免费观看| 亚洲欧美日韩人成在线播放| 欧美综合一区二区三区| 奇米色777欧美一区二区| 久久久久国产精品麻豆| www.在线欧美| 五月天婷婷综合| 久久久久综合网| 91女厕偷拍女厕偷拍高清| 亚洲专区一二三| 日韩欧美一二区| 不卡av在线免费观看| 亚洲午夜精品网| 久久久久久电影| 在线观看国产91| 久久99九九99精品| 亚洲特级片在线| 欧美一区二区在线观看| 成人av在线电影| 亚洲h在线观看| 精品久久人人做人人爰| 色综合久久中文字幕| 日韩电影在线一区| 日韩美女精品在线| 日韩欧美在线不卡| 色综合天天狠狠| 国产最新精品免费| 亚洲va韩国va欧美va精品| 亚洲国产精品v| 91麻豆精品国产| eeuss鲁片一区二区三区| 日本女优在线视频一区二区| 18欧美乱大交hd1984| 日韩一区二区在线观看| 欧美主播一区二区三区美女| 国产精品18久久久久久久久久久久 | 亚洲影院理伦片| 久久久精品国产免费观看同学| 欧美亚洲国产一区二区三区va| 国产激情精品久久久第一区二区 | 国产成人在线影院| 日韩一区欧美二区| 亚洲免费在线观看视频| 日本一区二区久久| 日韩欧美一区二区不卡| 在线这里只有精品| 99视频精品免费视频| 国产综合色在线| 久久99国产精品久久99果冻传媒| 亚洲电影一区二区| 亚洲欧洲日韩在线| 欧美国产欧美亚州国产日韩mv天天看完整| 91精品国产综合久久精品app| 一本色道久久综合亚洲91| 高清在线不卡av| 国产精品一二一区| 福利电影一区二区| 国产a级毛片一区| 高清不卡在线观看av| 国产精品69久久久久水密桃| 久久99久久精品欧美| 国内一区二区在线| 国内精品不卡在线| 国产大陆精品国产| 懂色av一区二区三区免费看| 国产一区二区三区免费观看| 国内精品在线播放| 国产高清久久久| 成人av中文字幕| 色婷婷精品久久二区二区蜜臀av | 日本三级亚洲精品| 日韩和欧美一区二区三区| 婷婷开心久久网| 久草这里只有精品视频| 国产一区二区三区四| 成人激情电影免费在线观看| 成人激情免费网站| 在线看国产一区| 欧美日韩免费观看一区二区三区| 欧美日本视频在线| 精品久久久久一区| 国产三级一区二区三区| 国产精品二三区| 天堂影院一区二区| 狠狠色狠狠色综合| www.av亚洲| 欧美日韩精品免费| 久久众筹精品私拍模特| 国产精品乱人伦| 亚洲第一在线综合网站| 久久精品国产77777蜜臀| 成人精品一区二区三区中文字幕| 91九色最新地址| 精品日韩在线一区| 亚洲欧洲日韩综合一区二区| 无码av中文一区二区三区桃花岛| 久久99国产精品久久| 色8久久人人97超碰香蕉987| 日韩免费电影一区| 国产精品黄色在线观看 | 日韩欧美国产精品一区| 国产精品久久久久一区二区三区| 亚洲成人av在线电影| 成人av在线一区二区三区|