linux核心主要有 5個子系統組成:程序排程 (sched) ,記憶體管理 (mm) ,虛擬檔案系統 (vfs) ,網路介面 (net)和程序間通訊 ( ipc )。
1、程序排程
程序在程序排程子系統中微觀序列,巨集觀並行。其餘 4 個子系統都依賴於程序排程系統,因為每個子系統也需要掛起或恢復程序,
當它們需要做這些工作時,都得和程序排程子系統打交道。
程序的睡眠有兩種情況,一種是因為得不到請求的資源而進入「深度睡眠」 (task_uninterruptible),深度睡眠直到得到請
求的資源後才會醒來,其間不可被打斷;另外一種是由於時間片用完,而進入的「淺度睡眠」(task_interruptible),在淺度
睡眠時,如果給程序發乙個訊號,它就會醒過來。
在裝置驅動程式設計中,當請求的資源不能得到滿足時,驅動一般會排程其他程序執行,其對應的程序進入睡眠狀態,直到它請求的資源
被釋放,才會被喚醒而進入到就緒狀態。
裝置驅動中,如果需要幾個併發執行的任務,可以啟動核心執行緒,啟動核心執行緒的函式為:
int kernel_thread(int(*fn)(void *),void *arg,unsigned long flags);
2、記憶體管理
記憶體管理的主要作用是控制多個程序安全地共享主記憶體區域。當 cpu 帶有記憶體管理單元 (mmu)時,linux 記憶體管理完成為每個程序
進行虛擬記憶體到物理記憶體的轉換。linux 2.6 核心可以支援無 mmu 的 cpu .
一般而言,linux 的每個程序享有 4gb 的記憶體空間,0~3gb 屬於使用者空間,3~4gb 屬於核心空間,核心空間對常規記憶體,i/o
裝置記憶體以及高階記憶體有著不同的處理方式。
3、虛擬檔案系統
linux 虛擬檔案系統 (vfs)
隱藏了各種硬體的具體細節,為所有的裝置提供了統一的介面。而且,它獨立於各個具體的檔案系統,
是對各種檔案系統的乙個抽象,它使用超級塊 super
block 存放檔案系統相關資訊,使用索引結點 inode 存放檔案的物理資訊,
使用目錄項項 dentry 存放檔案的邏輯資訊。
4、網路介面
網路介面提供了對各種網路的標準訪問和各種網路硬體的支援。網路介面可分為網路協議和網路驅動程式,網路協議部分負責實
現每一種可能的網路傳輸協議,網路裝置驅動程式負責硬體裝置進行通訊,每一種可能的網路硬體裝置都有相應的裝置驅動程式。
5、程序間的通訊
linux 支援多種通訊機制,如訊號量,共享記憶體,管道,訊號等,這些機制可以協助多個程序、多資源的互斥訪問、程序間的同
步和訊息傳遞。
這 5 個子系統之間的依賴關係為:
程序排程和記憶體管理之間的關係:
這兩個子系統互相依賴。在多道程式環境下,必須為程式建立程序,而建立程序的第一件事情就是將程式和資料裝入記憶體。
程序間通訊與記憶體管理的關係:
程序間通訊子系統要依賴記憶體管理支援共享記憶體通訊機制,這種機制允許兩個程序除了擁有自己的私有空間,還可以訪問共同的記憶體區域。
虛擬檔案系統與網路介面之間的關係:
虛擬檔案系統利用網路介面支援網路檔案系統(nfs),也利用記憶體管理支援 ramdisk 裝置。
記憶體管理與虛擬檔案系統之間的關係:
記憶體管理利用虛擬檔案系統支援交換,交換程序 (swapd) 定期由排程程式排程,這也就是記憶體管理依賴於程序排程的唯一原因。當一
個程序訪問的記憶體對映被換出時,記憶體管理向檔案系統發出請求,同時,掛起當前正在執行的程序。
Linux核心組成部分(二)
裝置驅動程式 塊裝置和字元裝置 裝置驅動程式用於與系統連線的輸入 輸出裝置通訊,如硬碟 軟碟機 各種介面 音效卡等。按照經典的unix箴言 萬物皆檔案 everything is a file 對外設的訪問可利用 dev目錄下的裝置檔案來完成,程式對裝置的處理完全類似於常規的檔案 網路 網絡卡也可以...
linux核心的5大組成部分
乙個完整的linux核心一般由5部分組成,它們分別是記憶體管理 程序管理 程序間通訊 虛擬檔案系統和網路介面。1 記憶體管理 記憶體管理主要完成的是如何合理有效地管理整個系統的物理記憶體,同時快速響應核心各個子系統對記憶體分配的請求。linux記憶體管理支援虛擬記憶體,而多餘出的這部分記憶體就是通過...
Linux系統的組成部分
核心是系統的核心,是執行程式和管理諸如磁碟和印表機等硬體裝置的核心程式。作業系統是乙個用來和硬體打交道並為使用者程式提供有限服務集的低階支撐軟體。乙個計算機系統是乙個硬體和軟體的共生體,它們相互依賴 不可分割。外圍裝置 處理器 記憶體 硬碟和其他的電子塞河北組成了計算機的發動機,但是如果沒有軟體來操...