2 回答

TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊
當(dāng)進(jìn)程忙于等待該內(nèi)存位置更改時(shí),中斷處理程序可以直接寫入該進(jìn)程提供的映射內(nèi)存范圍。這甚至可以在上半部分執(zhí)行,并應(yīng)為您提供盡可能短的延遲。確保提供的內(nèi)存位置已鎖定到物理內(nèi)存中,因?yàn)樵趇sr期間無法對(duì)其進(jìn)行分頁。
在數(shù)據(jù)包套接字和PACKET_MMAP中可以找到類似的方法,其中內(nèi)核和用戶空間之間的通信是通過共享內(nèi)存空間進(jìn)行的(請(qǐng)參閱內(nèi)核文檔)。
如果您不關(guān)心通過OS進(jìn)行的資源管理(因?yàn)橹挥幸粋€(gè)應(yīng)用程序在等待外部輸入),則還可以選擇直接從用戶空間(使用iopl / inb / outb和朋友)訪問硬件。

TA貢獻(xiàn)2016條經(jīng)驗(yàn) 獲得超9個(gè)贊
進(jìn)程等待內(nèi)核喚醒的標(biāo)準(zhǔn)方法是使用poll()系統(tǒng)調(diào)用,以及設(shè)備驅(qū)動(dòng)程序的中斷處理程序喚醒所有等待內(nèi)核的線程。
您的4個(gè)項(xiàng)目符號(hào)中列出的最長延遲操作正在喚醒應(yīng)用程序線程,因此,如果您需要更短的延遲,則需要喚醒線程,但要等待事件。
我使用的最低延遲機(jī)制是讓中斷在應(yīng)用程序過程中寫一個(gè)字,并讓線程讀取該字并在值更改時(shí)繼續(xù)執(zhí)行。實(shí)際上,是用戶空間和內(nèi)核空間之間的自旋鎖。當(dāng)您可以將CPU內(nèi)核專用于自旋鎖時(shí),或者當(dāng)您期望等待時(shí)間很短時(shí),請(qǐng)使用此機(jī)制。
您可以使用ioctl()將用戶空間指針傳遞給驅(qū)動(dòng)程序,以便它知道要更新哪個(gè)單詞。
添加回答
舉報(bào)