Linux核心結構詳解

來源:互聯網
上載者:User

Linux核心主要由五個子系統組成:進程調度,記憶體管理,虛擬檔案系統,網路介面,處理序間通訊

  1、進程調度(SCHED):控制進程對CPU的訪問。當需要選擇下一個進程運行時,由發送器選擇最值得啟動並執行進程。可運行進程實際上是僅等待CPU資源的進程,如果某個進程在等待其它資源,則該進程是不可運行進程。Linux使用了比較簡單的基於優先順序的進程調度演算法選擇新的進程。
  2、記憶體管理(MM)允許多個進程安全的共用主記憶體地區。Linux的記憶體管理支援虛擬記憶體,即在電腦中啟動並執行程式,其代碼,資料,堆棧的總量可以超過實際記憶體的大小,作業系統只是把當前使用的程式塊保留在記憶體中,其餘的程式塊則保留在磁碟中。必要時,作業系統負責在磁碟和記憶體間交換程式塊。記憶體管理從邏輯上分為硬體無關部分和硬體有關部分。硬體無關部分提供了進程的映射和邏輯記憶體的對換;硬體相關的部分為記憶體管理硬體提供了虛擬介面。
  3、虛擬檔案系統(VirtualFileSystem,VFS)隱藏了各種硬體的具體細節,為所有的裝置提供了統一的介面,VFS提供了多達數十種不同的檔案系統。虛擬檔案系統可以分為邏輯檔案系統和裝置驅動程式。邏輯檔案系統指Linux所支援的檔案系統,如ext2,fat等,裝置驅動程式指為每一種硬體控制器所編寫的裝置驅動程式模組。
  4、網路介面(NET)提供了對各種網路標準的存取和各種網路硬體的支援。網路介面可分為網路通訊協定和網路驅動程式。網路通訊協定部分負責實現每一種可能的網路傳輸協議。網路裝置驅動程式負責與硬體裝置通訊,每一種可能的硬體裝置都有相應的裝置驅動程式。
  5、進程間通訊(IPC) 支援進程間各種通訊機制。

  處於中心位置的進程調度,所有其它的子系統都依賴它,因為每個子系統都需要掛起或恢複進程。一般情況下,當一個進程等待硬體操作完成時,它被掛起;當操作真正完成時,進程被恢複執行。例如,當一個進程通過網路發送一條訊息時,網路介面需要掛起發送進程,直到硬體成功地完成訊息的發送,當訊息被成功的發送出去以後,網路介面給進程返回一個代碼,表示操作的成功或失敗。其他子系統以相似的理由依賴於進程調度。

  各個子系統之間的依賴關係如下:
  進程調度與記憶體管理之間的關係:這兩個子系統互相依賴。在多道程式環境下,程式要運行必須為之建立進程,而建立進程的第一件事情,就是將程式和資料裝入記憶體。
  處理序間通訊與記憶體管理的關係:處理序間通訊子系統要依賴記憶體管理支援共用記憶體通訊機制,這種機制允許兩個進程除了擁有自己的私人空間,還可以存取共同的記憶體地區。
  虛擬檔案系統與網路介面之間的關係:虛擬檔案系統利用網路介面支援網路檔案系統(NFS),也利用記憶體管理支援RAMDISK裝置。
  記憶體管理與虛擬檔案系統之間的關係:記憶體管理利用虛擬檔案系統支援交換,交換進程(swapd)定期由發送器調度,這也是記憶體管理依賴於進程調度的唯一原因。當一個進程存取的記憶體映射被換出時,記憶體管理向檔案系統發出請求,同時,掛起當前正在啟動並執行進程。
  除了這些依賴關係外,核心中的所有子系統還要依賴於一些共同的資源。這些資源套件括所有子系統都用到的過程。例如:分配和釋放記憶體空間的過程,列印警告或錯誤資訊的過程,還有系統的調試常式等等。

系統資料結構

  在linux的核心的實現中,有一些資料結構使用頻度較高,他們是:

  task_struct.
  Linux 核心利用一個資料結構(task_struct)代表一個進程,代表進程的資料結構指標形成了一個task數組(Linux中,任務和進程是相同的術語),這種指標數組有時也稱為指標向量。這個數組的大小由NR_TASKS(預設為512),表明Linux系統中最多能同時啟動並執行進程數目。當建立新進程的時候,Linux為新進程分配一個task_struct結構,然後將指標儲存在task數組中。發送器一直維護著一個current指標,他指向當前正在啟動並執行進程。

  Mm_struct
  每個進程的虛擬記憶體由一個mm_struct結構來代表,該結構實際上包含了當前執行映像的有關資訊,並且包含了一組指向vm_area_struct結構的指標,vm_area_struct結構描述了虛擬記憶體的一個地區。

  Inode
  虛擬檔案系統(VFS)中的檔案、目錄等均由對應的索引節點(inode)代表。每個VFS索引節點中的內容由檔案系統專屬的常式提供。VFS索引節點只存在於核心記憶體中,實際儲存於VFS的索引節點快取中。如果兩個進程用相同的進程開啟,則可以共用inade的資料結構,這種共用是通過兩個進程中資料區塊指向相同的inode完成。

