3核心結構與設計

2022-09-14 21:03:14 字數 3690 閱讀 8258

1.計算機的硬體資源

2.作業系統要提供的功能

3.單核心與微核心

4.作業系統分層

計算機中資源大致可以分為兩類資源,一種是硬體資源,一種是軟體資源。先來看看硬體資源有哪些,如下:

匯流排,負責連線各種其它裝置,是其它裝置工作的基礎。

2.cpu,即**處理器,負責執行程式和處理資料運算。

記憶體,負責儲存執行時的**和資料。

硬碟,負責長久儲存使用者檔案資料。

網絡卡,負責計算機與計算機之間的通訊。

顯示卡,負責顯示工作。

各種 i/o 裝置,如顯示器,印表機,鍵盤,滑鼠等。

核心作為硬體資源和軟體資源的管理者,其內部組成在邏輯上大致如下:

1.管理 cpu,由於 cpu 是執行程式的,而核心把執行時的程式抽象成程序,所以又稱為程序管理。

2.管理記憶體,由於程式和資料都要占用記憶體,記憶體是非常寶貴的資源,所以核心要非常小心地分配、釋放記憶體。

3.管理硬碟,而硬碟主要存放使用者資料,而核心把使用者資料抽象成檔案,即管理檔案,檔案需要合理地組織,方便使用者查詢和讀寫,所以形成了檔案系統。

4.管理顯示卡,負責顯示資訊,而現在作業系統都是支援 gui(圖形使用者介面)的,管理顯示卡自然而然地就成了核心中的圖形系統。

5.管理網絡卡,網絡卡主要完成網路通訊,網路通訊需要各種通訊協議,最後在核心中就形成了網路協議棧,又稱網路元件。

6.管理各種 i/o 裝置,我們經常把鍵盤、滑鼠、印表機、顯示器等統稱為 i/o(輸入輸出)裝置,在核心中抽象成 i/o 管理器。

核心除了這些必要元件之外,根據功能不同還有安全元件等,最值得一提的是,各種計算機硬體的效能不同,硬體型號不同,硬體種類不同,硬體廠商不同,核心要想管理和控制這些硬體就要編寫對應的**,通常這樣的**我們稱之為驅動程式

硬體廠商就可以根據自己不同的硬體編寫不同的驅動,加入到核心之中。

單核心結構

單核心就是把以上諸如管理程序的**、管理記憶體的**、管理各種 i/o 裝置的**、檔案系統的**、圖形系統**以及其它功能模組的**,把這些所有的**經過編譯,最後鏈結在一起,形成乙個大的可執行程式。

這個大的可執行程式也向使用者提供了一些介面:就是我們常說的系統呼叫

結構大體如圖

應用程式呼叫記憶體分配的 api(應用程式介面)函式。

處理器切換到特權模式,開始執行核心**。

核心裡的記憶體管理**按照特定的演算法,分配一塊記憶體。

把分配的記憶體塊的首位址,返回給記憶體分配的 api 函式。

記憶體分配的 api 函式返回,處理器開始執行使用者模式下的應用程式,應用程式就得到了一塊記憶體的首位址,並且可以使用這塊記憶體了。

單核心結構有明顯的缺點,因為它沒有模組化,沒有擴充套件性、沒有移植性,高度耦合在一起,一旦其中乙個元件有漏洞,核心中所有的元件可能都會出問題

開發乙個新的功能也得重新編譯、鏈結、安裝核心。其實現在這種原始的單核心結構已經沒有人用了。這種單核心唯一的優點是效能很好,因為在核心中,這些元件可以互相呼叫,效能極高

微核心架構正好與單核心架構相反,它提倡核心功能盡可能少:僅僅只有程序排程、處理中斷、記憶體空間對映、程序間通訊等功能

這樣的核心是不能完成什麼實際功能的,開發者們把實際的程序管理、記憶體管理、裝置管理、檔案管理等服務功能,做成乙個個服務程序。

和使用者應用程序一樣,只是它們很特殊,單核心提供的功能,在微核心架構裡由這些服務程序專門負責完成

微核心定義了一種良好的程序間通訊的機制——訊息。應用程式要請求相關服務,就向微核心傳送一條與此服務對應的訊息,微核心再把這條訊息**給相關的服務程序,接著服務程序會完成相關的服務。服務程序的程式設計模型就是迴圈處理來自其它程序的訊息,完成相關的服務功能

在微核心下拐了幾個彎,一來一去的訊息帶來了非常大的開銷,當然各個服務程序的切換開銷也不小。這樣系統效能就大打折扣。

