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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ch07s04.html

?? 介紹Linux設(shè)備驅(qū)動開發(fā)
?? HTML
?? 第 1 頁 / 共 2 頁
字號:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>7.4.&#160;內(nèi)核定時器-Linux設(shè)備驅(qū)動第三版(中文版)-開發(fā)頻道-華星在線</title>
<meta name="description" content="驅(qū)動開發(fā)-開發(fā)頻道-華星在線" />
<meta name="keywords" content="Linux設(shè)備驅(qū)動,中文版,第三版,ldd,linux device driver,驅(qū)動開發(fā),電子版,程序設(shè)計,軟件開發(fā),開發(fā)頻道" />
<meta name="author" content="華星在線 www.21cstar.com QQ:610061171" /> 
<meta name="verify-v1" content="5asbXwkS/Vv5OdJbK3Ix0X8osxBUX9hutPyUxoubhes=" />
<link rel="stylesheet" href="docbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.69.0">
<link rel="start" href="index.html" title="Linux 設(shè)備驅(qū)動 Edition 3">
<link rel="up" href="ch07.html" title="第&#160;7&#160;章&#160;時間, 延時, 和延后工作">
<link rel="prev" href="ch07s03.html" title="7.3.&#160;延后執(zhí)行">
<link rel="next" href="ch07s05.html" title="7.5.&#160;Tasklets 機制">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="navheader">
<table width="100%" summary="Navigation header">
<tr><th colspan="3" align="center">7.4.&#160;內(nèi)核定時器</th></tr>
<tr>
<td width="20%" align="left">
<a accesskey="p" href="ch07s03.html">上一頁</a>&#160;</td>
<th width="60%" align="center">第&#160;7&#160;章&#160;時間, 延時, 和延后工作</th>
<td width="20%" align="right">&#160;<a accesskey="n" href="ch07s05.html">下一頁</a>
</td>
</tr>
</table>
<hr>
</div>
<div class="sect1" lang="zh-cn">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="KernelTimers.sect"></a>7.4.&#160;內(nèi)核定時器</h2></div></div></div>
<p>無論何時你需要調(diào)度一個動作以后發(fā)生, 而不阻塞當前進程直到到時, 內(nèi)核定時器是給你的工具. 這些定時器用來調(diào)度一個函數(shù)在將來一個特定的時間執(zhí)行, 基于時鐘嘀噠, 并且可用作各類任務(wù); 例如, 當硬件無法發(fā)出中斷時, 查詢一個設(shè)備通過在定期的間隔內(nèi)檢查它的狀態(tài). 其他的內(nèi)核定時器的典型應(yīng)用是關(guān)閉軟驅(qū)馬達或者結(jié)束另一個長期終止的操作. 在這種情況下, 延后來自 close 的返回將強加一個不必要(并且嚇人的)開銷在應(yīng)用程序上. 最后, 內(nèi)核自身使用定時器在幾個情況下, 包括實現(xiàn) schedule_timeout.</p>
<p>一個內(nèi)核定時器是一個數(shù)據(jù)結(jié)構(gòu), 它指導(dǎo)內(nèi)核執(zhí)行一個用戶定義的函數(shù)使用一個用戶定義的參數(shù)在一個用戶定義的時間. 這個實現(xiàn)位于 &lt;linux/timer.h&gt; 和 kernel/timer.c 并且在"內(nèi)核定時器"一節(jié)中詳細介紹.</p>
<p>被調(diào)度運行的函數(shù)幾乎確定不會在注冊它們的進程在運行時運行. 它們是, 相反, 異步運行. 直到現(xiàn)在, 我們在我們的例子驅(qū)動中已經(jīng)做的任何事情已經(jīng)在執(zhí)行系統(tǒng)調(diào)用的進程上下文中運行. 當一個定時器運行時, 但是, 這個調(diào)度進程可能睡眠, 可能在不同的一個處理器上運行, 或者很可能已經(jīng)一起退出.</p>
<p>這個異步執(zhí)行類似當發(fā)生一個硬件中斷時所發(fā)生的( 這在第 10 章詳細討論 ). 實際上, 內(nèi)核定時器被作為一個"軟件中斷"的結(jié)果而實現(xiàn). 當在這種原子上下文運行時, 你的代碼易受到多個限制. 定時器函數(shù)必須是原子的以所有的我們在第 1 章"自旋鎖和原子上下文"一節(jié)中曾討論過的方式, 但是有幾個附加的問題由于缺少一個進程上下文而引起的. 我們將介紹這些限制; 在后續(xù)章節(jié)的幾個地方將再次看到它們. 循環(huán)被調(diào)用因為原子上下文的規(guī)則必須認真遵守, 否則系統(tǒng)會發(fā)現(xiàn)自己陷入大麻煩中.</p>
<p>為能夠被執(zhí)行, 多個動作需要進程上下文. 當你在進程上下文之外(即, 在中斷上下文), 你必須遵守下列規(guī)則:</p>
<div class="itemizedlist"><ul type="disc">
<li><p>沒有允許存取用戶空間. 因為沒有進程上下文, 沒有和任何特定進程相關(guān)聯(lián)的到用戶空間的途徑.</p></li>
<li><p>這個 current 指針在原子態(tài)沒有意義, 并且不能使用因為相關(guān)的代碼沒有和已被中斷的進程的聯(lián)系.</p></li>
<li><p>不能進行睡眠或者調(diào)度. 原子代碼不能調(diào)用 schedule 或者某種 wait_event, 也不能調(diào)用任何其他可能睡眠的函數(shù). 例如, 調(diào)用 kmalloc(..., GFP_KERNEL) 是違犯規(guī)則的. 旗標也必須不能使用因為它們可能睡眠.</p></li>
</ul></div>
<p>內(nèi)核代碼能夠告知是否它在中斷上下文中運行, 通過調(diào)用函數(shù) in_interrupt(), 它不要參數(shù)并且如果處理器當前在中斷上下文運行就返回非零, 要么硬件中斷要么軟件中斷.</p>
<p>一個和 in_interrupt() 相關(guān)的函數(shù)是 in_atomic(). 它的返回值是非零無論何時調(diào)度被禁止; 這包含硬件和軟件中斷上下文以及任何持有自旋鎖的時候. 在后一種情況, current 可能是有效的, 但是存取用戶空間被禁止, 因為它能導(dǎo)致調(diào)度發(fā)生. 無論何時你使用 in_interrupt(), 你應(yīng)當真正考慮是否 in_atomic 是你實際想要的. 2 個函數(shù)都在 &lt;asm/hardirq.h&gt; 中聲明.</p>
<p>內(nèi)核定時器的另一個重要特性是一個任務(wù)可以注冊它本身在后面時間重新運行. 這是可能的, 因為每個 timer_list 結(jié)構(gòu)在運行前從激活的定時器鏈表中去連接, 并且因此能夠馬上在其他地方被重新連接. 盡管反復(fù)重新調(diào)度相同的任務(wù)可能表現(xiàn)為一個無意義的操作, 有時它是有用的. 例如, 它可用作實現(xiàn)對設(shè)備的查詢.</p>
<p>也值得了解在一個 SMP 系統(tǒng), 定時器函數(shù)被注冊時相同的 CPU 來執(zhí)行, 為在任何可能的時候獲得更好的緩存局部特性. 因此, 一個重新注冊它自己的定時器一直運行在同一個 CPU.</p>
<p>不應(yīng)當被忘記的定時器的一個重要特性是, 它們是一個潛在的競爭條件的源, 即便在一個單處理器系統(tǒng). 這是它們與其他代碼異步運行的一個直接結(jié)果. 因此, 任何被定時器函數(shù)存取的數(shù)據(jù)結(jié)構(gòu)應(yīng)當保護避免并發(fā)存取, 要么通過原子類型( 在第 1 章的"原子變量"一節(jié)) 要么使用自旋鎖( 在第 9 章討論 ).</p>
<div class="sect2" lang="zh-cn">
<div class="titlepage"><div><div><h3 class="title">
<a name="TheTimerAPI.sect"></a>7.4.1.&#160;定時器 API</h3></div></div></div>
<p>內(nèi)核提供給驅(qū)動許多函數(shù)來聲明, 注冊, 以及去除內(nèi)核定時器. 下列的引用展示了基本的代碼塊:</p>
<pre class="programlisting">
#include &lt;linux/timer.h&gt;
struct timer_list
{
        /* ... */
        unsigned long expires;
        void (*function)(unsigned long);
        unsigned long data;
};
void init_timer(struct timer_list *timer);
struct timer_list TIMER_INITIALIZER(_function, _expires, _data);

