1.1 隨便先說下
Linux 內核非常龐大,我說的非常大并不是為了嚇唬大家,確實是非常多的代碼,超過 600 萬行的代碼,所以我寫文章介紹 Linux 內核,也不可能每一行代碼去分析,但是我會提煉其中的重點出來,告訴大家,Linux 內核的構成,包含哪些東西,我們不管學習什么,最關鍵的是學會其中的思想,但是我們如果什么都還不會的時候,可以學著由表透里,就像我打籃球一直不會后仰跳投,但是我可以把科比的研究一遍又一遍,總有一天我也能聽到自己打鐵的哐哐聲。
但是我希望我的文字略帶微笑著去面對這些代碼,去面對 Linux 森林,然后你從這個森林走出來后,可以明白森林里的有哪些路,你下一次想帶個妹子進去約會,可以找到屬于自己的旮旯。
雖然 Linux 內核非常龐大,但是橫向對比計算機的發展史, Linux 的歷史非常的簡短,計算機出現的時候,還沒有什么花里胡哨的包裝,都是光著身子跑,用技術的語言說就是它只能執行一個任務,執行一個進程,也可以叫“裸跑”,學習計算機的同學應該很快明白什么是裸機程序,裸機程序只可以讓一個進程使用硬件資源,這無形上對硬件資源的浪費。
可以拿我們的手機來比喻,裸機的話,我們玩王者榮耀的時候,有人打電話進來的話,王者榮耀是要被終止的,后來就有了操作系統,操作系統可以保證多任務執行,同樣的 CPU 芯片,有了操作系統,我可以開微信,QQ ,還同時做其他很多事情。
所以就出來了很多操作系統,操作系統我認為可以分為實時操作系統和通用操作系統,實時操作(RTOS 全稱Real Time Operating System)系統可以理解為對時間要求非常苛刻,可以用一個詞“必須”來理解,就是在某個時間片之內必須要做某件事情。
而通用操作系統,我們可以很常見,比如電腦 windows,Android 手機等,Linux 也可以認識是通用 OS,因為他們對時間上要求不是很嚴苛。
Linux 可以通過配置某個宏定義變成實時操作系統,但是我們使用 Linux 主要是針對他的通用 OS,多用戶,多任務等特別突出的性能。
世界上的嵌入式操作系統數不勝數,我有一個很厲害的師弟,前幾年也參與了一個國內嵌入式操作系統的開發,當然了,他們是以盈利為目的了,還有我認識的周立功先生,他們公司也研發了一個嵌入式操作系統,但是對于我們開發者來說,做項目的時候,選擇適合自己項目的系統就好了,對于學習來說,我認為,應該學習最先進的操作系統,這樣才能讓自己的技術有更大的先進性。
VxWorks 是美國 WindRiver 公司的產品,市場占有率比較高的嵌入式操作系統。VxWorks 實時操作系統由 400 多個相對獨立、短小精悍的目標模塊組成,用戶可根據需要選擇適當的模塊來裁剪和配置系統,具有優先級的任務調度、任務間同步與通信、中斷處理、定時器和內存管理等功能,符合 POSIX (可移植操作系統接口)規范的內存管理,多處理器控制程序,并且具有簡明易懂的用戶接口,在核心方面甚至町以微縮到 8 KB。
這個操作系統不敢吹太多,可以自己去了解下,因為穩定性太好了,應用到了航空,衛星,軍事等各個領域,實用性非常強,所以很多培訓機構也針對這個操作系統開了培訓課程。
μC/OS-II
μC/OS-II是在μC-OS的基礎上發展起來的,是美國嵌入式系統專家 Jean J.Labrosse 用 C 語言編寫的一個結構小巧、支持搶占式的多任務實時內核。μC/OS-II 能管理 64 個任務,并提供任務調度與管理、內存管理、任務間同步與通信、時間管理和中斷服務等功能,具有執行效率高、占用空間小、實時性能優良和可擴展性強等特點。
μClinux
μClinux 是一種優秀的嵌入式 Linux 版本,其全稱為 micro-control Linux,從字面意思看是指微控制 Linux。同標準的 Linux 相比,μClinux 的內核非常小,但是它仍然繼承了 Linux 操作系統的主要特性,包括良好的穩定性和移植性、強大的網絡功能、出色的文件系統支持、標準豐富的 API,以及 TCP/IP 網絡協議等。因為沒有 MMU 內存管理單元,所以其多任務的實現需要一定技巧。
eCos
eCos(embedded Configurable operating system),即嵌入式可配置操作系統。它是一個源代碼開放的可配置、可移植、面向深度嵌入式應用的實時操作系統。最大特點是配置靈活,采用模塊化設計,核心部分由小同的組件構成,包括內核、C 語言庫和底層運行包等。每個組件可提供大量的配置選項(實時內核也可作為可選配置),使用 eCos 提供的配置工具可以很方便地配置,并通過不同的配置使得 eCos 能夠滿足不同的嵌入式應用要求。
內核的工作
我們使用的計算機大家都知道是操作系統,那內核是什么呢?那我們先簡單說說操作系統,操作系統是面向用戶的,計算機用戶可以使用計算機操作系統來工作,聊天,玩游戲,我們使用的這些東西都是應用軟件,對應用程序來說,內核就是它的操作系統,這個系統可以為應用程序工作,管理應用程序。
內核還有一個比較重要的工作,就是管理應用,為應用程序準備好運行內存,管理應用程序的執行,讓應用程序通行無阻,當然了,這個是理想的情況,不理想的情況就是導致內存或者資源不夠用的情況,應用出現崩潰等異常。
除了管理應用以外,內核還需要管理硬件設備,Linux 內核下面有非常多的設備驅動代碼,如果一個內核開發工程師說他不懂設備驅動,那簡直就是一個笑話,內核跟 CPU 和硬件設備關系非常密切,在整個操作系統中的地位,具有承上啟下的作用。
1.2 UNIX 的誕生
生日:UNIX 在 1969 年出生。
他的父親和母親:是 Dennis Ritchie 和 Ken Thompson 兩個人擦出了靈感的火花創造出來的。
出生戶籍地址:貝爾實驗室
貝爾實驗室圖片
貝爾實驗室的logo
出生具體流程:
1965 年,貝爾實驗室要做一個項目,這個項目叫PDP-7計算機計劃,發起人是通用電氣和麻省理工學院,他們給這個操作系統起了一個漂亮的名字叫做「MULTICS 操作系統」("Multiplexed Information and Computing Service"的縮寫)。做事情總是有個計劃,他們給這個操作系統給出的計劃是,這個操作系統可以多個人使用,按照我們現在的人來說就是多用戶系統,多任務,多層次等等。
到了1969 年,發起人覺得這個進度太慢了,本來想早點制造出來我們好用來玩電腦游戲的,結果你們這幾個科學家整了這么久還是沒整出來,那只好停掉了,停掉了投資方就不再提供后備的資源了,留下的東西就自己瞎整吧,投資方也不管了。
計劃被停下來了,當時,Ken Thompson 在調試一個程序,這個程序名字叫做 “星級旅游”,這個程序運行在一個叫做 GE-635 的機器上面,但是因為這個機器的硬件設備比較落后,運行速度非常慢,這讓Ken Thompson感覺非常不爽,然后他發現之前做「PDP-7計算機計劃」項目的時候還有一臺PDP-7計算機,這個計算機就是圖片下面的那個計算機,當時應該沒有人想到計算機可以做到這么小,然后他們就把 GE-635 程序移植到 PDP-7 計算機上面。
到了1970年,PDP-7 可以運行 GE-635程序了,但是卻只能支持兩個用戶,當時 Brian Kernighan 就開玩笑的稱他們的系統是 “UNiplexed Information and Computing Service”,這個縮寫就是 UNICS,再后來,大家就取諧音,稱為 UNIX。所以1970 年可以稱為 UNIX元年。
湯姆遜和丹尼斯里奇
PDP-7計算機
1.3 BSD操作系統
伯克利軟件套件(英語:Berkeley Software Distribution,縮寫為 BSD ),也被稱為伯克利UNIX(Berkeley UNIX),是一個操作系統的名稱。衍生于UNIX(類UNIX),1970年代由伯克利加州大學的學生比爾·喬伊(Bill Joy)開創,也被用來代表其衍生出的各種套件。
BSD 常被當作工作站級別的 UNIX 系統,這得歸功于 BSD 用戶許可證非常地寬松,許多 1980 年代成立的計算機公司,不少都從 BSD 中獲益,比較著名的例子如 DEC 的 Ultrix,以及 Sun 公司的 SunOS。1990 年代,BSD 很大程度上被 System V 4.x 版以及 OSF/1 系統所取代,但其開源版本被采用,促進了因特網的開發。
BSD 比 Linux 早出現,穩定性和安全性都在 Linux 之上,甚至 Windows 和 OS X 都有來自 BSD 的代碼,但是現在一提到開源自由軟件,人們首先想到的是Linux,而不是資格更老的BSD。
UNIX創始人之一的 Ken Thompson 曾如此評價 Linux,「Linux不過是反微軟思潮下的產物」,這個家伙覺得 Linux 不可能有多大的成就,非常自信的覺得 BSD 在任何時候都可以擊敗 Linux,甚至覺得Linux 是一個低端和下流的操作系統內核。
但是事實證明,Linux 贏得了這場戰爭,有實力,也有些運氣,Linux 在發展的時候,BSD 當時正被官司纏上,沒有多余的心思應戰 Linux,而BSD腹背受敵的原因很明顯是因為他們的商業化,而Linux正是因為開源而更受全世界開發者的青睞。
一個事情的成功,90% 是由他的領導者決定的,就好像一個球隊能走多遠,隊長和教練可以決定它的深度,Linux 也一樣,Linus Torvalds 是位杰出的領袖人物,他成功的讓一群性格迥異的、絕非泛泛之輩的黑客共同合作開發,而沒有如其他開源項目一般分崩離棄。
還有一點,Linux 的硬件支持比 BSD 好,這在各種終端設備上來說簡直就是一種驚喜,隨著PC不斷被邊緣化,移動端的產品急需找到一款適合他們的操作系統,Linux 是最好不過的人選了。
GNU 的大力支持,GNU 的許可證與 BSD 不兼容,因此 Linux 的出現讓兩者完美結合,所以現在Linux 全名叫 GNU/Linux。
BSD 走的是教堂式的學院派路線,而 Linux 則是代表了市集式的駭客精神,BSD很自信,覺得自己是貴族出生,應該享受這世界上的榮華富貴,而Linux再一次驗證了農村包圍城市的必然性,成王敗寇,功敗垂成。
BSD原本就有極佳的根基,缺乏的可能是一點運氣,未來或許大有可為。
(點擊查看大圖)
1.4 GNU計劃的產生
因為 UNIX 操作系統的商業化,原來的 UNXI 系統已經不能再被隨意的使用,很多人都希望能有一款免費好用的操作系統,因為并不是每個人都很有錢,也不是每個人都有能力自己去寫操作系統,此時,理查·斯托曼在麻省理工學院人工智能實驗室發起 GNU 計劃,希望發展出一套完整的開放源代碼操作系統來取代 UNIX,計劃中的操作系統,名為 GNU。
1983年9月27日,理查·斯托曼在 net.UNIX-wizards 和 net.usoft 新聞組中公布這項計劃。在此項計劃中,開發出了很多我們現在熟悉的常用的工具,包括GNU編譯器套裝(GCC)、GNU的C庫(glibc)、以及 GNU 核心工具組(coreutils)。另外也是 GNU 除錯器(GDB)、GNU 二進制實用程序(binutils)的 GNU Cash shell中 和 GNOME 桌面環境。
當然,GNU計劃的目的還是開發出一款自由傳播的操作系統,這個操作系統的名字叫 Hurd,但是由于對操作系統的要求過高,以至于 Hurd 一直處于測試階段,本意是一個好事情,但是能力有限啊,開發的東西老是出bug,再好的創意那也是徒勞了。
不過 Linus 大神通過 GNU 發布了自己的 Linux 系統后,就火起來了,真的就一發不可收拾,這也是為什么 GNU 和 Linux 關系密切的原因。
1.5 UNIX 衍生系統發展圖
用文字來描述事實總是感覺有點欠缺,就好像兩個人發生爭執,可以通過吵嘴解決問題,也可以通過大家解決問題,但是我認為打架應該是最直接的,你說得再多也沒有槍桿子來得實在。
本書的重心主要放在 Linux 上,可以觀察 Linux 的發展軌跡,還是非常給力的,當然了,BSD 目前來說市場占有率不能跟 Linux 相提并論,但是他在整個 UNIX 上也有有著自己的一席之地的。
1.6 Linux的導火索MINIX
MINIX啟動界面
在 UNIX 產生后,版權在 AT&T 手里,在 Version 7 UNIX 發布之后,發布新的授權條款,將UNIX 源碼私有化,在大學不得再使用 UNIX 源碼,荷蘭阿姆斯特丹自由大學計算機科學系的塔能鮑姆教授(Andrew Stuart "Andy" Tanenbaum)為了教學,自己寫了一個類 UNIX 的小系統,命名為 MINIX(意為mini-UNIX)。
永遠不要小看任何一個人,如果這個人能夠編寫出自己的教學操作系統,你更加不要隨便惹他,你可能不可以,但是下面的這個家伙是可以的,大家可能都不知道什么是“宏內核”和“微內核”,但是這個家伙和 Linus 的辯論轟動一時,不管怎么說,Linux 應該是現在的勝利者,最直接的原因是開源,讓更多的開發者可以使用 Linux 內核移植到自己的設備上,包括 ARM 設備。
但是我們也不能抹殺 ast 的作用,在計算機系統的貢獻上,和教學的貢獻上,肯定是具有一席之地的,作為本文的撰寫者,他們都是我們的始祖,技術無國界,請收下我的膝蓋。
1.7 Linux 的出生
我們的主角人物,林納斯 托瓦茲(Linus Torvalds)1991年,林納斯·托瓦茲在赫爾辛基大學上學時,對操作系統很好奇。由于但是 386BSD 還沒有出來。可是他不喜歡他的 386 電腦上的 MS-DOS 操作系統,所以就安裝了 Minix,可對 Minix 只允許在教育上使用很不滿(在當時 Minix 不允許被用作任何商業使用),于是他便開始寫他自己的操作系統。
Linux 的第一個版本在 1991 年 9 月被大學 FTP server 管理員 Ari Lemmke 發布在 Internet上,最初 Torvalds 稱這個內核的名稱為 「Freax」,意思是自由「free」和奇異「freak」的結合字,并且附上「X」這個常用的字母,以配合所謂的類 UNIX 的系統。但是 FTP 服務器管理員嫌原來的命名「Freax」的名稱不好聽,把內核的稱呼改成「Linux」,當時僅有 10000 行代碼,仍必須運行于Minix操作系統之上,而且必須使用硬盤開機,隨后在10月份第二個版本(0.02版)發布,同時這位芬蘭赫爾辛基的大學生在 comp.os.minix 上發布這樣一則公告
Hello everybody out there using minix- I'm doing a (free) operation system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones. |
1994 年 3 月,Linux1.0 版正式發布。為了讓 Linux 可以在商業上使用,林納斯·托瓦茲決定更改他原來的協議(這個協議會限制商業使用),以 GNU GPL 協議來代替。之后許多開發者致力融合 GNU 元素到 Linux 中,做出一個有完整功能的、自由的操作系統。
80386 的芯片
80386的電腦
如果單憑林納斯一個人的力量,Linux 不可能發展到這個程度,我認為在那個時候,他做了一個非常正確的決定,就是「開源」,讓世界上更多的優秀程序員加入到他的事業當中,為了讓更多的人同步開發,林納斯還寫了 GIT ,這個讓很多協作開發者為之興奮的工具。
1.8 Linux的標志物
Linux 的標志和吉祥物是一只名字叫做 Tux 的企鵝,標志的由來是因為 Linus 在澳洲時曾被一只動物園里的企鵝咬了一口,便選擇企鵝作為 Linux的標志。更容易被接受的說法是:企鵝代表南極,而南極又是全世界所共有的一塊陸地。這也就代表 Linux 是所有人的 Linux。
曾經有一個笑話說林納斯被企鵝咬了之后,因為咬過的傷口會發炎,發炎的時候傷口會有點疼,晚上寫代碼想打瞌睡,但是就是因為這個炎癥的疼痛感刺激著自己,當然了,這個只是個傳說,傳說是否是真的,哪天大神心情好了可能會揭曉答案。
1.9 Linux的現狀
今天在 Linus Torvalds 帶領下,眾多開發共同參與開發和維護 Linux 內核。理查德·斯托曼領導的自由軟件基金會,繼續提供大量支持 Linux 內核的 GNU 組件。一些個人和企業開發的第三方的非 GNU 組件也提供對 Linux 內核的支持,這些第三方組件包括大量的作品,有內核模塊和用戶應用程序和庫等內容。Linux 社區或企業都推出一些重要的 Linux發行版,包括 Linux內核、GNU組件、非GNU組件,以及其他形式的的軟件包管理系統軟件。
目前這個階段,可以說每個人都脫離不開 Linux,好吧,肯定有人跑出來抬杠,我就問你,你手機底層是 Linux 內核你可知道,你說你用的是塞班手機,那里購物的云平臺,淘寶,亞馬遜等都是用 Linux 開發維護的,好吧你說你是個老板,買東西都是別人給你買的,那么你炒股吧,很多股票平臺都是基于 Linux 開發維護的。
1.10 為什么學習Linux
Linux 內核現在覆蓋的領域非常廣,手機、平板、路由器等等,就大家非常喜歡的蘋果操作系統,底層內核也是有 Linux的影子,Linux 的普及毋庸置疑,學習 Linux 應該作為每個技術人員的標配。
剛開始參加工作的時候,很多面試官都問我,你對 Linux 是不是非常懂,我每次都回答,我對 Linux 也是剛剛入門,但是我非常喜歡Linux ,而且我也會持續在 Linux 上面做研究,學習,我也喜歡和這些 Linux 愛好者一起探討問題。
學習完 Linux 內核你會對整個計算機體系有一個更深刻的認知,作為一個開發者,不管你從事的是驅動開發,應用開發,還是后臺開發,你都需要理解計算機操作系統和內核的運行機制,才可能更好的編寫你的代碼,出現更少的錯誤。
作為開發人員,不應該只局限在自己的小領域,因為你設計的模塊,看起來非常小,但是你不了解進程的調用機制,不知道進程會阻塞,就緒,執行幾個狀態,你怎么可能編寫好一個低容錯率的代碼呢?
-
內核
+關注
關注
3文章
1376瀏覽量
40316 -
Linux
+關注
關注
87文章
11317瀏覽量
209815 -
RTOS
+關注
關注
22文章
817瀏覽量
119714
原文標題:Linux是怎么來的?終于有一篇文章講清楚了
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論