微核心有很多優點,首先,系統結構相當清晰利於協作開發。其次,系統有良好的移植性,微核心**量非常少,就算重寫整個核心也不是難事。最後,微核心有相當好的伸縮性、擴充套件性

今天如此龐雜的計算機,其實也是一層一層地構建起來的,從硬體層到作業系統層再到應用軟體層這樣構建。分層的主要目的和好處在於遮蔽底層細節,使上層開發更加簡單

計算機領域的乙個基本方法是增加乙個抽象層,從而使得抽象層的上下兩層獨立地發展,所以在核心內部再分若干層也不足為怪。

比如程序排程模組要有兩種機制:

1.程序排程,它的目的是要從眾多程序中選擇乙個將要執行的程序,當然有各種選擇的演算法,例如,輪轉演算法、優先順序演算法等

2.程序切換,它的目的是停止當前程序,執行新的程序,主要動作是儲存當前程序的機器上下文,裝載新程序的機器上下文。

選擇乙個程序的演算法和**是不容易發生改變的,需要改變的**是程序切換的相關**,因為不同的硬體平台的機器上下文是不同的。

這時最好是將程序切換的**放在乙個獨立的層中實現,比如硬體平台相關層,當作業系統要執行在不同的硬體平台上時,就只是需要修改硬體平台相關層中的相關**,這樣作業系統的移植性就大大增強了。

首先大致將我們的作業系統核心分為三個大層,分別是:

核心介面層。

核心功能層。

核心硬體層。

核心介面層:定義了一系列介面,主要有以下內容

1.定義介面

2.檢查其引數是否合法,如果引數有問題就返回相關的錯誤,接著呼叫下層完成功能的核心**

核心功能層

主要完成各種實際功能,這些功能按照其類別可以分成各種模組,當然這些功能模組最終會用具體的演算法、資料結構、**去實現它,核心功能層的模組如下:

程序管理,主要是實現程序的建立、銷毀、排程程序,當然這要設計幾套資料結構用於表示程序和組織程序,還要實現乙個簡單的程序排程演算法。2. 記憶體管理,在核心功能層中只有記憶體池管理,分兩種記憶體池:頁面記憶體池和任意大小的記憶體池。

裝置管理,這個是最難的,需要用一系列的資料結構表示驅動程式模組、驅動程式本身、驅動程式建立的裝置,最後把它們組織在一起,還要實現建立裝置、銷毀裝置、訪問裝置的**,這些**最終會呼叫裝置驅動程式,達到操作裝置的目的。

核心硬體層,主要包括乙個具體硬體平台相關的**

初始化,初始化**是核心被載入到記憶體中最先需要執行的**,例如初始化少量的裝置、cpu、記憶體、中斷的控制、核心用於管理的資料結構等。

cpu 控制,提供 cpu 模式設定、開、關中斷、讀寫 cpu 特定暫存器等功能的**。

中斷處理,儲存中斷時機器的上下文,呼叫中斷**函式,操作中斷控制器等。

物理記憶體管理,提供分配、釋放大塊記憶體,記憶體空間對映,操作 mmu、cache 等。

平台其它相關的功能,有些硬體平台上有些特殊的功能,需要額外處理一下。

UCOS II核心結構

1.1 臨界段可以關中斷來保持獨佔。為什麼可以關中斷來保持獨佔呢?因為能引起排程的有兩個,乙個是呼叫 系統函式,另外乙個是中斷喚醒了乙個事件。而明顯進入臨界段是不會呼叫系統函式的了,因而意外的就是 可能會發生中斷,所以把中斷關掉了,就不會發生排程了。1.2 任務 ucos的任務可以達64個,但是最高...

Linux核心結構

linux核心主要由五個子系統組成 程序排程,記憶體管理,虛擬檔案系統,網路介面,程序間通訊。1.程序排程 sched 控制程序對cpu的訪問。當需要選擇下乙個程序執行時,由排程程式選擇最值得執行的程序。可執行程序實際上是僅等待cpu資源的程序,如果某個程序在等待其它資源,則該程序是不可執行程序。l...

Linux核心結構

linux核心主要由五個子系統組成 程序排程,記憶體管理,虛擬檔案系統,網路介面,程序間通訊。1.程序排程 sched 控制程序對cpu的訪問。當需要選擇下乙個程序執行時,由排程程式選擇最值得執行的程序。可執行程序實際上是僅等待cpu資源的程序,如果某個程序在等待其它資源,則該程序是不可執行程序。l...