Linux核心(一)

來源:互聯網
上載者:User

     核心,是一個作業系統的核心,它負責管理系統的進程、記憶體、裝置驅動程式、檔案和網路系統,決定著系統的效能和穩定性。是一個提供硬體抽象層、磁碟及檔案系統控制、多任務等功能的系統軟體,一個核心不是一套完整的作業系統。Linux的核心,通常在根目錄下,一個叫vmlinuz的檔案。我們用這個檔案來控制我們的整台PC,包括周邊裝置和軟硬磁碟機、CD-ROM、音效卡等。簡單地說,核心就是作業系統本身。

從程式員的角度來講,作業系統的核心提供了一個與電腦硬體等價的擴充或虛擬計算平台。它抽象了許多硬體細節,程式可以以某種統一的方式進行資料處理,而程式員則可以避開許多硬體細節。從另一個角度講,普通使用者則把作業系統看成是一個資源管理者,在它的協助下,使用者可以以某種易於理解的方式組織自己的資料,完成自己的工作並和其他人共用資源。

Linux以統一的方式支援多任務,而這種方式對使用者進程是透明的,每一個進程運行起來就好象只有它一個進程在電腦上運行一樣,獨佔記憶體和其它的硬體資源,而實際上,核心在並發地運行幾個進程,並且能夠讓幾個進程公平合理地使用硬體資源,也能使各進程之間互不干擾安全地運行。

 

Linux作業系統由四個部分組成:

 1.使用者進程—使用者應用程式是運行在Linux作業系統最高層的一個龐大的軟體集合, 當一個使用者程式在作業系統之上運行時,它成為作業系統中的一個進程。

2. 系統調用介面— 在應用程式中,可通過系統調用來叫用作業系統核心中特定的過程,以實現特定的服務。例如,在程式中安排一條建立進程的系統調用,則作業系統核心便會為之建立一個新進程。

系統調用本身也是由若干條指令構成的過程。但它與一般的過程不同,主要區別是:系統調用是運行在核心態(或叫系統態),而一般過程是運行在使用者態。在Linux中,系統調用是核心代碼的一部分。

3. Linux核心— 核心是作業系統的靈魂,它負責管理磁碟上的檔案、記憶體,負責啟動並運行程式,負責從網路上接收和發送資料包等等。簡言之,核心實際是抽象的資源操作到具體硬體操作細節之間的介面。

4. 硬體—這個子系統包括了Linux安裝時需要的所有可能的物理裝置。例如,CPU、 記憶體、硬碟、網路硬體等等。

上面的這種劃分把整個Linux作業系統分為四個層次。把使用者進程也納入作業系統的範圍內是因為使用者進程的運行和作業系統密切相關,而系統調用介面可以說是作業系統核心的擴充,硬體則是作業系統核心賴以生存的物質條件。這四個層次的依賴關係表現為:上層依賴下層。

      嵌入式linux系統有三個部分:bootloader,zImage,檔案系統。從作業系統的角度來看,bootloader的最終目標是引導載入核心鏡像,分為stage1,stage2,stage1完成基本硬體初始化、為stage2準備記憶體空間、複製stage2到記憶體空間、設定堆棧指標、跳轉到stage2;在stage2中完成初始化本階段用到的硬體裝置、檢測系統的記憶體映射、載入核心映像和根檔案系統、設定核心啟動參數、調用核心。     

      linux由使用者空間和核心空間組成,最上面是使用者(或應用程式)空間。這是使用者應用程式執行的地方。使用者空間之下是核心空間,Linux 核心正是位於這裡。

     GNU C Library (glibc)也在這裡。它提供了串連核心的系統調用介面,還提供了在使用者空間應用程式和核心之間進行轉換的機制。這點非常重要,因為核心和使用者空間的應用程式使用的是不同的保護地址空間。每個使用者空間的進程都使用自己的虛擬位址空間,而核心則佔用單獨的地址空間。

     Linux 核心可以進一步劃分成 3 層。最上面是系統調用介面,它實現了一些基本的功能,例如 readwrite。系統調用介面之下是核心代碼,可以更精確地定義為獨立於體繫結構的核心代碼。這些代碼是 Linux 所支援的所有處理器體繫結構所通用的。在這些代碼之下是依賴於體繫結構的代碼,構成了通常稱為 BSP(Board Support Package)的部分。這些代碼用作給定體繫結構的處理器和特定於平台的代碼。

     Linux 核心實現了很多重要的體繫結構屬性。在或高或低的層次上,核心被劃分為多個子系統。Linux 也可以看作是一個整體,因為它會將所有這些基本服務都整合到核心中。這與微核心的體繫結構不同,後者會提供一些基本的服務,例如通訊、I/O、記憶體和進程管理,更具體的服務都是插入到微核心層中的。

     通常核心空間和使用者空間是程式執行的兩種不同狀態。arm實現了7種工作模式,在不同模式下運行,享有不同的許可權,即訪問的寄存器也是不同的。劃分使用者空間與核心空間有助於對核心的保護,在使用者空間錯誤的運行一些應用程式或者應用程式出錯的時候而不至於修改核心空間,如果修改了核心空間很可能對系統造成破壞。

     通過系統調用與硬體中斷實現從核心空間到使用者空間的轉移。linux核心架構由7個部分組成,分別為:系統調用介面、虛擬檔案系統、進程管理、記憶體管理、裝置驅動、體繫結構、網路通訊協定棧。

