Linux內核介紹

                           Linux內核介紹

嚴格來講,Linux這個詞本身只表示Linux內核,但實際上人們已經習慣了用Linux來形容整個基于Linux內核,并且使用GNU工程各種工具和數據庫的操作系統。所以,Linux真正的全名也可以叫做:GNU/Linux

Linux是一個一體化內核(monolithic kernel)系統?!皟群恕敝傅氖且粋€提供硬件抽象層、磁盤及文件系統控制、多任務等功能的系統軟件。一個內核不是一套完整的操作系統。一套基于Linux內核的完整操作系統叫作Linux操作系統,或是GNU/Linux。設備驅動程序可以完全訪問硬件。Linux內核的設備驅動程序可以方便地以模塊化(modularize)的形式設置,并在系統運行期間可直接裝載或卸載。

Linux內核的版本

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代表的不是開發版,而是穩定版!

1.1內核的功能

Linux內核的主要模塊(或組件)分以下幾個部分:內存管理、進程管理、文件系統、設備管理和驅動、網絡通信,系統調用等。

具體可以查看下圖,我覺得大致上應該將內核的功能全都描述出來了?,F在,我們分別介紹下:

              blob.png                                 

系統調用接口

系統調用就是一種特殊的接口。通過這個接口,用戶可以訪問內核空間。系統調用規定了用戶進程進入內核的具體位置。具體步驟:

用戶進程–>系統調用–>內核–>返回用戶空間。

系統調用就是為了解決上述問題而引入的,是提供給用戶的“特殊接口”。系統調用規定用戶進程進入內核空間的具體位置。

1.程序運行空間從用戶空間進入內核空間。

2. 處理完后再返回用戶空間。

所以我們大致可以知道,系統功能調用是操作系統提供給程序設計人員的一種服務。程序設計人員在編寫程序時,可以利用系統調用來請求操作系統的服務。而且通過觀察上圖我們也知道,調用系統調用接口進程需要從用戶形態切換到內核形態,那么進程之間想內核申請功能。而調用API接口進程則不需要切換形態,一直處于用戶層,用戶無須和內核打交道。

進程管理

進程是操作系統對一個正在運行的程序的一種抽象。在一個系統上可以同時運行多個進程,而每個進程都好像在獨占地使用硬件。而并發運行,則是說一個進程的指令和另一個進程的指令是交錯執行的。在大多數系統中,需要運行的進程數是多于可以運行它們的CPU 個數的。傳統系統在一個時刻只能執行一個程序,而先進的多核處理器同時能夠執行多個程序。無論是在單核還是多核系統中,一個CPU看上去都像是在并發地執行多個進程,這是通過處理器在進程間切換來實現的。操作系統實現這種交錯執行的機制稱為上下文切換。(相對于進程而言,上下文就是進程執行時的環境。具體來說就是各個變量和數據,包括所有的寄存器變量、進程打開的文件、內存信息等。)

所以我們可以這樣理解,系統將CPU分成了多個時間片,并且將這些時間片分配給進程使用。這就讓進程覺得自己在一個人使用著CPU資源。 如果進程在CPU分配的時間內還沒有完成任務,那么此任務就會暫停下來,等下CPU下一個周期的時間片的分配。

內存管理

這里就提一個虛擬地址空間的概念吧。虛擬存儲器是一個抽象概念,它為每個進程提供了一個假象,即每個進程都在獨占地使用主存。每個進程看到的是一致的存儲器,稱為虛擬地址空間。這樣做的好處就是:

進程與進程之間,進程與內核之間互相獨立,即進程不能修改內核的數據,也不能修改其它進程的數據。

文件管理

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

VFS 在用戶和文件系統之間提供了一個交換層,在 VFS 上面,是對諸如 open、close、read 和 write 之類的函數的一個通用 API 抽象。在 VFS 下面是文件系統抽象,它定義了上層函數的實現方式。

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

       這里我們到后面還會講述,現在有個概念就行。

網絡功能

至于網絡功能,我們這樣理解:內核以用戶進程的的名義來收發數據包,所以主機與主機之間的通信我們可以理解為進程與進程之間的通信

1.2 Linux的哲學思想

說到這里,我們來說一下Linux的哲學思想:

Linux的哲學思想:

    1、一切皆文件:把幾乎所有資源統統抽象為文件形式;包括硬件設備,甚至通信接口等;

    2、 由眾多功能單一的程序組成;一個程序只做一件事,并且做好;

           組合小程序完成復雜任務;

    3、盡量避免跟用戶交互;

           目標:易于以編程的方式實現自動化任務;

    4、使用文本文件保存配置信息;

至于這四點,我們可以先記著,當然,要是理解了它們的含義會更好,但是不理解也沒關系,相信日后學完再回過頭,我們遲早會理解的。

那么我們說Linux一切皆文件,這里問題來了,什么是文件?