void add_timer(struct timer_list * timer);
int del_timer(struct timer_list * timer);
</pre>
<p>這個數(shù)據(jù)結(jié)構(gòu)包含比曾展示過的更多的字段, 但是這 3 個是打算從定時器代碼自身以外被存取的. 這個 expires 字段表示定時器期望運行的 jiffies 值; 在那個時間, 這個 function 函數(shù)被調(diào)用使用 data 作為一個參數(shù). 如果你需要在參數(shù)中傳遞多項, 你可以捆綁它們作為一個單個數(shù)據(jù)結(jié)構(gòu)并且傳遞一個轉(zhuǎn)換為 unsiged long 的指針, 在所有支持的體系上的一個安全做法并且在內(nèi)存管理中相當普遍( 如同 15 章中討論的 ). expires 值不是一個 jiffies_64 項因為定時器不被期望在將來很久到時, 并且 64-位操作在 32-位平臺上慢.</p>
<p>這個結(jié)構(gòu)必須在使用前初始化. 這個步驟保證所有的成員被正確建立, 包括那些對調(diào)用者不透明的. 初始化可以通過調(diào)用 init_timer 或者 安排 TIMER_INITIALIZER 給一個靜態(tài)結(jié)構(gòu), 根據(jù)你的需要. 在初始化后, 你可以改變 3 個公共成員在調(diào)用 add_timer 前. 為在到時前禁止一個已注冊的定時器, 調(diào)用 del_timer.</p>
<p>jit 模塊包括一個例子文件, /proc/jitimer ( 為 "just in timer"), 它返回一個頭文件行以及 6 個數(shù)據(jù)行. 這些數(shù)據(jù)行表示當前代碼運行的環(huán)境; 第一個由讀文件操作產(chǎn)生并且其他的由定時器. 下列的輸出在編譯內(nèi)核時被記錄:</p>
<pre class="screen">
phon% cat /proc/jitimer
 time delta  inirq  pid  cpu command 
 33565837  0  0  1269  0  cat 
 33565847  10  1  1271  0  sh 
 33565857  10  1  1273  0  cpp0 
 33565867  10  1  1273  0  cpp0 
 33565877  10  1  1274  0  cc1 
 33565887  10  1  1274  0  cc1  
