《由简至繁》PPT课件

《由简至繁》PPT课件

ID:39631953

大小:244.34 KB

页数:34页

时间:2019-07-07

《由简至繁》PPT课件_第1页
《由简至繁》PPT课件_第2页
《由简至繁》PPT课件_第3页
《由简至繁》PPT课件_第4页
《由简至繁》PPT课件_第5页
资源描述:

《《由简至繁》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Chapter6時序1介紹由簡至繁瞭解核心的時序(timing)認識目前時間(currenttime)將作業的時間點延遲到一定時間之後才開始將非同步函式(asynchronousfunction)安排到一定時間之後才開始作用26.1核心的計時間隔中斷—CPU暫停目前工作,然後執行ISR(InterruptServiceRoutine)來處理中斷.(CH9)計時器中斷,固定間隔觸發的中斷事件,核心依據HZ(定義在)的值來設定間隔長度,硬體平台不同,值也不同.每次發生計時器中斷,jiffies變數的值就會被遞增一次,宣告在

2、x/sched.h>,型別為unsignedlongvolatile,核心會確保溢位之後還能正確運作,驅動程式不必擔心jiffies溢位.36.1.1處理器特有的暫存器大多數系統上,由於指令時序的不可預測性(因為有指令排程、分支預測、快取記憶體等因素),時脈計數器成為唯一可靠的精密計時工具.時脈計數器的設計隨平台而異,不一定可寫,長度也不一定是32bits或64bits,無論是否可歸零,建議不要如此,因為可以使用無號變數來計算差值.最知名的時脈計數暫存器是x86Pentium系列的TSC(TimeStampCounter),為計算CPU時脈週期數的64bit

3、s的暫存器,kernel&user-space都可以讀取.引入(Machine-SpecificRegisters)之後,可使用下列巨集rdtsc(low,high);rdtscl(low);46.1.1處理器特有的暫存器(Cont.)量測指令本身執行時間unsignedlongini,end;rdtscl(ini);rdtscl(end);printk(“timelapse:%li”,end-ini);與平台無關(適用各種平台)的函式用來替代rdstc()#includecycles_tget_cyc

4、les(void);//無時脈計數,則回傳TSC暫存器低半段的值,因為可避免多暫存器操作的問題且時脈計數器主要用途為測量極短的時間如何內插組語指令(inilineassembly)將x86的rdtscl()移植到MIPS系統組語指令Movefromcoprocessor0#definerdtscl(dest)__asm____volatile__(“mfc0%0,$9;nop”:“=r”(dest))內插組語的語法相當有威力,但是有點複雜,特別是在那些會限定暫存器用途的平台上(x86系列).完整語法請參考gcc的說明文件.56.2取得目前時間在Kernel

5、-space的程式可以從jiffies的值取得目前時間jiffies從開機到至今的時間,與驅動程式生命期無關,也不可能跨越開關機時間.驅動程式可利用jiffies的現值來估算兩事件之間的間隔時間,如mousedriver驅動程式不需要知道牆鐘時刻(wall-clocktime),若真的需要靠自己處理當時的時刻,do_gettimeofday()或許可派上用場.此函式並非直接告知今天是星期幾,而是將一般的秒與微秒填入一個structtimeval,原型如下#includevoiddo_gettimeofday(structtimev

6、al*tv);66.2取得目前時間(Cont.)從xtime變數同樣也可取得目前時刻,但這是不被鼓勵的行為,因為無法連動(atomically)取得timevalue,結構內的tv_sec與tv_usec欄位值,除非暫停掉中斷.若不太講求精準度,2.2版核心提供一個快又安全的函式來取得目前時刻:voidget_fast_time(structtimeval*tv);範例jit(JustInTime)模組,它不會產生裝置節點,而是直接將它取得的時刻資訊透過/proc/currentime傳到user-space.cat/proc/currentime/proc

7、/currentime/proc/currentime76.3延遲執行驅動程式通常需要拖延某段程式碼的開始執行時間—通常是為了讓硬體有足夠充裕的時間完成某些工作需要考慮的重點之一,是延遲時間是否超過一個時脈單位較長的延遲,可以利用系統時鐘來計時,較短的延遲,則通常以軟體迴圈來應付86.3.1長期延遲(1/4)最簡單也是最蠢的做法,稱為忙著等待(busywaiting):unsignedlongj=jiffies+jit_delay*HZ;while(jiffies

8、(不使用快取技術).在延遲期間,處理器是被鎖死的,因

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。