亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 780 | 回復: 0
打印 上一主題 下一主題

Linux 內核剖析 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-08-01 10:18 |只看該作者 |倒序瀏覽

Linux 內核剖析
歷史和體系結構分析




文檔選項





將此頁作為電子郵件發(fā)送


未顯示需要 JavaScript 的文檔選項
級別: 中級
M. Tim Jones
(
[email=mtj@mtjones.com?subject=Linux 內核剖析&cc=tomyoung@us.ibm.com]mtj@mtjones.com[/email]
), 顧問工程師, Emulex
2007 年 7 月 02 日
Linux® 內核是一個龐大而復雜的操作系統(tǒng)的核心,不過盡管龐大,但是卻采用子系統(tǒng)和分層的概念很好地進行了組織。在本文中,您將探索 Linux 內核的總體結構,并學習一些主要的子系統(tǒng)和核心接口。您還可以通過其他 IBM 文章的鏈接更深入地進行學習。
由于本文的目標是對 Linux 內核進行介紹并探索其體系結構和主要組件,因此首先回顧一下 Linux 的簡短歷史,然后從較高的層次審視 Linux 內核的體系結構,最后介紹它的主要子系統(tǒng)。Linux 內核具有超過 600 萬行的代碼,因此本文不可能進行完整的介紹。請使用指向其他內容的鏈接進一步學習。
Linux 的簡短歷史

Linux 還是 GNU/Linux?
您可能已經注意到 Linux 作為一個操作系統(tǒng)來說,有時會稱為 “Linux”,有時卻稱為 “GNU/Linux”。這背后的原因在于 Linux 實際上是操作系統(tǒng)的內核。使這個操作系統(tǒng)變得非常有用的大量應用程序是 GNU 軟件。例如,窗口系統(tǒng)、編譯器、各種 shell、開發(fā)工具、編輯器、實用工具以及內核之外的其他應用程序,其中很多都是 GNU 軟件。由于這個原因,很多人都認為 “GNU/Linux” 更適合作為操作系統(tǒng)的名字,而 “Linux” 則適合作為內核的名字。
盡管 Linux 絕對是最流行的開源操作系統(tǒng),但是相對于其他操作系統(tǒng)的漫長歷史來說,Linux 的歷史非常短暫。在計算機出現(xiàn)早期,程序員是使用硬件語言在裸硬件上進行開發(fā)的。缺少操作系統(tǒng)就意味著在某個時間只有一個應用程序(和一個用戶)可以使用這些龐大而又昂貴的設備。早期的操作系統(tǒng)是在 20 世紀 50 年代開發(fā)的,用來提供簡單的開發(fā)體驗。包括為 IBM 701 開發(fā)的 General Motors Operating System(GMOS)和 North American Aviation 為 IBM 709 開發(fā)的 FORTRAN Monitor System(FMS)。
在 20 世紀 60 年代,MIT(Massachusetts Institute of Technology)和一些公司為 GE-645 開發(fā)了一個名為 Multics(Multiplexed Information and Computing Service)的實驗性的操作系統(tǒng)。這個操作系統(tǒng)的開發(fā)者之一 AT&T 后來退出了 Multics,并在 1970 年開發(fā)了自己的名為 Unics 的操作系統(tǒng)。與這個操作系統(tǒng)一同誕生的是 C 語言,C 語言就是為此而開發(fā)的,然后它們使用 C 語言對操作系統(tǒng)進行了重寫,使操作系統(tǒng)開發(fā)具有可移植性。
二十年后,Andrew Tanenbaum 創(chuàng)建了一個微內核版本的 UNIX®,名為 MINIX(代表 minimal UNIX),它可以在小型的個人計算機上運行。這個開源操作系統(tǒng)在 20 世紀 90 年代激發(fā)了 Linus Torvalds 開發(fā) Linux 的靈感(請參看圖 1 所示)。
圖 1. 主要 Linux 內核發(fā)行版簡史


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




回頁首
Linux 內核簡介
現(xiàn)在讓我們從一個比較高的高度來審視一下 GNU/Linux 操作系統(tǒng)的體系結構。您可以從兩個層次上來考慮操作系統(tǒng),如圖 2 所示。
圖 2. GNU/Linux 操作系統(tǒng)的基本體系結構



