⑴ 一張圖看懂linux內核運行交互關系,值得收藏!
很多朋友如果接觸過Linux的都知道Kernel的含義,kernel是操作系統的核心或者最重要的部分。眾所周知的是,幾乎整個互聯網都運行在 Linux上,從網路協議,到伺服器,到你平常訪問的絕大多數網站,都能看到它的身影段咐指,Linux 內核就是最復雜最流行的開源項目之一。
無意中看到MakeLinux 製作的Linux內核交互圖,講的很全面,這里分享給大家。
俗話說「一圖勝千言」,下面通過一張完整的 Linux 內核運行原理圖,可以很方便地讓你學習內核知識。在 Linux 內核中,有許多層次、模塊、功能調用和函數。要把其中的每一塊兒都弄握配明白是很不容易的,MakeLinux做了一個非常酷的完整的內核交互圖,上面非常清晰地標注了每一個組件部分及之間的關系,這張Linux內核交互圖可以很好的幫助你不用一一細讀 Linux 內核代碼,就能弄明白各個內核子系統間復雜的內部聯系。因為比較大,所以這里我做個拆分。
這張圖上包含有超過400個關鍵簡判函數,這400個關鍵函數被分進了一些主要的子系統,彼此之間的關系用連線標明了,清晰明了。
考慮到很多朋友可能需要原圖,所以放網路雲了,大家私信 「內核」 就可以領取了。也希望大家幫忙多多轉發,謝謝~
⑵ linux操作系統的內核有哪幾個子系統組成,簡要說明各子系統的作用
Linux是一個一體化內核(monolithic kernel)系統。「內核」指的是一個提供硬體抽象層、磁碟及文件系統控制、多任務等功能的系統軟體。
一個內核不是一套完整的操作系統。一套基於Linux內核的完整操作系統叫作Linux操作系統,或是GNU/Linux。設備驅動程序可以完全訪問硬體。Linux內的設備驅動程序可以方便地以模塊化(molarize)的形式設置,並在系統運行期間可直接裝載或卸載。
Linux內核的主要模塊(或組件)分以下幾個部分:存儲管理、CPU和進程管理、文件系統、設備管理和驅動、網路通信,以及系統的初始化(引導)、系統調用等。
版本號Linux內核使用三種不同的版本編號方式。
第一種方式用於1.0版本之前(包括1.0)。第一個版本是0.01,緊接著是0.02、0.03、0.10、0.11、0.12、0.95、0.96、0.97、0.98、0.99和之後的1.0。
第二種方式用於1.0之後到2.6,數字由三部分「A.B.C」,A代表主版本號,B代表次主版本號,C代表較小的末版本號。只有在內核發生很大變化時(歷史上只發生過兩次,1994年的1.0,1996年的2.0),A才變化。
可以通過數字B來判斷Linux是否穩定,偶數的B代表穩定版,奇數的B代表開發版。C代表一些bug修復,安全更新,新特性和驅動的次數。
以版本2.4.0為例,2代表主版本號,4代表次版本號,0代表改動較小的末版本號。在版本號中,序號的第二位為偶數的版本表明這是一個可以使用的穩定版本,如2.2.5,而序號的第二位為奇數的版本一般有一些新的東西加入。
是個不一定很穩定的測試版本,如2.3.1。這樣穩定版本來源於上一個測試版升級版本號,而一個穩定版本發展到完全成熟後就不再發展。
第三種方式從2004年2.6.0版本開始,使用一種「time-based」的方式。3.0版本之前,是一種「A.B.C.D」的格式。七年裡,前兩個數字A.B即「2.6」保持不變,C隨著新版本的發布而增加,D代表一些bug修復,安全更新,添加新特性和驅動的次數。
3.0版本之後是「A.B.C」格式,B隨著新版本的發布而增加,C代表一些bug修復,安全更新,新特性和驅動的次數。第三種方式中不再使用偶數代表穩定版,奇數代表開發版這樣的命名方式。舉個例子:3.7.0代表的不是開發版,而是穩定版!
⑶ linux內核主要由哪幾個部分組成
一個完整的Linux內核一般由5部分組成,它們分別是內存管理、進程管理、進程間通信、虛擬文件系統和網路介面。
1、內存管理
內存管理主要完成的是如何合理有效地管理整個系統的物理內存,同時快速響應內核各個子系統對內存分配的請求。
Linux內存管理支持虛擬內存,而多餘出的這部分內存就是通過磁碟申請得到的,平時系統只把當前運行的程序塊保留在內存中,其他程序塊則保留在磁碟中。在內存緊缺時,內存管理負責在磁碟和內存間交換程序塊。
2、進程管理
進程管理主要控制系統進程對CPU的訪問。當需要某個進程運行時,由進程調度器根據基於優先順序的調度演算法啟動新的進程。:Linux支持多任務運行,那麼如何在一個單CPU上支持多任務呢?這個工作就是由進程調度管理來實現的。
在系統運行時,每個進程都會分得一定的時間片,然後進程調度器根據時間片的不同,選擇每個進程依次運行,例如當某個進程的時間片用完後,調度器會選擇一個新的進程繼續運行。
由於切換的時間和頻率都非常的快,由此用戶感覺是多個程序在同時運行,而實際上,CPU在同一時間內只有一個進程在運行,這一切都是進程調度管理的結果。
3、進程間通信
進程間通信主要用於控制不同進程之間在用戶空間的同步、數據共享和交換。由於不用的用戶進程擁有不同的進程空間,因此進程間的通信要藉助於內核的中轉來實現。
一般情況下,當一個進程等待硬體操作完成時,會被掛起。當硬體操作完成,進程被恢復執行,而協調這個過程的就是進程間的通信機制。
4、虛擬文件系統
Linux內核中的虛擬文件系統用一個通用的文件模型表示了各種不同的文件系統,這個文件模型屏蔽了很多具體文件系統的差異,使Linux內核支持很多不同的文件系統。
這個文件系統可以分為邏輯文件系統和設備驅動程序:邏輯文件系統指Linux所支持的文件系統,例如ext2、ext3和fat等;設備驅動程序指為每一種硬體控制器所編寫的設備驅動程序模塊。
5、網路介面
網路介面提供了對各種網路標準的實現和各種網路硬體的支持。網路介面一般分為網路協議和網路驅動程序。網路協議部分負責實現每一種可能的網路傳輸協議。
網路設備驅動程序則主要負責與硬體設備進行通信,每一種可能的網路硬體設備都有相應的設備驅動程序。
(3)linux的內核結構圖擴展閱讀:
Linux 操作系統的誕生、發展和成長過程始終依賴著五個重要支柱:UNIX操作系統、MINIX操作系統、GNU計劃、POSIX標准和Internet 網路。
1981 年IBM公司推出微型計算機IBM PC。
1991年,GNU計劃已經開發出了許多工具軟體,最受期盼的GNU C編譯器已經出現,GNU的操作系統核心HURD一直處於實驗階段,沒有任何可用性,實質上也沒能開發出完整的GNU操作系統,但是GNU奠定了Linux用戶基礎和開發環境。
1991年初,林納斯·托瓦茲開始在一台386sx兼容微機上學習minix操作系統。1991年4月,林納斯·托瓦茲開始醞釀並著手編制自己的操作系統。
1991 年4 月13 日在comp.os.minix 上發布說自己已經成功地將bash 移植到了minix 上,而且已經愛不釋手、不能離開這個shell軟體了。
1993年,大約有100餘名程序員參與了Linux內核代碼編寫/修改工作,其中核心組由5人組成,此時Linux 0.99的代碼大約有十萬行,用戶大約有10萬左右。
1994年3月,Linux1.0發布,代碼量17萬行,當時是按照完全自由免費的協議發布,隨後正式採用GPL協議。
1995年1月,Bob Young創辦了RedHat(小紅帽),以GNU/Linux為核心,集成了400多個源代碼開放的程序模塊,搞出了一種冠以品牌的Linux,即RedHat Linux,稱為Linux"發行版",在市場上出售。這在經營模式上是一種創舉。
2001年1月,Linux 2.4發布,它進一步地提升了SMP系統的擴展性,同時它也集成了很多用於支持桌面系統的特性:USB,PC卡(PCMCIA)的支持,內置的即插即用,等等功能。
2003年12月,Linux 2.6版內核發布,相對於2.4版內核2.6在對系統的支持都有很大的變化。
2004年的第1月,SuSE嫁到了Novell,SCO繼續頂著罵名四處強行「化緣」, Asianux, MandrakeSoft也在五年中首次宣布季度贏利。3月,SGI宣布成功實現了Linux操作系統支持256個Itanium 2處理器。
⑷ 什麼是Linux系統架構
您好很高興回答您的問題:
Linux系統架構分為兩個部分一個是單台Linux系統架構 另外一個是網站集群架構.
單台Linux系統架構:
由硬體,內核,命令解釋器,外圍軟體組成
網站集群架構
⑸ Linux操作系統由什麼組成
Linux系統結構一般有3個主要部分:內核kernel、命令解釋層Shell或其他操作環境、實用工具
1.Linux內核
內核是系統的核心,是運行程序和管理磁碟、列印機等硬體設備的核心程序。操作系統向用戶提供一個操作界面,它從用戶那裡接收命令,並且把命令送給內核去執行。
當 Linux安裝完畢之後,一個通用的內核就被安裝到主機中,這個通用內核能滿足絕大部分用戶的需求,但普遍適用性內核對具體的某台主機來說,可能有一些並不需要的內核程序將被安裝。因此,Linux允許用戶根據主機的實際配置定製 Linux的內核,從而有效地簡化 Linux內核,提高系統啟動速度。
2.Linux Shell
Shell是系統的用戶界面,提供了用戶與內核進行交互操作的介面。它接收用戶輸入的命今,並且把它送入內核執行。操作系統在系統內核與用戶之間提供操作界面, Linux存在多種操作環境,分別是基於圖形界面的集成桌面環境和基於Shell命令行環境。
Shell是一個命令解釋器,它解釋由用戶輸入的命令,並且送到內核。Shell編程語言具有普通編程語言的很多特點,如它也有循環結構和分支控制結構等,用這種編程語言編寫的Shell程序與其他應用程序具有同樣的效果。
作為命令行操作界面的替代, Linux還提供了像 Windows那樣的可視化圖形界面X-window的圖形用戶界面。
3.實用工具
標準的 Linux系統都有配套的實用工具程序,如編輯器、瀏覽器、辦公套件及其它系統管理工具等,用戶可以自行編寫需要的應用程序。
⑹ Linux內核中sk_buff結構詳解
sk_buff是Linux網路中最核心的結構體,它用來管理和控制接收或發送數據包的信息。各層協議都依賴於sk_buff而存在。內核中sk_buff結構體在各層協議之間傳輸不是用拷貝sk_buff結構體,而是通過增加協議頭和移動指針來操作的。如果是從L4傳輸到L2,則是通過往sk_buff結構體中增加該層協議頭來操作;如果是從L4到L2,則是通過移動sk_buff結構體中的data指針來實現,不會刪除各逗簡層協議頭。這樣做是為了提高CPU的工作效率。
skb_buff結構如下所示:
這里要聲明兩個概念的區別,後續直接用這兩個概念,注意區分:
(1)線性數據:head - end。
(2)實際山早褲線性數據:data - tail,不包含線性數據中的頭空間和尾空間。
skb->data_len : skb中的分片數據(非線性數據)的長度。
skb->len : skb中的數據塊的總長度,數據塊包括實際線性數據和非線性數據,非線性數據為data_len,所以skb->len= (data - tail) + data_len。
skb->truesize : skb的總長度,包括sk_buff結構和數據部分,skb=sk_buff控制信息 + 線性數據(包括頭空間和尾空間) + skb_shared_info控制信息 + 非線性數據,所以skb->truesize = sizeof(struct sk_buff) + (head - end) + sizeof(struct skb_shared_info) + data_len。
sk_buff結構體中的都是sk_buff的控制信息,是網路數據包的一些配置,真正儲存數據的是sk_buff結構體中幾個指針指向的數據區中,線性數據區的大小 = (skb->end - skb->head),對於每個數據包來說這個大小都是固定不變的,在傳輸過程中skb->end和skb->head所指向的地址都是不變的,這里要注意這個地址不是本機的地址,如果是本機的地址那麼數據包傳到其他主機上這個地址就是無效的,所以這個地址是這個skb緩沖區的相對地址。
線性數據區是用來存放各層協議頭部和應用層發下來的數據。各層協議頭部相關信息放在線性數據區中。實際數據指針為data和tail,data指向實際數據開始的地方,tail指向實際數據結束的地方。
用一張圖來表示sk_buff和數據區的關系:
這一節介紹先行數據區在sk_buff創建過程中的變化,圖中暫時省略了非線性數據區:
2.1中所講的都是線性數據區中的相關的配置,當線性數據區不夠用的時候就會啟用非線性數據區作為數據區域的擴展,skb中用skb_shared_info分片結構體來配置非線性數據。
skb_shared_info結構體是和skb中的線性數據區一體的,所以在skb的各種操作時都會把這兩個結構看作是一個結構來操作。如:
skb_shared_info結構:
非線性數據區有兩種不同的構成數據的方式
(1)睜稿用數組存儲的分片數據區,採用是是結構體中的frags[MAX_SKB_FRAGS]
對於frags[]一般用在當數據比較多,在線性數據區裝不下的時候,skb_frag_t中是一頁一頁的數據,skb_frag_struct結構體如下:
下圖顯示了frags是怎麼分配分片數據的:
(2)frag_list指針來指向的分片數據:
參考:
⑺ linux內核是什麼,有啥作用 ,
Linux是一種開源電腦操作系統內核。它是一個用C語言寫成,符合POSIX標準的類Unix操作系統。
操作系統是一個用來和硬體打交道並為用戶程序提供一個有限服務集的低級支撐軟體。一個計算機系統是一個硬體和軟體的共生體,它們互相依賴,不可分割。
計算機的硬體,含有外圍設備、處理器、內存、硬碟和其他的電子設備組成計算機的發動機。但是沒有軟體來操作和控制它,自身是不能工作的。完成這個控制工作的軟體就稱為操作系統,在Linux的術語中被稱為「內核」,也可以稱為「核心」。
Linux內核的主要模塊(或組件)分以下幾個部分:存儲管理、CPU和進程管理、文件系統、設備管理和驅動、網路通信,以及系統的初始化(引導)、系統調用等。
(7)linux的內核結構圖擴展閱讀:
Linux內核的特性
1、可移植性
Linux是全球被最廣泛移植的操作系統內核。從掌上電腦iPad到巨型電腦IBM S/390,甚至於微軟出品的游戲機XBOX都可以看到Linux內核的蹤跡。Linux也是IBM超級計算機Blue Gene的操作系統。
2、網路支持
作為一個生產操作系統和開源軟體,Linux 是測試新協議及其增強的良好平台。Linux 支持大量網路協議,包括典型的 TCP/IP,以及高速網路的擴展(大於 1 Gigabit Ethernet [GbE] 和 10 GbE)。Linux 也可以支持諸如流控制傳輸協議(SCTP)之類的協議,它提供了很多比 TCP 更高級的特性(是傳輸層協議的接替者)。
3、動態內核
Linux 還是一個動態內核,支持動態添加或刪除軟體組件。被稱為動態可載入內核模塊,它們可以在引導時根據需要(當前特定設備需要這個模塊)或在任何時候由用戶插入。
4、系統管理程序
Linux 最新的一個增強是可以用作其他操作系統的操作系統。該系統對內核進行了修改,稱為基於內核的虛擬機(KVM)。這個修改為用戶空間啟用了一個新的介面,它可以允許其他操作系統在啟用了 KVM 的內核之上運行。除了運行 Linux 的其他實例之外, Microsoft® Windows® 也可以進行虛擬化。惟一的限制是底層處理器必須支持新的虛擬化指令。