1.一種Windows操作系統環境下可調速定時器的實現方法,包括以下步驟:
步驟一、用戶態接口提供:選用APIC定時器,提供一組用戶態接口;
步驟二、用戶態接口封裝:將調速功能和時間相關函數接口封裝為動態鏈接庫,供Windows操作系統中的應用程序使用;
步驟三、動態鏈接庫加載:應用程序加載所述動態鏈接庫,實現所述用戶態接口的調用;
步驟四、新周期值傳入內核:應用程序通過調用所述動態鏈接庫中的用戶態接口,將調整后的APIC定時器周期以DeviceIoControl或者共享內存的方式傳入內核;
步驟五、APIC定時器周期更改:將所述步驟四調整后的APIC定時器周期賦值給初始計數寄存器,實現APIC定時器的周期調整,其中,初始計數寄存器進行了設置,具體設置包括:初始計數寄存器設定公式:計數值=APIC定時器周期×CPU外頻×時間單位/1000,往地址0xFEE00380寫入計數值,設置初始計數寄存器。
2.如權利要求1所述的Windows操作系統環境下可調速定時器的實現方法,其中,調速功能包括:時間速率控制、定時器時間凍結和解凍功能,時間速率控制實現步驟包括:往地址0xFEE00380中寫入利用初始計數寄存器設定公式計算所得計數值即可實現1倍速;往0xFEE00380中寫入0.1×計數值即可實現10倍速,往0xFEE00380中寫入10×計數值即可實現0.1倍速;定時器時間凍結實現步驟包括:保存地址0xFEE00380中數據并往地址0xFEE00380寫入0,設置初始計數寄存器為0;解凍功能實現步驟包括:往地址0xFEE00380寫入凍結時保存的數值。
3.如權利要求1所述的Windows操作系統環境下可調速定時器的實現方法,其中,所述步驟二中,時間相關函數實現授時功能和任務睡眠功能,授時功能實現步驟包括:通過CreateFile函數加載驅動,通過DeviceIoControl函數或者共享內存獲取調度器中的系統時間,返回獲取的系統時間;任務睡眠功能實現步驟包括:獲取當前線程ThreadId作為后續掛起、喚醒操作的操作對象,計算任務釋放時間,將當前任務線程控制塊TCB插入讓渡隊列Yield_List中,其中,任務釋放時間=定時器系統時間+睡眠時間。
4.如權利要求1所述的Windows操作系統環境下可調速定時器的實現方法,其中,APIC定時器進行了相關設置,具體設置包括:Local APIC含有4個用于產生時鐘中斷的寄存器:分頻寄存器、初始計數寄存器、當前計數寄存器與本地向量表寄存器,分頻寄存器用來表示當前系統時間基準和系統總線的倍數關系,將往地址0xFEE003E0寫入0xB,將分頻寄存器設置為1;APIC定時器的計數模式設置:通過本地向量表寄存器設置為單次模式或者周期模式,此處設置為周期模式,在周期模式下,當前計數寄存器自動從初始計數寄存器載入計數值,然后以總線頻率開始遞減,當計數達到0時,觸發本地向量表寄存器中存儲的中斷向量并根據中斷向量從中斷向量表中調用中斷處理函數,然后再次載入初始計數寄存器中數值,往地址0xFEE00320寫入0x300e2,使其指向對應中斷處理函數并設置為周期模式。
5.如權利要求1所述的Windows操作系統環境下可調速定時器的實現方法,其中,APIC定時器具有高精度特性,其高精度特性通過以下步驟實現:設置APIC定時器:設置初始計數寄存器、分頻寄存器和本地向量表寄存器,使其能產生微秒級的時鐘信號供調度器使用;內核態函數接口封裝:借助于系統服務描述符表,利用已知的Windows接口特征碼,搜索系統內存指令,獲取調度器所需的函數地址,并根據系統函數原型,利用內聯匯編進行調用,供調度器使用;實現調度器:利用上一步所封裝的內核態函數接口,完成調度器的編寫,在調度器內維護定時器時間和任務隊列。
6.如權利要求5所述的Windows操作系統環境下可調速定時器的實現方法,其中,調度器內維護定時器時間和任務隊列中,所述調度器實現的具體步驟包括:通過用戶態接口將需要周期性喚醒的任務的線程控制塊TCB插入讓渡隊列Yield_List并計算任務喚醒時間;系統時間增加APIC周期時間;遍歷讓渡隊列Yield_List,一旦發現存在任務就通過掛起函數地址掛起該任務,并將該任務線程控制塊TCB插入等待隊列Waiting_List;遍歷等待隊列Waiting_List檢查是否有任務已經到達喚醒時間,如果到達釋放時間,就將該任務線程控制塊TCB從等待隊列Waiting_List中刪除并插入就緒隊列Ready_List;遍歷就緒隊列Ready_List檢查是否有任務需要喚醒,一旦隊列中存在任務,就通過恢復函數地址將該任務喚醒。
7.如權利要求6所述的Windows操作系統環境下可調速定時器的實現方法,其中,掛起函數地址為NtSuspendThread函數地址,恢復函數地址為NtResumeThread函數地址。
8.如權利要求6所述的Windows操作系統環境下可調速定時器的實現方法,其中,所述調度器通過APIC定時器產生高精度時鐘信號中斷插入延遲過程調用DPC來觸發。