文件就是字節序列,僅此而已。每個I/O 設備,包括磁盤、鍵盤、顯示器,甚至網絡,都可以視為文件。系統中的所有輸入輸出都是通過使用一小組稱為Unix I/O 的系統函數調用讀寫文件來實現的。

另外,我們要知道的是,抽象這個概念在計算機系統中尤為重要:例如,我們談到程序員在進行程序開發的時候,需要通過系統調用去實現某種功能,這種調用過于底層,而是程序的移植性也非常難。于是我們把這個接口抽象化,使用API接口來進行程序開發,這樣程序員需要某種功能時直接調用API中的共享庫就行,而不需要通過系統調用去重新編寫這個功能。再比如,文件則是對I/O設備的抽象,用戶應用程序與操作系統進行交互的方式取決于系統是如何有效的組織塊設備上的文件的,故而為什么需要文件系統來管理文件;另外,進程是資源分配的基本單位,它有屬于自己的虛擬地址空間,而虛擬地址空間則可以看作是對程序存儲的抽象

這里我們就大概了解一下,日后的學習相信還會更加深入的去理解學習。

1.3 Linux的發行版本

我們知道,linux負責開發的linux內核是由高級語言編寫的源代碼,并沒有進行編譯轉換成計算機所識別的二進制文件,所以這就造成了一般用戶的使用困難。為了讓使用者能夠接觸到linux,發行商或非營利團體就將linux內核和已經編譯好的二進制文件打包。再加上自己具有創意的工具程序。成為一個發行版。所以不同發行版,他們的內核是一樣的所以功能上可以說是大同小易。但是他們的程序包管理器可能不一樣。

那我們大致來說一下,一般來說,由發行商編譯好的應用程序,應該包括:

1.  二進制程序

2.  配置文件

3.  庫文件

4.  幫助文檔

這些文件通過程序包管理器所管理,比如安裝程序的時候,程序包管理器會將這四個文件分別放在他們應該呆的地方,刪除文件的時候的時候,又能從不同位置一一刪除。當然,后續我們會介紹的更詳細,這里有個概念就好。

目前,市場上三大主流的Linux發現版:Debian、Slackware、RedHat。下面我們來描述一下。

Debian

廣義的Debian是指一個致力于創建自由操作系統的合作組織及其作品,由于Debian項目眾多內核分支中以Linux宏內核為主,而且 Debian開發者所創建的操作系統中絕大部分基礎工具來自于GNU工程 ,所以“Debian” 常指Debian GNU/Linux。blob.png

Ubuntu

Ubuntu是基于Debian的二次衍生版。Ubuntu(烏班圖)是一個以桌面應用為主的Linux操作系統,基于Debian發行版和GNOME桌面環境,而從11.04版起,Ubuntu發行版放棄了Gnome桌面環境,改為Unity,與Debian的不同在于它每6個月會發布一個新版本。Ubuntu的目標在于為一般用戶提供一個最新的、同時又相當穩定的主要由自由軟件構建而成的操作系統。Ubuntu具有龐大的社區力量,用戶可以方便地從社區獲得幫助。2013年1月3日,Ubuntu正式發布面向智能手機的移動操作系統

blob.png





Mint

Linux Mint由Linux Mint Team團隊于2006年開始發行,是一份基于Ubuntu的二次衍生Linux發行版。其目標是提供一種更完整的即刻可用體驗,這包括提供瀏覽器插件、多媒體編解碼器、對DVD播放的支持、Java和其他組件,它也增加了一套定制桌面及各種菜單,一些獨特的配置工具,以及一份基于web的軟件包安裝界面。Linux Mint是對用戶友好而功能強大的操作系統。它誕生的目的是為家庭用戶和企業提供一個免費的,易用的,舒適而優雅的桌面操作系統。

blob.png





Knoppix      

KNOPPIX是基于Debian的二次衍生版,不必安裝,直接可以在硬盤上使用,它既可以用來當桌面工作站使用,也可以用來當網絡服務主機。KNOPPIX是使用特殊的壓縮技術,將約2GB的文件壓縮在一片700MB的光盤上,另外透過一支內附的小程式,還可以將光盤上的系統安裝到硬盤中。KNOPPIX在2000年時初步完成,今年是第三版,可以從網絡上下載ISO檔自行燒錄成光盤,并且允許自由散布與修改。

blob.png







Slackware

Slackware Linux是由Patrick Volkerding開發的GNU/Linux發行版。與很多其他的發行版不同,它堅持KISS(Keep It Simple Stupid)的原則。一開始,配置系統會有一些困難,但是更有經驗的用戶會喜歡這種方式的透明性和靈活性。 Slackware 很多特性體現出了KISS原則,最為有名的一些例子就是不依賴圖形界面的文本化系統配置、傳統的服務管理方式和不解決依賴的包管理方式。它的最大特點就是安裝靈活,目錄結構嚴謹,版本力求穩定而非追新。Slackware的軟件包都是通常的tgz(tar/gzip) 或者txz(xz) 格式文件再加上安裝腳本。Tgz/Txz 對于有經驗的用戶來說,比RPM更為靈活,并避免了APT 之類管理器可能帶來的的依賴地獄。那么要知道的是基于Slackware的二次衍生版有:SUSE。這里如有需要了解,請上網查閱相關資料。