Linux的具體結構

  所謂具體結構是指系統實現的結構。
  Linux的具體結構類似於抽象結構,這種對應性是因為抽象結構來源於具體結構,我們的劃分沒有嚴格依照原始碼的目錄結構,且和子系統的分組也不完全符合,但是,它很接近原始碼的目錄結構。
  儘管前面的討論的抽象結構顯示了各個子系統之間只有很少的依賴關係,但是具體結構的5個子系統之間有高度的依賴關係。我們可以看出,具體結構中的很多依賴關係並沒有在抽象結構中出現。

Linux核心原始碼

  目前,較新而又穩定的核心版本是2.0.x和2.2.x,因為版本不同稍有差別,因此如果你想讓一個新的驅動程式既支援2.0.x,又支援2.2.x,就需要根據核心版本進行條件編譯,要作到這一點,就要支援宏LINUX_VERSION_CODE,假如核心的版本用a.b.c來表示,這個宏的值就是 216a+28b+c。要用到指定核心版本的值,我們可以用KERNEL_VERSION宏,我們也可以自己去定義它。

  對核心的修改用補丁檔案的方式發布的。Patch公用程式用來對核心源檔案進行一系列的修改。例如:你有2.2.9的原始碼,但想移到2.2.10。就可以獲得2.2.10的補丁檔案,應用patch來修改2.2.9源檔案。例如:
  $ cd /usr/src/linux
  $ patch –pl < patch-2.2.10

  Linux 核心原始碼的結構

  Linux核心原始碼位於/usr/src/linux目錄下。
  /include子目錄包含了建立核心代碼時所需的大部分包含檔案,這個模組利用其他模組重建核心。
  /init 子目錄包含了核心的初始化代碼,這是核心工作的開始的起點。
  /arch子目錄包含了所有硬體結構特定的核心代碼。如:i386,alpha
  /drivers子目錄包含了核心中所有的裝置驅動程式,如塊裝置和SCSI裝置。
  /fs子目錄包含了所有的檔案系統的代碼。如:ext2,vfat等。
  /net子目錄包含了核心的連網代碼。
  /mm子目錄包含了所有記憶體管理代碼。
  /ipc子目錄包含了處理序間通訊代碼。
  /kernel子目錄包含了主核心代碼。

從何處開始閱讀原始碼?

  在Internet,有人製作了原始碼導航器,為閱讀原始碼提供了良好的條件,網站為lxr.linux.no/source。

  下面給出閱讀原始碼的線索:
  系統的啟動和初始化:

  在基於Intel的系統上,當loadlin.exe或LILO把核心裝入到記憶體並把控制權傳遞給核心時,核心開始啟動。關於這一部分請看,arch/i386/kernel/head.S,head.S進行特定結構的設定,然後跳轉到init/main.c的main()常式。

  記憶體管理:
  記憶體管理的代碼主要在/mm,但是特定結構的代碼在arch/*/mm。缺頁中斷處理的代碼在/mm/memory.c ,而記憶體映射和頁快取器的代碼在/mm/filemap.c 。緩衝器快取是在/mm/buffer.c 中實現,而交換快取是在mm/swap_state.c和mm/swapfile.c。

  核心:
  核心中,特定結構的代碼在arch/*/kernel,發送器在kernel/sched.c,fork的代碼在kernel/fork.c,核心常式處理常式在include/linux/interrupt.h,task_struct資料結構在inlucde/linux/sched.h中。

  PCI:
  PCI偽驅動程式在drivers/pci/pci.c,其定義在inclulde/linux/pci.h。每一種結構都有一些特定的PCI BIOS代碼,Intel的在arch/alpha/kernel/bios32.c中。

  處理序間通訊:
  所有的SystemVIPC對象許可權都包含在ipc_perm資料結構中,這可以在include/linux/ipc.h中找到。SystemV訊息是在 ipc/msg.c中實現。共用記憶體在ipc/shm.c中實現。訊號量在ipc/sem.c中,管道在/ipc/pipe.c中實現。

  中斷處理:
  核心的中斷處理代碼幾乎所有的微處理器特有的。中斷處理代碼在arch/i386/kernel/irq.c中,其定義在include/asm-i386/irq.h中。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.