• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-20  評論-0  文章-0  trackbacks-0

            Linux 內核剖析

            歷史和體系結構分析

            developerWorks

            未顯示需要 JavaScript 的文檔選項


            級別: 中級

            M. Tim Jones (mtj@mtjones.com), 顧問工程師, Emulex

            2007 年 7 月 02 日

            Linux® 內核是一個龐大而復雜的操作系統的核心,不過盡管龐大,但是卻采用子系統和分層的概念很好地進行了組織。在本文中,您將探索 Linux 內核的總體結構,并學習一些主要的子系統和核心接口。您還可以通過其他 IBM 文章的鏈接更深入地進行學習。

            由于本文的目標 是對 Linux 內核進行介紹并探索其體系結構和主要組件,因此首先回顧一下 Linux 的簡短歷史,然后從較高的層次審視 Linux 內核的體系結構,最后介紹它的主要子系統。Linux 內核具有超過 600 萬行的代碼,因此本文不可能進行完整的介紹。請使用指向其他內容的鏈接進一步學習。

            Linux 的簡短歷史

            Linux 還是 GNU/Linux?
            您可能已經注意到 Linux 作為一個操作系統來說,有時會稱為 “Linux”,有時卻稱為 “GNU/Linux”。這背后的原因在于 Linux 實際上是操作系統的內核。使這個操作系統變得非常有用的大量應用程序是 GNU 軟件。例如,窗口系統、編譯器、各種 shell、開發工具、編輯器、實用工具以及內核之外的其他應用程序,其中很多都是 GNU 軟件。由于這個原因,很多人都認為 “GNU/Linux” 更適合作為操作系統的名字,而 “Linux” 則適合作為內核的名字。

            盡 管 Linux 絕對是最流行的開源操作系統,但是相對于其他操作系統的漫長歷史來說,Linux 的歷史非常短暫。在計算機出現早期,程序員是使用硬件語言在裸硬件上進行開發的。缺少操作系統就意味著在某個時間只有一個應用程序(和一個用戶)可以使用 這些龐大而又昂貴的設備。早期的操作系統是在 20 世紀 50 年代開發的,用來提供簡單的開發體驗。包括為 IBM 701 開發的 General Motors Operating System(GMOS)和 North American Aviation 為 IBM 709 開發的 FORTRAN Monitor System(FMS)。

            在 20 世紀 60 年代,MIT(Massachusetts Institute of Technology)和一些公司為 GE-645 開發了一個名為 Multics(Multiplexed Information and Computing Service)的實驗性的操作系統。這個操作系統的開發者之一 AT&T 后來退出了 Multics,并在 1970 年開發了自己的名為 Unics 的操作系統。與這個操作系統一同誕生的是 C 語言,C 語言就是為此而開發的,然后它們使用 C 語言對操作系統進行了重寫,使操作系統開發具有可移植性。

            二 十年后,Andrew Tanenbaum 創建了一個微內核版本的 UNIX®,名為 MINIX(代表 minimal UNIX),它可以在小型的個人計算機上運行。這個開源操作系統在 20 世紀 90 年代激發了 Linus Torvalds 開發 Linux 的靈感(請參看圖 1 所示)。


            圖 1. 主要 Linux 內核發行版簡史
            主要 linux 內核發行版簡史

            Linux 快速從一個個人項目進化成為一個全球數千人參與的開發項目。對于 Linux 來說,最為重要的決策之一是采用 GPL(GNU General Public License)。在 GPL 保護之下,Linux 內核可以防止商業使用,并且它還從 GNU 項目(Richard Stallman 開發,其源代碼要比 Linux 內核大得多)的用戶空間開發受益。這允許使用一些非常有用的應用程序,例如 GCC(GNU Compiler Collection)和各種 shell 支持。





            回頁首


            Linux 內核簡介

            現在讓我們從一個比較高的高度來審視一下 GNU/Linux 操作系統的體系結構。您可以從兩個層次上來考慮操作系統,如圖 2 所示。


            圖 2. GNU/Linux 操作系統的基本體系結構
             gnu/linux 操作系統的基本體系結構
            系統調用接口(SCI)的方法
            實際上,體系結構可能并不像圖 2 所示的一樣清晰。例如,處理系統調用(從用戶空間切換到內核空間)的機制可能在各個體系結構上都不相同。提供了對虛擬化指令支持的新型 x86 中央處理單元(CPU)在這方面要比使用傳統 int 80h 方法的老式 x86 處理器更加高效。

            最上面是用戶(或應用程序)空間。這是用戶應用程序執行的地方。用戶空間之下是內核空間,Linux 內核正是位于這里。

            GNU C Library (glibc)也在這里。它提供了連接內核的系統調用接口,還提供了在用戶空間應用程序和內核之間進行轉換的機制。這點非常重要,因為內核和用戶空間的應 用程序使用的是不同的保護地址空間。每個用戶空間的進程都使用自己的虛擬地址空間,而內核則占用單獨的地址空間。 更多信息,請參看 參考資料 一節中的鏈接。

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





            回頁首


            Linux 內核的屬性

            在討論大型而復雜的系統的體系結構時,可以從很多角度來審視系統。體系結構分析的一個目標是提供一種方法更好地理解源代碼,這正是本文的目的。

            Linux 內核實現了很多重要的體系結構屬性。在或高或低的層次上,內核被劃分為多個子系統。Linux 也可以看作是一個整體,因為它會將所有這些基本服務都集成到內核中。這與微內核的體系結構不同,后者會提供一些基本的服務,例如通信、I/O、內存和進程 管理,更具體的服務都是插入到微內核層中的。每種內核都有自己的優點,不過這里并不對此進行討論。

            隨著時 間的流逝,Linux 內核在內存和 CPU 使用方面具有較高的效率,并且非常穩定。但是對于 Linux 來說,最為有趣的是在這種大小和復雜性的前提下,依然具有良好的可移植性。Linux 編譯后可在大量處理器和具有不同體系結構約束和需求的平臺上運行。一個例子是 Linux 可以在一個具有內存管理單元(MMU)的處理器上運行,也可以在那些不提供 MMU 的處理器上運行。Linux 內核的 uClinux 移植提供了對非 MMU 的支持。更詳細信息請參看 參考資料 一節的內容。





            回頁首


            Linux 內核的主要子系統

            現在使用圖 3 中的分類說明 Linux 內核的主要組件。


            圖 3. Linux 內核的一個體系結構透視圖
            Linux 內核的一個體系結構透視圖

            系統調用接口

            SCI 層提供了某些機制執行從用戶空間到內核的函數調用。正如前面討論的一樣,這個接口依賴于體系結構,甚至在相同的處理器家族內也是如此。SCI 實際上是一個非常有用的函數調用多路復用和多路分解服務。在 ./linux/kernel 中您可以找到 SCI 的實現,并在 ./linux/arch 中找到依賴于體系結構的部分。有關這個組件的更詳細信息可以在 參考資料 一節中找到。

            進程管理

            內核是什么?
            圖 3 所示,內核實際上僅僅是一個資源管理器。不管被管理的資源是進程、內存還是硬件設備,內核負責管理并裁定多個競爭用戶對資源的訪問(既包括內核空間也包括用戶空間)。

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

            進 程管理還包括處理活動進程之間共享 CPU 的需求。內核實現了一種新型的調度算法,不管有多少個線程在競爭 CPU,這種算法都可以在固定時間內進行操作。這種算法就稱為 O(1) 調度程序,這個名字就表示它調度多個線程所使用的時間和調度一個線程所使用的時間是相同的。 O(1) 調度程序也可以支持多處理器(稱為對稱多處理器或 SMP)。您可以在 ./linux/kernel 中找到進程管理的源代碼,在 ./linux/arch 中可以找到依賴于體系結構的源代碼。在 參考資料 一節中可以了解有關這個算法的更多內容。

            內存管理

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

            不 過內存管理要管理的可不止 4KB 緩沖區。Linux 提供了對 4KB 緩沖區的抽象,例如 slab 分配器。這種內存管理模式使用 4KB 緩沖區為基數,然后從中分配結構,并跟蹤內存頁使用情況,比如哪些內存頁是滿的,哪些頁面沒有完全使用,哪些頁面為空。這樣就允許該模式根據系統需要來動 態調整內存使用。

            為了支持多個用戶使用內存,有時會出現可用內存被消耗光的情況。由于這個原因,頁面可以移出內存并放入磁盤中。這個過程稱為交換,因為頁面會被從內存交換到硬盤上。內存管理的源代碼可以在 ./linux/mm 中找到。

            虛擬文件系統

            虛擬文件系統(VFS)是 Linux 內核中非常有用的一個方面,因為它為文件系統提供了一個通用的接口抽象。VFS 在 SCI 和內核所支持的文件系統之間提供了一個交換層(請參看圖 4)。


            圖 4. VFS 在用戶和文件系統之間提供了一個交換層
            VFS 在用戶和文件系統之間提供了一個交換層

            在 VFS 上面,是對諸如 open、close、read 和 write 之類的函數的一個通用 API 抽象。在 VFS 下面是文件系統抽象,它定義了上層函數的實現方式。它們是給定文件系統(超過 50 個)的插件。文件系統的源代碼可以在 ./linux/fs 中找到。

            文件系統層之下是緩沖區緩存,它為文件系統層提供了一個通用函數集(與具體文件系統無關)。這個緩存層通過將數據保留一段時間(或者隨即預先讀取數據以便在需要是就可用)優化了對物理設備的訪問。緩沖區緩存之下是設備驅動程序,它實現了特定物理設備的接口。

            網絡堆棧

            網絡堆棧在設計上遵循模擬協議本身的分層體系結構。回想一下,Internet Protocol (IP) 是傳輸協議(通常稱為傳輸控制協議或 TCP)下面的核心網絡層協議。TCP 上面是 socket 層,它是通過 SCI 進行調用的。

            socket 層是網絡子系統的標準 API,它為各種網絡協議提供了一個用戶接口。從原始幀訪問到 IP 協議數據單元(PDU),再到 TCP 和 User Datagram Protocol (UDP),socket 層提供了一種標準化的方法來管理連接,并在各個終點之間移動數據。內核中網絡源代碼可以在 ./linux/net 中找到。

            設備驅動程序

            Linux 內核中有大量代碼都在設備驅動程序中,它們能夠運轉特定的硬件設備。Linux 源碼樹提供了一個驅動程序子目錄,這個目錄又進一步劃分為各種支持設備,例如 Bluetooth、I2C、serial 等。設備驅動程序的代碼可以在 ./linux/drivers 中找到。

            依賴體系結構的代碼

            盡 管 Linux 很大程度上獨立于所運行的體系結構,但是有些元素則必須考慮體系結構才能正常操作并實現更高效率。./linux/arch 子目錄定義了內核源代碼中依賴于體系結構的部分,其中包含了各種特定于體系結構的子目錄(共同組成了 BSP)。對于一個典型的桌面系統來說,使用的是 i386 目錄。每個體系結構子目錄都包含了很多其他子目錄,每個子目錄都關注內核中的一個特定方面,例如引導、內核、內存管理等。這些依賴體系結構的代碼可以在 ./linux/arch 中找到。





            回頁首


            Linux 內核的一些有用特性

            如果 Linux 內核的可移植性和效率還不夠好,Linux 還提供了其他一些特性,它們無法劃分到上面的分類中。

            作 為一個生產操作系統和開源軟件,Linux 是測試新協議及其增強的良好平臺。Linux 支持大量網絡協議,包括典型的 TCP/IP,以及高速網絡的擴展(大于 1 Gigabit Ethernet [GbE] 和 10 GbE)。Linux 也可以支持諸如流控制傳輸協議(SCTP)之類的協議,它提供了很多比 TCP 更高級的特性(是傳輸層協議的接替者)。

            Linux 還是一個動態內核,支持動態添加或刪除軟件組件。被稱為動態可加載內核模塊,它們可以在引導時根據需要(當前特定設備需要這個模塊)或在任何時候由用戶插入。

            Linux 最新的一個增強是可以用作其他操作系統的操作系統(稱為系統管理程序)。最近,對內核進行了修改,稱為基于內核的虛擬機(KVM)。這個修改為用戶空間啟 用了一個新的接口,它可以允許其他操作系統在啟用了 KVM 的內核之上運行。除了運行 Linux 的其他實例之外, Microsoft® Windows® 也可以進行虛擬化。惟一的限制是底層處理器必須支持新的虛擬化指令。更多信息請參看 參考資料 一節的內容。





            回頁首


            結束語

            分享這篇文章......

            digg 將本文提交到 Digg
            del.icio.us 發布到 del.icio.us

            本文對 Linux 內核體系結構及其特性和功能進行了簡要介紹。有關內核的詳細內容,可以參考每個 Linux 發行版中附帶的 Documentation 目錄。請一定查看本文末尾的 參考資料 一節,了解有關本文中所討論主題的更詳細信息。



            參考資料

            學習
            • 您可以參閱本文在 developerWorks 全球站點上的 英文原文

            • GNU 站點 介紹了 GNU GPL,它涵蓋了 Linux 內核及其附帶的大量有用的應用程序。另外還介紹了一個比 GPL 限制更少的許可 Lesser GPL (LGPL)。

            • UNIXMINIXLinux 在 Wikipedia 上都有介紹,另外還詳細介紹了操作系統系列。

            • GNU C Library,即 glibc,是標準 C 庫的實現。它用于 GNU/Linux 操作系統,也可用于 GNU/Hurd 微內核操作系統。

            • uClinux 是 Linux 內核的一個移植,它可以在一些缺少 MMU 的系統上執行。這允許 Linux 內核在很小的嵌入式平臺上運行,例如 PalmPilot PalmPilot Personal Digital Assistants (PDAs) 上使用的 Motorola DragonBall 處理器。

            • 使用 Linux 系統調用的內核命令”(developerWorks,2007 年 3 月)對 SCI 進行了介紹,這是 Linux 內核中非常重要的一層,具有 glibc 的用戶空間支持,可以在用戶空間和內核之間啟用函數調用。

            • Linux 調度器內幕”(developerWorks,2006 年 6 月)介紹了 Linux 2.6 中引入的新 O(1) 調度程序,這是一個非常高效的算法,可以擴展到很大數量的進程(線程),并且可以利用 SMP 系統。

            • 使用 /proc 文件系統來訪問 Linux 內核的內容”(developerWorks,2006 年 3 月)介紹了 /proc 文件系統,這是一個虛擬文件系統,為用戶空間的應用程序提供了一種全新的方法與內核進行通信。這篇文章展示了 /proc 以及可加載內核模塊。

            • 服務器診所: 使虛擬文件系統工作”(developerWorks,2003 年 4 月)深入介紹了 VFS 層,它允許 Linux 通過一個通用接口支持各種不同的文件系統。這個相同的接口也可以用于其他類型的設備,例如 socket。

            • Linux 引導過程內幕”(developerWorks,2006 年 5 月)介紹了 Linux 的引導過程,該過程將啟動一個 Linux 系統,并且不管是從硬盤、軟盤、USB 內存條還是通過網絡引導系統,該過程是相同的。

            • Linux 初始 RAM 磁盤(initrd)概述”(developerWorks,2006 年 7 月)介紹了初始 RAM 磁盤,它將引導過程與所引導的物理介質隔離開來。

            • 使用 SCTP 優化網絡”(developerWorks,2006 年 2 月)介紹了一種非常有用的網絡協議:流控制傳輸協議,它的操作與 TCP 類似,但是增加了很多有用的特性,例如消息傳遞、 多宿主和多流。如果您對網絡協議感興趣,那么 Linux 與 BSD 一樣,都是一種非常好的操作系統。

            • Linux slab 分配器詳解” (developerWorks,2007 年 5 月)介紹了 Linux 內存管理中最有用的一個工具:slab 分配器。這種機制源自于 SunOS,不過它在 Linux 內核中找到了合適的位置。

            • 虛擬 Linux”(developerWorks,2006 年 12 月)介紹了 Linux 是如何充分利用具有虛擬化能力的處理器。

            • Linux 和對稱多處理”(developerWorks,2007 年 3 月)討論了 Linux 怎樣利用提供芯片級多處理能力的芯片。

            • 探索 Linux 內核虛擬機”(developerWorks,2007 年 4 月)介紹了最近引入內核的虛擬化技術,它可以將 Linux 內核轉換成其他虛擬化的操作系統的系統管理程序。

            • 有關在用戶空間對 Linux 進行編程的更多信息,請參考 Tim 撰寫的 GNU/Linux Application Programming 一書。

            • developerWorks Linux 專區 中可找到適合 Linux 開發人員的更多資源,包括 Linux 教程 以及上月 讀者最喜歡的 Linux 文章和教程

            • 隨時關注 developerWorks 技術活動和網絡廣播

            獲得產品和技術
            • 定購 SEK for Linux,共包含兩張 DVD,其中有用于 Linux 的最新 IBM 試用軟件,包括 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere®。

            • 利用可直接從 developerWorks 下載的 IBM 試用軟件 在 Linux 上構建您的下一個開發項目。


            討論


            關于作者

            M. tim jones

            M. Tim Jones 是一名嵌入式軟件工程師,他是 GNU/Linux Application ProgrammingAI Application Programming 以及 BSD Sockets Programming from a Multilanguage Perspective 等書的作者。他的工程背景非常廣泛,從同步宇宙飛船的內核開發到嵌入式架構設計,再到網絡協議的開發。Tim 是位于科羅拉多州 Longmont 的 Emulex Corp. 的一名顧問工程師。

            posted on 2008-03-06 15:35 Magic 閱讀(298) 評論(0)  編輯 收藏 引用 所屬分類: Linux
            思思久久99热只有频精品66| 色综合久久中文字幕综合网| 精品久久久久久无码专区 | 久久国产美女免费观看精品| 亚洲精品久久久www| 久久天天躁狠狠躁夜夜96流白浆 | 久久99精品国产麻豆婷婷| 国产亚洲成人久久| 久久国产色AV免费观看| 久久亚洲精品无码播放| 国产欧美久久一区二区| 国内精品久久久久影院薰衣草| 久久国产精品久久国产精品| 色播久久人人爽人人爽人人片AV| 国产成人综合久久综合| 国内精品久久久久久久久电影网 | 精品久久久久久久| 精品人妻伦九区久久AAA片69| 久久综合综合久久97色| 亚洲va中文字幕无码久久不卡| 久久有码中文字幕| 国产精品欧美久久久久天天影视 | 久久精品www| 国产精品久久久久久久人人看| 亚洲一本综合久久| 国产精品99久久久久久人| 亚洲精品无码专区久久久| 99久久国产亚洲综合精品| 久久综合久久性久99毛片| 久久久网中文字幕| 久久精品国产色蜜蜜麻豆 | 四虎国产精品成人免费久久| 欧美日韩中文字幕久久久不卡| 伊人久久综合热线大杳蕉下载| 99久久婷婷国产综合亚洲| 久久久久成人精品无码中文字幕 | 中文字幕日本人妻久久久免费| 亚洲人成无码www久久久| 性做久久久久久久久老女人| 人人狠狠综合久久亚洲| 波多野结衣久久一区二区|