基於Rust語言編寫的微內核操作系統Redox

Redox是一個用Rust語言編寫的類UNIX操作系統,這種語言注重安全性和高性能,它的目標是把 Rust 語言的創新帶入到一個現代的微內核和全系列的應用程序。Redox遵循微內核設計,旨在安全、可用和免費。Redox的靈感來自於以前的內核和操作系統,如SeL4、MINIX、Plan 9和BSD。Redox不僅僅是一個內核,它是一個功能齊全的操作系統,它提供的包(內存分配器、文件系統、顯示管理器、核心實用程序等)共同構成了一個功能強大、使用方便的操作系統。可以粗略地把它看作GNU或BSD生態系統,但是用一種內存安全的語言和現代技術。

基於Rust語言編寫的微內核操作系統Redox

Redox與POSIX有適度的兼容性,允許Redox在不進行移植的情況下運行許多程序。Redox支持以下硬件設備:

  • 所有x86-64 CPU。
  • 支持VBE的顯卡。
  • AHCI磁盤。
  • E1000或RTL8168網卡。
  • 英特爾HDA音頻控制器。
  • PS/2鼠標和鍵盤。

Redox OS提供的生態系統和軟件相對豐富包括shell、文件系統、內核、驅動、顯示服務器、終端、系統登錄、圖像渲染庫、文本編輯器、背景、瀏覽器、計算器、文件管理器等。

Redox內核

Redox內核很大程度上源於微內核的概念,特別是MINIX的靈感。微內核通過在內核空間提供最少的抽象而在其設計中脫穎而出。微內核強調用戶空間,不像單核內核強調內核空間。微內核的基本原理是,任何可以在用戶空間中運行的組件都應該在用戶空間中運行。內核空間只能用於最基本的組件(例如,系統調用、進程分離、資源管理、IPC、線程管理等)。內核的主要任務是充當進程通信和隔離的媒介。內核應該在硬件上提供最小的抽象(即驅動程序,它可以並且應該在用戶模式下運行)。與宏內核相比,微內核更安全,更不容易崩潰。這是由於驅動程序和其他抽象的特權較低,因此不會對系統造成損害。此外,微內核非常容易維護,因為它們的代碼很小,這可能會減少內核中的錯誤數量,Redox的內核代碼不到9000行,相比之下,Minix有大約6000行內核代碼,Redox後續將會把一部分代碼移動到用戶空間以獲得更小的內核。和其他任何東西一樣,微內核也有缺點。下圖展示了宏內核和微內核的不同之處。

基於Rust語言編寫的微內核操作系統Redox

微內核的優缺點

模塊化和可定製性

宏內核是整體的,它們不允許像微內核那樣進行細粒度的控制。這是因為許多基本組件被“硬編碼”到內核中,因此需要修改內核本身(例如,設備驅動程序)。微內核本質上是非常模塊化的。您可以在運行時替換、重新加載、修改、更改和刪除模塊,甚至無需觸摸內核。現代的宏內核試圖使用內核模塊來解決這個問題,但仍然經常需要系統重新啟動。

安全性

微內核無疑比整體內核更安全。微內核的最小原則是最小特權原則的直接結果,根據最小特權原則,所有組件應該只擁有提供所需功能所絕對需要的特權。宏內核中的許多安全關鍵錯誤源於在內核模式下不受限制地運行的服務和驅動程序,而沒有任何形式的保護。換句話說:在宏內核中,驅動程序在環0中運行時可以做任何事情,沒有限制。

可靠性

與微內核相比,宏內核更容易崩潰。宏內核中崩潰的驅動程序可能會導致整個系統崩潰,而對於微內核,則存在一個獨立的關注點,允許系統安全地處理任何崩潰。在Linux中,我們經常看到驅動程序間接引用壞指針的錯誤,最終導致內核崩潰。

性能

任何現代操作系統都需要基本的安全機制,如虛擬化和內存隔離。此外,任何進程都有自己的堆棧和上下文。在上下文切換中,即每次調用系統調用或完成任何其他進程間通信(IPC)時,都必須完成一些任務,包括:

  • 上下文保存切換
  • MMU的頁表切換
  • CPU模式切換(內核模式、用戶模式)

這些操作在微內核上並不是天生的慢,但是微內核不得不更頻繁地執行這些操作。許多系統功能由用戶空間進程執行,需要額外的上下文切換。

隨著時間的推移,單核和微核之間的性能差異被邊緣化,使得它們的性能具有可比性。

Redox內核調度

Redox內核使用一種稱為循環調度的調度算法。內核註冊一個時鐘中斷處理程序的函數,CPU週期性地調用這個函數。此函數跟蹤調用它的次數,並將安排下一個進程,以便每10個“滴答”進行一次調度。


分享到:


相關文章: