网站大量收购闲置独家精品文档,联系QQ:2885784924

Kernel Mode下的thread 同步物件.PPT

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Kernel Mode下的thread 同步物件

Thread Synchronization with Kernel object 為何要使用 Kernel Object 來做同步? User Mode Synchronization的好處 速度快 User Mode 的限制是 只能處理單一 Process 內的 threads之間同步 在單一CPU情況下, 你不能設定等待時間 Interlocked 家族函式不能讓 thread 進入 wait 狀態 Kernel Object 的性質 每一個核心物件都有紀錄狀態 Process object 被建立 ? process handle non-signal 當 Process 終止時 ? process handle signal 希望等待某個 Process terminated, 怎麼辦? 只要檢查該Process是否 signal 即可 有哪些 Wait functions 呢? 等待時間設定為 INFINITE是危險的 若等待的 Object 永遠不會 Signal 則會造成 dead-lock (永遠不會醒來) 如果我要等待多個物件怎麼辦? 使用 WaitForMultiObject(…) 最多只能等待 64 個物件 如何得知是那一個 Object Signal ? 有哪些 Kernel Object 支援 signal? Processes Thread Jobs Files Console input File change notifications Events Waitable timers Semaphores Mutexes 考慮下面的情況 若有兩條threads, 同時執行下面的程式碼 利用 Event Object 作行程間的同步 策略是 主程式建立 Event Object Child Process 等待該 Event Signal 後才做事 簡單同步範例 最簡單的範例: CreateWaitableTimer 最簡單的範例: OpenWaitableTimer 最簡單的範例: 程式架構 那麼要如何設定時間呢? 我們使用 SYSTEMTIME 指定年月日 將 System Time 轉成適當的參數 Windows 中的 Time 觀念 FileTime 基本觀念 The system records file times whenever applications create, access, and write to files 例外: NT FAT create time , write time and access time 使用不同的 time resolution NTFS access time 的 resolution = 1 hour 如何取得指定檔案的 file time ? 呼叫 GetFileTime 函式: 他會將資料複製到 FILETIME 的結構中 FindFirstFile , FindNextFile: 會將資料複製到 WIN32_FIND_DATA 結構中 FileTime 基本觀念 設定 file time? 呼叫 SetFileTime 函式 比較不同檔案的 time? 呼叫 CompareFileTime 函式 日光節約時間概念 (Daylight Saving Time ) 也叫做夏令時(Summer Time ) 將標準時撥快一小時,分秒不變,恢復時再撥慢一小時。 首先提倡者1908年英國議會 Data Alignment 觀念 當你要存取的資料所在位址與資料大小相除餘數 != 0,就會出現這個問題! char 型態絕不會出現 data alignment 問題 考慮下面 DWORD 情況 Data Alignment 觀念 如 32-bit CPU 一次讀資料從位址 0 ~ 3 到暫存器中, 下次讀資料從位址 4~7 絕不會一次由位址2~5 把資料放到暫存器中, 因為 byte 2~5 分別在兩個 word 中 如果要讀位址 2~5 的資料,必須 讀取 0 ~ 3 與 3~7 並且做 shift 與 extract 的動作 Data Alignment 所造成的問題 CPU必須進行數次記憶體存取 程式效能降低 移植程式時會遇到問題 X86 會自動修正這個問題, Alpha CPU 會丟出 INT 17h 中斷通知 OS 討論資源的問題 當我們可存取的資源有限時,有甚麼好方法進行個 thread 間的管理呢? 程式設計的流程 視窗架構 Mutex Kernel Object Introduction to Mutex 保證只有一條 thread 可以獨佔資源 具有擁有性

文档评论(0)

xiaozu + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档