系統(tǒng)調用接口(SCI)的方法
實際上,體系結構可能并不像圖 2 所示的一樣清晰。例如,處理系統(tǒng)調用(從用戶空間切換到內核空間)的機制可能在各個體系結構上都不相同。提供了對虛擬化指令支持的新型 x86 中央處理單元(CPU)在這方面要比使用傳統(tǒng) int 80h 方法的老式 x86 處理器更加高效。
最上面是用戶(或應用程序)空間。這是用戶應用程序執(zhí)行的地方。用戶空間之下是內核空間,Linux 內核正是位于這里。
GNU C Library (glibc)也在這里。它提供了連接內核的系統(tǒng)調用接口,還提供了在用戶空間應用程序和內核之間進行轉換的機制。這點非常重要,因為內核和用戶空間的應用程序使用的是不同的保護地址空間。每個用戶空間的進程都使用自己的虛擬地址空間,而內核則占用單獨的地址空間。 更多信息,請參看
參考資料
一節(jié)中的鏈接。
Linux 內核可以進一步劃分成 3 層。最上面是系統(tǒng)調用接口,它實現(xiàn)了一些基本的功能,例如 read 和 write。系統(tǒng)調用接口之下是內核代碼,可以更精確地定義為獨立于體系結構的內核代碼。這些代碼是 Linux 所支持的所有處理器體系結構所通用的。在這些代碼之下是依賴于體系結構的代碼,構成了通常稱為 BSP(Board Support Package)的部分。這些代碼用作給定體系結構的處理器和特定于平臺的代碼。




回頁首
Linux 內核的屬性
在討論大型而復雜的系統(tǒng)的體系結構時,可以從很多角度來審視系統(tǒng)。體系結構分析的一個目標是提供一種方法更好地理解源代碼,這正是本文的目的。
Linux 內核實現(xiàn)了很多重要的體系結構屬性。在或高或低的層次上,內核被劃分為多個子系統(tǒng)。Linux 也可以看作是一個整體,因為它會將所有這些基本服務都集成到內核中。這與微內核的體系結構不同,后者會提供一些基本的服務,例如通信、I/O、內存和進程管理,更具體的服務都是插入到微內核層中的。每種內核都有自己的優(yōu)點,不過這里并不對此進行討論。
隨著時間的流逝,Linux 內核在內存和 CPU 使用方面具有較高的效率,并且非常穩(wěn)定。但是對于 Linux 來說,最為有趣的是在這種大小和復雜性的前提下,依然具有良好的可移植性。Linux 編譯后可在大量處理器和具有不同體系結構約束和需求的平臺上運行。一個例子是 Linux 可以在一個具有內存管理單元(MMU)的處理器上運行,也可以在那些不提供 MMU 的處理器上運行。Linux 內核的 uClinux 移植提供了對非 MMU 的支持。更詳細信息請參看
參考資料
一節(jié)的內容。




回頁首
Linux 內核的主要子系統(tǒng)
現(xiàn)在使用圖 3 中的分類說明 Linux 內核的主要組件。
圖 3. Linux 內核的一個體系結構透視圖


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



內核是什么?

圖 3
所示,內核實際上僅僅是一個資源管理器。不管被管理的資源是進程、內存還是硬件設備,內核負責管理并裁定多個競爭用戶對資源的訪問(既包括內核空間也包括用戶空間)。
進程管理的重點是進程的執(zhí)行。在內核中,這些進程稱為線程,代表了單獨的處理器虛擬化(線程代碼、數據、堆棧和 CPU 寄存器)。在用戶空間,通常使用進程 這個術語,不過 Linux 實現(xiàn)并沒有區(qū)分這兩個概念(進程和線程)。內核通過 SCI 提供了一個應用程序編程接口(API)來創(chuàng)建一個新進程(fork、exec 或 Portable Operating System Interface [POSIX] 函數),停止進程(kill、exit),并在它們之間進行通信和同步(signal 或者 POSIX 機制)。
進程管理還包括處理活動進程之間共享 CPU 的需求。內核實現(xiàn)了一種新型的調度算法,不管有多少個線程在競爭 CPU,這種算法都可以在固定時間內進行操作。這種算法就稱為 O(1) 調度程序,這個名字就表示它調度多個線程所使用的時間和調度一個線程所使用的時間是相同的。 O(1) 調度程序也可以支持多處理器(稱為對稱多處理器或 SMP)。您可以在 ./linux/kernel 中找到進程管理的源代碼,在 ./linux/arch 中可以找到依賴于體系結構的源代碼。在
參考資料
一節(jié)中可以了解有關這個算法的更多內容。
內存管理
內核所管理的另外一個重要資源是內存。為了提高效率,如果由硬件管理虛擬內存,內存是按照所謂的內存頁 方式進行管理的(對于大部分體系結構來說都是 4KB)。Linux 包括了管理可用內存的方式,以及物理和虛擬映射所使用的硬件機制。
不過內存管理要管理的可不止 4KB 緩沖區(qū)。Linux 提供了對 4KB 緩沖區(qū)的抽象,例如 slab 分配器。這種內存管理模式使用 4KB 緩沖區(qū)為基數,然后從中分配結構,并跟蹤內存頁使用情況,比如哪些內存頁是滿的,哪些頁面沒有完全使用,哪些頁面為空。這樣就允許該模式根據系統(tǒng)需要來動態(tài)調整內存使用。
為了支持多個用戶使用內存,有時會出現(xiàn)可用內存被消耗光的情況。由于這個原因,頁面可以移出內存并放入磁盤中。這個過程稱為交換,因為頁面會被從內存交換到硬盤上。內存管理的源代碼可以在 ./linux/mm 中找到。
虛擬文件系統(tǒng)
虛擬文件系統(tǒng)(VFS)是 Linux 內核中非常有用的一個方面,因為它為文件系統(tǒng)提供了一個通用的接口抽象。VFS 在 SCI 和內核所支持的文件系統(tǒng)之間提供了一個交換層(請參看圖 4)。
圖 4. VFS 在用戶和文件系統(tǒng)之間提供了一個交換層