系統調用介面

     SCI 層提供了某些機制執行從使用者空間到核心的函數調用。這個介面依賴於體繫結構,SCI 實際上是一個非常有用的函數調用多工和多路分解服務。

進程管理

     進程管理的重點是進程的執行。在核心中,這些進程稱為線程,代表了單獨的處理器虛擬化(線程代碼、資料、堆棧和 CPU 寄存器)。在使用者空間,通常使用進程 這個術語,不過 Linux 實現並沒有區分進程和線程。核心通過 SCI 提供了一個API(API)來建立一個新進程(fork、exec 或 Portable Operating System Interface [POSIX] 函數),停止進程(kill、exit),並在它們之間進行通訊和同步(signal 或者 POSIX 機制)。

     進程管理還包括處理活動進程之間共用 CPU 的需求。核心實現了一種新型的調度演算法,不管有多少個線程在競爭 CPU,這種演算法都可以在固定時間內進行操作。這種演算法就稱為 O(1) 發送器,這個名字就表示它調度多個線程所使用的時間和調度一個線程所使用的時間是相同的。 O(1) 發送器也可以支援多處理器(稱為對稱式多處理器或 SMP)。

記憶體管理

     核心所管理的另外一個重要資源是記憶體。為了提高效率,如果由硬體管理虛擬記憶體,記憶體是按照所謂的記憶體頁 方式進行管理的(對於大部分體繫結構來說都是 4KB)。Linux 包括了管理可用記憶體的方式,以及物理和虛擬映射所使用的硬體機制。

     Linux 提供了對 4KB 緩衝區的抽象,例如 slab 分配器。這種記憶體管理員模式使用 4KB 緩衝區為基數,然後從中分配結構,並跟蹤記憶體頁使用方式,比如哪些記憶體頁是滿的,哪些頁面沒有完全使用,哪些頁面為空白。這樣就允許該模式根據系統需要來動態調整記憶體使用量。

     為了支援多個使用者使用記憶體,有時會出現可用記憶體被消耗光的情況。由於這個原因,頁面可以移出記憶體並放入磁碟中。這個過程稱為交換,因為頁面會被從記憶體交換到硬碟上。

虛擬檔案系統

     虛擬檔案系統(VFS)是 Linux 核心中非常有用的一個方面,因為它為檔案系統提供了一個通用的介面抽象。VFS 在 SCI 和核心所支援的檔案系統之間提供了一個交換層。在 VFS 上面,是對諸如 open、close、read 和 write 之類的函數的一個通用 API 抽象。在 VFS 下面是檔案系統抽象,它定義了上層函數的實現方式。檔案系統層之下是緩衝區快取,它為檔案系統層提供了一個通用函數集(與具體檔案系統無關)。這個緩衝層通過將資料保留一段時間(或者隨即預先讀取資料以便在需要是就可用)最佳化了對物理裝置的訪問。緩衝區快取之下是裝置驅動程式,它實現了特定物理裝置的介面。

