欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

Linux內核和驅動的區別是什么

傅智翔2年前84瀏覽0評論

Linux內核和驅動的區別是什么?

Linux設備驅動屬于內核的一部分,Linux內核的一個模塊可以以兩種方式被編譯和加載:

(1)直接編譯進Linux內核,隨同Linux啟動時加載。

(2)編譯成一個可加載和刪除的模塊。

驅動程序向內核添加了一些函數,是內核的一部分。例如Open(), Release(), Read(), Write()。這些函數由內核在適當的時候來調用,可以用來完成硬件訪問等操作。驅動程序占kernel源代碼超過50%。

內核中printk()函數的設計目的并不是為了和用戶交流,它實際上是內核的一種日志機制,用來記錄下日志信息或者給出警告提示。如果syslogd 和klogd 守護進程在運行的話,則不管是否向控制臺輸出,消息都會被追加進/var/log/messages 文件。klogd只處理內核消息,syslogd 處理其他系統消息,比如應用程序。

設備驅動的并發控制

自旋鎖不會引起調用者睡眠,如果自旋鎖已經被別的執行單元保持,調用者就一直循環查看是否該自旋鎖的保持者已經釋放了鎖,“自旋”就是“在原地打轉”。自旋鎖適合于保持時間非常短的情況,它可以在任何上下文使用。

信號量則引起調用者睡眠,它把進程從運行隊列上拖出去,除非獲得鎖。信號量適合于保持時間較長的情況,會只能在進程上下文使用。

如果被保護的共享資源需要在中斷上下文訪問(包括底半部即中斷處理句柄和頂半部即軟中斷),就必須使用自旋鎖。

設備驅動的內存與IO訪問

內核虛擬內存映射到連續的物理內存。

CPU 通常并沒有為這些已知的外設I/O內存資源的物理地址預定義虛擬地址范圍,驅動程序并不能直接通過物理地址訪問I/O 內存資源,而必須將它們映射到核心虛地址空間內(通過頁表),然后才能根據映射所得到的核心虛地址范圍,通過訪內指令訪問這些I/O內存資源。Linux 在io.h 頭文件中聲明了函數ioremap(),用來將I/O 內存資源的物理地址映射到核心虛地址空間(3GB-4GB)。

驅動中使用的地址是虛擬地址。外設的IO地址需要映射到虛擬地址。

java 釋放句柄,Linux內核和驅動的區別是什么