在 VFS 上面,是對諸如 open、close、read 和 write 之類的函數的一個通用 API 抽象。在 VFS 下面是文件系統(tǒng)抽象,它定義了上層函數的實現(xiàn)方式。它們是給定文件系統(tǒng)(超過 50 個)的插件。文件系統(tǒng)的源代碼可以在 ./linux/fs 中找到。
文件系統(tǒng)層之下是緩沖區(qū)緩存,它為文件系統(tǒng)層提供了一個通用函數集(與具體文件系統(tǒng)無關)。這個緩存層通過將數據保留一段時間(或者隨即預先讀取數據以便在需要是就可用)優(yōu)化了對物理設備的訪問。緩沖區(qū)緩存之下是設備驅動程序,它實現(xiàn)了特定物理設備的接口。
網絡堆棧
網絡堆棧在設計上遵循模擬協(xié)議本身的分層體系結構;叵胍幌,Internet Protocol (IP) 是傳輸協(xié)議(通常稱為傳輸控制協(xié)議或 TCP)下面的核心網絡層協(xié)議。TCP 上面是 socket 層,它是通過 SCI 進行調用的。
socket 層是網絡子系統(tǒng)的標準 API,它為各種網絡協(xié)議提供了一個用戶接口。從原始幀訪問到 IP 協(xié)議數據單元(PDU),再到 TCP 和 User Datagram Protocol (UDP),socket 層提供了一種標準化的方法來管理連接,并在各個終點之間移動數據。內核中網絡源代碼可以在 ./linux/net 中找到。
設備驅動程序
Linux 內核中有大量代碼都在設備驅動程序中,它們能夠運轉特定的硬件設備。Linux 源碼樹提供了一個驅動程序子目錄,這個目錄又進一步劃分為各種支持設備,例如 Bluetooth、I2C、serial 等。設備驅動程序的代碼可以在 ./linux/drivers 中找到。
依賴體系結構的代碼
盡管 Linux 很大程度上獨立于所運行的體系結構,但是有些元素則必須考慮體系結構才能正常操作并實現(xiàn)更高效率。./linux/arch 子目錄定義了內核源代碼中依賴于體系結構的部分,其中包含了各種特定于體系結構的子目錄(共同組成了 BSP)。對于一個典型的桌面系統(tǒng)來說,使用的是 i386 目錄。每個體系結構子目錄都包含了很多其他子目錄,每個子目錄都關注內核中的一個特定方面,例如引導、內核、內存管理等。這些依賴體系結構的代碼可以在 ./linux/arch 中找到。




回頁首
Linux 內核的一些有用特性
如果 Linux 內核的可移植性和效率還不夠好,Linux 還提供了其他一些特性,它們無法劃分到上面的分類中。
作為一個生產操作系統(tǒng)和開源軟件,Linux 是測試新協(xié)議及其增強的良好平臺。Linux 支持大量網絡協(xié)議,包括典型的 TCP/IP,以及高速網絡的擴展(大于 1 Gigabit Ethernet [GbE] 和 10 GbE)。Linux 也可以支持諸如流控制傳輸協(xié)議(SCTP)之類的協(xié)議,它提供了很多比 TCP 更高級的特性(是傳輸層協(xié)議的接替者)。
Linux 還是一個動態(tài)內核,支持動態(tài)添加或刪除軟件組件。被稱為動態(tài)可加載內核模塊,它們可以在引導時根據需要(當前特定設備需要這個模塊)或在任何時候由用戶插入。
Linux 最新的一個增強是可以用作其他操作系統(tǒng)的操作系統(tǒng)(稱為系統(tǒng)管理程序)。最近,對內核進行了修改,稱為基于內核的虛擬機(KVM)。這個修改為用戶空間啟用了一個新的接口,它可以允許其他操作系統(tǒng)在啟用了 KVM 的內核之上運行。除了運行 Linux 的其他實例之外, Microsoft® Windows® 也可以進行虛擬化。惟一的限制是底層處理器必須支持新的虛擬化指令。更多信息請參看
參考資料
一節(jié)的內容。


本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u/20619/showart_1099090.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP