freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

wdm驅(qū)動程序設(shè)計-在線瀏覽

2024-08-27 18:52本頁面
  

【正文】 試結(jié)果表明鎖仍被占用,程序?qū)⒃谝粋€小的循環(huán)內(nèi)重復(fù)這個“測試并設(shè)置 (testandset)”操作,即開始“自旋”。 使用自旋鎖時的注意事項 ? 第一,如果一個已經(jīng)擁有某個自旋鎖的 CPU想第二次獲得這個自旋鎖,則該 CPU將死鎖 (deadlock)。所以,為了避免影響性能,你應(yīng)該在擁有自旋鎖時做盡量少的操作,因為此時某個 CPU可能正在等待這個自旋鎖。 如何使用自旋鎖 ? 首先,在 非分頁內(nèi)存 中為一個 KSPIN_LOCK對象分配存儲空間。 typedef struct _DEVICE_EXTENSION { ... KSPIN_LOCK QLock。 NTSTATUS AddDevice(...) { PDEVICE_EXTENSION pdx = ...。pdxQLock)。 NTSTATUS DispatchSomething(...) { KIRQL oldirql。 KeAcquireSpinLock(amp。oldirql)。pdxQLock, oldirql)。pdxQLock)。pdxQLock)。 ? 內(nèi)核同步對象僅影響 OS線程調(diào)度器的調(diào)度動作,因此一般只在低于 DISPATCH_LEVEL級的代碼中用于阻塞線程。 ? 在“ 任意線程上下文 ”調(diào)用 等待原語 只會阻塞一個“無辜”的線程。 ? 非任意線程上下文的例子: 1. 設(shè)備的最高級驅(qū)動程序的 IRP處理函數(shù)可以確切地知道它執(zhí)行在發(fā)出該 I/O請求的應(yīng)用程序線程的上下文中。 3. 在你自己創(chuàng)建的內(nèi)核模式系統(tǒng)線程中。 常用的內(nèi)核同步對象 對象 數(shù)據(jù)類型 描述 Event(事件 ) KEVENT 阻塞一個線程直到檢測到某事件發(fā)生 Semaphore(信號燈 ) KSEMAPHORE 控制多個線程對共享資源的訪問 Mutex(互斥 ) KMUTEX 執(zhí)行到關(guān)鍵代碼段時,禁止其它線程執(zhí)行該代碼段 Timer(定時器 ) KTIMER 推遲線程執(zhí)行一段時期 Thread(線程 ) KTHREAD 阻塞一個線程直到另一個線程結(jié)束 在單同步對象上等待 ? 在任何時刻,任何對象都處于兩種狀態(tài)中的一種: 信號態(tài)(signaled)或 非信號態(tài) (not signaled) 。 ASSERT(KeGetCurrentIrql() = DISPATCH_LEVEL)。 NTSTATUS status = KeWaitForSingleObject(object, WaitReason, WaitMode, Alertable, amp。 KeWaitForSingleObject參數(shù)含義 ? object 指向要等待的對象,它應(yīng)該指向一個上面表中列出的同步對象。 ? WaitReason 是一個純粹建議性的值, KWAIT_REASON枚舉型,一般取值為 Executive。一般取值為 KernelMode 。 ? timeout 是一個 64位超時值的地址,單位為 100納秒。負數(shù)代表相對于當前時間的時間間隔。指定為 NULL代表無限期等待。timeout)。即你調(diào)用 KeWaitForSingleObject時,對象或者已經(jīng)進入信號態(tài),或者在等待中進入信號態(tài)使等待返回。如果指定 0超時,則函數(shù)將立即返回。 ? 其它兩個返回值 STATUS_ALERTED和STATUS_USER_APC表示等待提前終止,對象未進入信號態(tài) 。 ? WaitType是枚舉類型,其值可以為 WaitAll或 WaitAny,它指出你是等到所有對象都進入信號態(tài),還是只要有一個對象進入信號態(tài)就可以。 不需要你對其進行初始化。 LARGE_INTEGER timeout。timeout, waitblocks)。 ? 如果指定了 WaitAny,則返回值在數(shù)值上等于進入信號態(tài)的對象在 objects數(shù)組中的索引 。可以認為返回值等于 STATUS_WAIT_0加上數(shù)組索引。 if (NT_SUCCESS(status)) { iSignalled = status STATUS_WAIT_0。 ? 與該對象相關(guān)的內(nèi)核服務(wù)函數(shù)如下: 服務(wù)函數(shù) 功能 KeInitializeEvent 初始化事件對象 KeSetEvent 把事件設(shè)置為信號態(tài),返回前一個狀態(tài) KeResetEvent 把事件設(shè)置為非信號態(tài),返回前一個狀態(tài) KeClearEvent 把事件設(shè)置為非信號態(tài),不報告以前的狀態(tài)。 通知事件與同步事件 ? 通知事件 (notification event)有這樣的特性,當它進入信號態(tài)后,它將一直處于信號態(tài)直到明確地把它重置為非信號態(tài)。 ? 同步事件 (synchronization event):只要有一個線程被釋放,該事件就被自動重置為非信號態(tài)。 KEVENT event。 ? EventType是一個枚舉值,可以為 NotificationEvent或SynchronizationEvent。 KeSetEvent函數(shù) ? 調(diào)用 KeSetEvent
點擊復(fù)制文檔內(nèi)容
范文總結(jié)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1