2011-05-25 86 views
3

一個非常基本的問題。我瞭解到設備驅動程序和中斷服務例程只是一些程序或代碼。無論何時需要他們被執行。執行意味着CPU正在執行指令集ISA以外的某些指令。那麼這是否意味着設備驅動程序和ISR也是機器指令來生成所需的結果?設備驅動程序和中斷服務程序

這些程序究竟如何喜歡設備驅動程序和中斷例程?這樣的程序是否也有數據段,代碼段和堆棧段?

我正在學習x86彙編語言和C。

回答

3

這是一個準確的評估。足夠複雜的設備驅動程序具有數據段,代碼段和堆棧段。

+0

一臺計算機從一個程序運行到另一個程序運行到另一個程序或返回到舊程序,從打開它一直到它關閉的時間。這是否也是如此? – KawaiKx 2011-05-25 15:39:24

+1

@沙拉布:一般來說是。在邊緣情況下,您的主應用程序可以是一個循環中的HLT命令。那麼只有在處理硬件中斷請求時纔會發生實際執行。 – Olaf 2011-05-25 15:43:44

+1

o.k.罰款..所以例程,驅動程序,過程,子程序只是一個指令塊(只有來自ISA)的花哨名稱,執行時會產生所需的結果。除了他們不同的結果之外,他們沒有什麼特別的。我說得對嗎? – KawaiKx 2011-05-25 15:48:01

3

請考慮如何從設備獲取數據。有兩種方式:

  • 投票:我們到了嗎?我們到了嗎?程序,操作系統內核,設備驅動程序,不管...一直詢問設備是否有任何新數據。
  • 中斷:設備告訴CPU它有一些重要的東西,並且中斷 CPU。 CPU執行一個稱爲中斷服務例程的例程來爲請求提供服務,然後繼續它在中斷之前執行的任何操作。

根據您的操作系統(或無OS,只是裸機)的設備驅動程序可以是程序,也可以是你的操作系統內核的一個組成部分,...

典型的設備驅動程序會做幾件事情:識別設備,初始化設備,處理來自設備的中斷,處理寫入/讀取/配置設備的請求,...

當然,現代CPU傾向於提供保護功能,允許任意進程訪問設備。因此,設備驅動程序將以高權限級別運行,通常作爲操作系統內核的一部分運行,或者如果用戶空間設備驅動程序將使用內核提供的一些定義良好的界面。

+0

非常感謝..出於好奇心,用什麼語言編寫這樣的設備驅動程序和ISR?組裝,C或其他語言?我是否正確地說,這些驅動程序和ISR可以在自己的系統中執行?他們有擴展名如.exe或.com或一些新的擴展? – KawaiKx 2011-05-26 14:53:43

+2

這取決於操作系統。在Linux上,它們通常用C編寫,並編譯成一個擴展名爲「.ko」的對象文件(內核模塊),在運行時將其鏈接到內核中。或者他們可能靜態鏈接到內核。 OTOH,用戶空間驅動程序是正常的程序,運行時具有足夠的權限來訪問I/O端口或特殊設備文件。 – ninjalj 2011-05-26 23:34:55