網路堆棧

     網路堆棧在設計上遵循類比協議本身的分層體繫結構。Internet Protocol (IP) 是傳輸協議(通常稱為傳輸控制通訊協定或 TCP)下面的核心網路層協議。TCP 上面是 socket 層,它是通過 SCI 進行調用的。

socket 層是網路子系統的標準 API,它為各種網路通訊協定提供了一個使用者介面。從原始幀訪問到 IP 協議資料單元(PDU),再到 TCP 和 User Datagram Protocol (UDP),socket 層提供了一種標準化的方法來管理串連,並在各個終點之間移動資料。

裝置驅動程式

     Linux 核心中有大量代碼都在裝置驅動程式中,它們能夠運轉特定的硬體裝置。Linux 源碼樹提供了一個驅動程式子目錄,這個目錄又進一步劃分為各種支援裝置,例如 Bluetooth、I2C、serial 等。

依賴體繫結構的代碼

     儘管Linux 很大程度上獨立於所啟動並執行體繫結構,但是有些元素則必須考慮體繫結構才能正常操作並實現更高效率。核心原始碼中依賴於體繫結構的部分,包含了各種特定於體繫結構的子目錄(共同組成了 BSP)。對於一個典型的案頭系統來說,使用的是 i386 目錄。每個體繫結構子目錄都包含了很多其他子目錄,每個子目錄都關注核心中的一個特定方面,例如引導、核心、記憶體管理等。

 

核心中的所有子系統要依賴於一些共同的資源。這些資源套件括所有子系統都用到的過程。例如:分配和釋放記憶體空間的過程,列印警告或錯誤資訊的過程,還有系統的調試常式等等。

系統資料結構

task_struct

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

mm_struct

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

inode

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

 

Linux 核心原始碼的結構

Linux核心原始碼位於/usr/src/linux目錄下。

  /arch:目錄包括了所有和體繫結構相關的核心代碼。它下面的每一個子目錄都代表一種Linux支援的體繫結構,例如i386就是Intel CPU及與之相相容體繫結構的子目錄。PC機一般都基於此目錄。

     /block:塊裝置驅動程式I/O調度。

     /crypto:常用加密和散列演算法(如AES,SHA等),還有一些壓縮和CRC校正演算法。

  /drivers:目錄中是系統中所有的裝置驅動程式。它又進一步劃分成幾類裝置驅動,每一種有對應的子目錄,如音效卡的驅動對應於/drivers/sound。

      /documentation目錄下是一些文檔,是對每個目錄作用的具體說明。

  /fs:目錄存放Linux支援的檔案系統代碼和各種類型的檔案作業碼。每一個子目錄支援一個檔案系統,如ext3檔案系統對應的就是ext3子目錄

  /include:目錄包括編譯核心所需要的大部分標頭檔,例如與平台相關的標頭檔在/include/linux子目錄下,與intel cpu相關的標頭檔在/include/asm-i386子目錄下,而/include/scsi目錄則是有關scsi裝置的標頭檔目錄。

  /init:目錄包含核心的初始化代碼(不是系統的引導代碼),有main.c和Version.c兩個檔案。

     /ipc:目錄包含了核心進程間的通訊代碼。

  /Kernel:核心管理的核心代碼,此目錄下的檔案實現了大多數linux系統的核心功能,其中最重要的檔案當屬sched.c;同時與處理器結構相關代碼都放在/arch/*/kernel目錄下。

  /lib:目錄包含了核心的庫代碼,不過與處理器結構相關的庫代碼被放在/arch/*/lib/目錄下。

  /mm:目錄包含了所有獨立於 cpu 體繫結構的記憶體管理代碼,如頁式儲存管理記憶體的分配和釋放等。與具體硬體體繫結構相關的記憶體管理代碼位於/arch/*/mm目錄下,例如/arch/i386/mm/Fault.c 。

      /modules:目錄存放了已建好的、可動態載入的模組。

  /net:目錄裡是核心的網路部分代碼,實現了各種常見的網路通訊協定,其每個子目錄對應於網路的一個方面。

  /scripts:目錄包含用於配置核心的指令檔等。

  /security:主要包含SELinux模組。

  /sound:ALSA,OSS音訊裝置的驅動核心代碼和常用裝置驅動。

      /usr:實現了用於打包和壓縮的cpio等。

相關文章

聯繫我們

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