blob.png





RedHat

Red Hat(紅帽)公司(NYSE:RHT)是一家開源解決方案供應商??偛课挥诿绹笨_來納州的羅利市,截止2015年3月3日,共有80多個分公司。紅帽公司為諸多重要IT技術如操作系統、存儲、中間件、虛擬化和云計算提供關鍵任務的軟件與服務。紅帽的開放源碼模式提供跨物理、虛擬和云端環境的企業運算解決方案,以幫助企業降低成本并提升效能、穩定性與安全性。紅帽公司同時也為全球客戶或通過領先合作伙伴為客戶提供技術支持、培訓和咨詢服務。

blob.png

CentOS

CentOS(Community Enterprise Operating System,中文意思是:社區企業操作系統)是Linux發行版之一,它是來自于Red Hat Enterprise Linux依照開放源代碼規定釋出的源代碼所編譯而成。由于出自同樣的源代碼,因此有些要求高度穩定性的服務器以CentOS替代商業版的Red Hat Enterprise Linux使用。兩者的不同,在于CentOS并不包含封閉源代碼軟件

blob.png






Fedora

Fedora 被紅帽公司定位為新技術的實驗場,與 Red Hat Enterprise Linux 被定位為穩定性優先不同。許多新的技術都會在 Fedora Core 中檢驗,如果穩定的話紅帽公司則會考慮 加入 Red Hat Enterprise Linux 中。Fedora 預計每年發布 2 次發行版本

blob.png






Gentoo

Gentoo是一個基于Linux的自由操作系統,它能為幾乎任何應用程序或需求自動地作出優化和定制。追求極限的配置、性能,以及頂尖的用戶和開發者社區,都是Gentoo體驗的標志特點。 Gentoo的哲學是自由和選擇。得益于一種稱為Portage的技術,Gentoo能成為理想的安全服務器、開發工作站、專業桌面、游戲系統、嵌入式解決方案或者別的東西——你想讓它成為什么,它就可以成為什么。

blob.png






      

ArchLinux

Arch Linux是起源于加拿大的一份致力于使用簡單、系統輕量、軟件更新速度快的GNU/Linux發行版。創始人Judd Vinet出于對Debian以及Red Hat的包管理器不滿,以及受CRUX影響而創立。最初針對i686,但是如今對x86_64也支持良好,而且還派生出了針對ARM平臺的Arch Linux ARM以及針對HURD內核的Arch Hurd(發展緩慢)。

blob.png



對于Linux的發現版有數百種,這里就不一一列舉了,我們這里學習的環境已CentOS為主,至于其他版本的Linux,我們可以有興趣去學習。



原創文章,作者:N24_小輝,如若轉載,請注明出處:http://www.www58058.com/54908

(2)
N24_小輝N24_小輝
上一篇 2016-10-27
下一篇 2016-10-27

相關推薦

  • 馬哥教育網絡班20期+第二周課程練習

    Table of Contents 1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 目錄管理 文件管理 2、bash的工作特性之命令執行狀態返回值和命令行展開所涉及的內容及其示例演示。 腳本返回值 命令或路徑補全和展開 3、請使用命令行展開功能來完成以下練習: (1)、創建/tmp目錄下的:a_c, a_d, b_c, b (2…

    Linux干貨 2016-06-23
  • rsyslog日志服務

    一、知識整理: 1、日志服務rsyslogd新特點:     多線程;     基于SSL/TLS/UDP/TCP/RELP網絡協議傳輸日志信息;     強大的過濾器,實現過濾日志信息中任何部分的內容;   &nbsp…

    Linux干貨 2016-10-24
  • ~~ 1;列出當前系統上所有已經登錄的用戶的用戶名,注意:同一用戶登錄多次,則只顯示 一次即可。 # who | cut -d" " -f 1 | sort -u 2;取出最后登錄到當前系統的用戶的相關信息 # id $(who | tail -1 |cut -d" " -f 1) # last | head -1 3…

    Linux干貨 2017-01-03
  • 22期第五周課堂練習

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; [root@localhost ~]# grep "^[[:space:]]\+" /boot/grub/grub.conf 2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又…

    Linux干貨 2016-09-08
  • shell通配符與正則表達式

        通配符是系統level的 而正則表達式需要相關工具的支持: egrep, awk, vi, perl。在文本過濾工具里,都是用正則表達式,比如像awk,sed等,是針對文件的內容的。通配符多用在文件名上,比如查找find,ls,cp,等等。 1.通配符       (1)…

    Linux干貨 2016-02-28

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-11-02 15:55

    內容格式把握得很好,希望可以將這段發展史和幾個關鍵性時間點熟知,加油!

欧美性久久久久