使用者空間與核心空間(模組與應用程式)

來源:互聯網
上載者:User
使用者空間與核心空間

         現代的電腦體繫結構中儲存管理通常都包含保護機制。提供保護的目的,是要避免系統中的一個任務訪問屬於另外的或屬於作業系統的儲存地區。如在IntelX86體系中,就提供了特權級這種保護機制,通過特權層級的區別來限制對儲存地區的訪問。基於這種構架,Linux作業系統對自身進行了劃分:一部分核心軟體獨立於普通應用程式,運行在較高的特權層級上,(Linux使用Intel體系的特權級3來運行核心。)它們駐留在被保護的記憶體空間上,擁有訪問硬體裝置的所有許可權,Linux將此稱為核心空間。

       相對的,其它部分被作為應用程式在使用者空間執行。它們只能看到允許它們使用的部分系統資源,並且不能使用某些特定的系統功能,不能直接存取硬體,不能直接存取核心空間,當然還有其他一些具體的使用限制。(Linux使用Intel體系的特權級0來運行使用者程式。)

 

 

  核心模組與應用程式

          核心模組是一些可以讓作業系統核心在需要時載入和執行的代碼,這同樣意味著它可以在不需要時有作業系統卸載。它們擴充了作業系統核心的功能卻不需要重新啟動系統。舉例子來說,其中一種核心模組是裝置驅動程式模組,它們用來讓作業系統正確識別,使用安裝在系統上的硬體裝置。

        如果沒有核心模組,我們不得不一次又一次重新編譯產生單核心作業系統的核心鏡像來加入新的功能。

   (1)使用者程式通常從函數main()開始,執行一系列的指令並且當指令執行完成後結束程式。核心模組有一點不同。核心模組要麼從函數init_module 或是你用宏module_init指定的函數調用開始。這就是核心模組的入口函數。它告訴核心模組提供那些功能擴充並且讓核心準備好在需要時調用它。當它完成這些後,該函數就執行結束了。模組在被核心調用前也什麼都不做。

   

所有的模組或是調用cleanup_module或是你用宏 module_exit指定的函數。這是模組的退出函數。它撤消入口函數所做的一切。 例如登出入口函數所註冊的功能。 所有的模組都必須有入口函數和退出函數。

 

(2)應用程式可以調用它未定義的函數,因為在串連過程能夠解析外部參考從而使用適當的函數庫;模組僅僅被串連到核心,因此它僅能調用有核心匯出的函數(如printk),而沒有任何可串連的庫。

 

(3)應用程式開發過程中的段錯誤是無害的,並且總是可以使用調試器跟蹤到原始碼中的問題所在;核心模組的一個錯誤即使不對整個系統是致命的,也至少會對當前進程造成致命錯誤。

(4)應用程式運行於使用者空間,處理器禁止其對硬體的直接存取以及對記憶體的未授權訪問;核心模組運行於核心空間,可以進行所有操作。

(5)應用程式一般不必擔心發生其他情況而改變它的運行環境;核心模組編程則必須考慮並發問題的處理。

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.