</pre>
<p>在這個輸出, time 字段是代碼運行時的 jiffies 值, delta 是自前一行的 jiffies 改變值, inirq 是由 in_interrupt 返回的布爾值, pid 和 command 指的是當前進程, 以及 cpu 是在使用的 CPU 的數(shù)目( 在單處理器系統(tǒng)上一直為 0).</p>
<p>如果你讀 /proc/jitimer 當系統(tǒng)無負載時, 你會發(fā)現(xiàn)定時器的上下文是進程 0, 空閑任務(wù), 它被稱為"對換進程"只要由于歷史原因.</p>
<p>用來產(chǎn)生 /proc/jitimer 數(shù)據(jù)的定時器是缺省每 10 jiffies 運行一次, 但是你可以在加載模塊時改變這個值通過設(shè)置 tdelay ( timer delay ) 參數(shù).</p>
<p>下面的代碼引用展示了 jit 關(guān)于 jitimer 定時器的部分. 當一個進程試圖讀取我們的文件, 我們建立這個定時器如下:</p>
<pre class="programlisting">

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产精品一区| 欧美精品一区二区蜜臀亚洲| 久久婷婷久久一区二区三区| 午夜精品久久久久久不卡8050| 337p亚洲精品色噜噜噜| 亚洲第一成年网| 91极品美女在线| 欧美一a一片一级一片| 福利一区二区在线| av福利精品导航| 成人在线视频一区| 91在线观看高清| 欧美精品一二三区| 伊人色综合久久天天| 国产精品久99| 国产成人在线观看| 成人app软件下载大全免费| 777午夜精品免费视频| 免费观看一级特黄欧美大片| 欧美一级片免费看| 国产电影一区在线| 中文字幕在线播放不卡一区| 色综合一区二区| 天堂一区二区在线免费观看| 日韩欧美亚洲一区二区| 国产成人综合亚洲91猫咪| 最新不卡av在线| 欧美区视频在线观看| 国产精品系列在线播放| 亚洲狼人国产精品| 日韩欧美一区二区久久婷婷| 国产一区二区三区国产| 一区二区三区欧美日韩| 欧美成人女星排行榜| 91偷拍与自偷拍精品| 免费成人av资源网| 亚洲精品videosex极品| 久久女同互慰一区二区三区| 91首页免费视频| 久久99国产精品麻豆| 亚洲青青青在线视频| 国产亚洲成年网址在线观看| 欧美色大人视频| 国产成+人+日韩+欧美+亚洲| 亚洲va欧美va人人爽| 国产精品素人视频| 欧美高清hd18日本| 一本久久a久久精品亚洲| 久久国产剧场电影| 亚洲高清免费观看高清完整版在线观看| 精品国产一区久久| 欧美三级一区二区| 色综合色狠狠综合色| 国内精品免费在线观看| 日韩精品欧美成人高清一区二区| 国产精品女同互慰在线看| 日韩免费看的电影| 欧美色涩在线第一页| 99久久99久久综合| 国产成人aaaa| 国模套图日韩精品一区二区| 午夜欧美大尺度福利影院在线看| 国产精品福利影院| 欧美经典一区二区| 精品国产精品一区二区夜夜嗨| 欧美日韩一区二区三区免费看| 波多野洁衣一区| 国产精品99久久久久久似苏梦涵 | 日韩你懂的在线观看| 在线观看亚洲a| 91视频www| 成人97人人超碰人人99| 国产成a人亚洲| 国产成人免费高清| 另类小说综合欧美亚洲| 亚洲国产美国国产综合一区二区| 国产片一区二区三区| 制服.丝袜.亚洲.另类.中文| 99国产一区二区三精品乱码| 国产精品一级黄| 蜜桃视频一区二区三区| 亚洲国产裸拍裸体视频在线观看乱了| 欧美国产一区二区| 精品久久久久99| 日韩网站在线看片你懂的| 欧美精三区欧美精三区| 91精品欧美福利在线观看| 久久精品人人爽人人爽| 99久久99久久久精品齐齐| 国产·精品毛片| 成人高清视频在线观看| 91丨九色丨尤物| 欧美色图12p| 777欧美精品| 精品日韩一区二区三区| 国产色产综合产在线视频| 国产精品久久国产精麻豆99网站| ...av二区三区久久精品| 亚洲精品日日夜夜| 亚洲国产精品自拍| 韩国女主播一区| 丁香天五香天堂综合| 日本精品一区二区三区高清 | 国产高清不卡一区二区| 国产成人在线免费观看| 色偷偷一区二区三区| 欧美另类变人与禽xxxxx| 欧美大片免费久久精品三p| 欧美韩国日本不卡| 午夜久久电影网| 国产毛片精品视频| 色国产综合视频| 日韩一区二区三区在线视频| 久久久精品天堂| 亚洲一级片在线观看| 老司机午夜精品| 97精品久久久久中文字幕| 欧美区视频在线观看| 国产亚洲欧美中文| 亚洲丰满少妇videoshd| 国产一区二区三区蝌蚪| 欧美日韩在线亚洲一区蜜芽| 精品精品国产高清a毛片牛牛| 综合欧美亚洲日本| 日本视频免费一区| 色婷婷久久久综合中文字幕| 欧美sm美女调教| 综合在线观看色| 国产一区二区影院| 在线视频国内一区二区| 久久五月婷婷丁香社区| 午夜成人在线视频| av在线综合网| 亚洲精品一线二线三线无人区| 亚洲欧美日韩中文字幕一区二区三区| 麻豆91精品视频| 欧美日韩一区二区在线视频| 久久久天堂av| 日本一区中文字幕| 色天使久久综合网天天| 国产天堂亚洲国产碰碰| 水蜜桃久久夜色精品一区的特点| 成人午夜伦理影院| 精品成人免费观看| 视频一区二区国产| 在线这里只有精品| 国产精品久久久久久久浪潮网站| 久久精品国产99国产精品| 欧美在线观看一区| 亚洲欧美日韩成人高清在线一区| 国产永久精品大片wwwapp| 欧美一区二区三区免费观看视频| 国产精品二三区| 国产iv一区二区三区| 欧美成人video| 日日摸夜夜添夜夜添国产精品| 日本乱码高清不卡字幕| 国产精品乱码一区二区三区软件| 国产一区二区免费看| 欧美一区日本一区韩国一区| 亚洲综合偷拍欧美一区色| 国产又黄又大久久| 国产日产亚洲精品系列| 国产中文一区二区三区| 日韩区在线观看| 亚洲第一久久影院| 一本到高清视频免费精品| 久久久美女艺术照精彩视频福利播放| 亚洲高清久久久| 日本大胆欧美人术艺术动态| 色综合色综合色综合色综合色综合| 久久视频一区二区| 日本不卡中文字幕| 欧美色网站导航| 亚洲另类中文字| caoporm超碰国产精品| 国产精品丝袜在线| 色综合久久久久久久久久久| 中文字幕在线不卡视频| 91美女片黄在线观看| 洋洋av久久久久久久一区| 欧美亚洲禁片免费| 日韩av中文字幕一区二区| 91精品国产免费| 韩国精品一区二区| 成人欧美一区二区三区1314| 91在线视频官网| 亚洲国产精品一区二区www| 欧美日韩国产一区| 久久国产三级精品| 国产精品伦理一区二区| 色欧美日韩亚洲| 天天操天天干天天综合网| 欧美一区二区三区在| 国产精品一区二区三区网站| 国产精品午夜久久| 一本高清dvd不卡在线观看| 日本欧美加勒比视频| 欧美国产综合一区二区| 欧美影视一区在线|