爲什麼要學習Linux操作系統?

你好,我是你的老朋友劉超。在“趣談網絡協議”結課半年之後,我又給你帶來了一個新的基礎課程,“趣談Linux操作系統”。

在“趣談網絡協議”的開篇詞中,我表達了作爲一個合格的 IT工程師,在職業生涯中學習基礎知識的重要性。如果說當時,我對這件事只是一種感性認識,在專欄推出之後,我的想法有了一些變化。

我通過留言區和同學們進行了很多互動,也和其他做基礎知識專欄的作者有了不少交流,我發現,無論是從個人的職業發展角度,還是從公司招聘候選人的角度來看,紮實的基礎知識是很多人的訴求。這讓我更加堅信,我應該在“趣談“基礎知識這條道路上走下去。

目前極客時間的專欄,覆蓋了網絡、算法、數學、數據庫、編程語言等各個方面,而操作系統也是基礎中非常重要的一環。尤其我作爲一名雲架構師,Linux操作系統的基礎知識更是必不可少的。在實踐中收穫了很多心得之後,我希望在極客時間繼續跟你分享。

你可能會說,我們大學裏上過操作系統的課,而且每天都在用操作系統,爲什麼還要專門學一遍呢?儘管我的操作系統課成績不錯,但是在大學的時候,我和你的看法一樣,我覺得這門課沒有什麼用,現在回想起來可能有這樣幾個原因。

第一,大學裏普遍使用的操作系統是Windows,老師大多也用Windows。Windows的優勢是界面友好,很容易上手,於是我們就養成了要配置東西了就去菜單找,用鼠標點點的習慣,似乎會攢電腦、裝系統、配軟件就能搞定一切問題。

第二,一種操作系統對應的是一系列的軟件生態,而大學裏很多課程都是圍繞Windows軟件生態展開的。例如學C++用的是Vistual Studio,學數據庫用的是SQL Server,做網站用的是IIS等等。

第三,大學裏的操作系統課往往都是純講理論,講了很多原理,但是壓根兒沒法和平時用的Windows系統的行爲關聯起來,也根本弄不清操作系統在底層到底是怎麼做的。

直到畢業之後,我加入EMC,第一個項目就是基於Linux開發分佈式文件系統。你能想象,只能對着一個黑框敲命令時,我心中的崩潰嗎?我那時真的覺得,我大學的操作系統算是白學了。於是,我痛定思痛,開啓了學習Linux的征程。

一旦開始學,我發現,Linux對於編程世界來說,簡直就像一扇門。儘管門裏的知識浩如煙海,每一本書都厚如磚頭,但我發現這條路上任何一片景色都精彩無比。

打開Linux操作系統這扇門,你纔是合格的軟件工程師

根據2018年W3Techs的數據統計,對於服務器端,Unix-Like OS佔的比例近70%,其中Linux可以稱得上是中流砥柱。隨着移動互聯網的發展,客戶端基本上以Android和iOS爲主。Android是基於Linux內核的,因而客戶端也進入了Linux陣營。可以說,在編程世界中,Linux就是主流,不會Linux你就會格格不入。

那些火得不行的技術,什麼雲計算、虛擬化、容器、大數據、人工智能,幾乎都是基於Linux技術的。那些牛得不行的系統,團購、電商、打車、快遞,都是部署在服務端,也幾乎都是基於Linux技術的。

所以說,如果你想進大公司,想學新技術,Linux一定是一道繞不過去的坎。只有進入Linux操作系統這扇門,你才能成爲合格的軟件工程師。

研究Linux內核代碼,你能學到數據結構與設計模式的落地實踐

Linux最大的優點就是開源。作爲程序員,有了代碼,啥都好辦了。只要有足夠的耐心,我們就可以一層一層看下去,看內核調度函數,看內存分配過程。理論理解起來不容易,但是一行行的“if-else”卻不會產生歧義。

在Linux內核裏,你會看到數據結構和算法的經典使用案例;你甚至還會看到併發情況下的保護這種複雜場景;在實踐中遇到問題的時候,你可以直接參考內核中的實現。

例如,平時看起來最簡單的文件操作,通過閱讀Linux代碼,你能學到從應用層、系統調用層、進程文件操作抽象層、虛擬文件系統層、具體文件系統層、緩存層、設備I/O層的完美分層機制,尤其是虛擬文件系統對於接入多種類型文件系統的抽象設計,在很多複雜的系統裏面,這個思想都能用得上。

再如,當你寫代碼的時候,大部分情況下都可以使用現成的數據結構和算法庫,但是有些場景對於內存的使用需要限制到很小,對於搜索的時間需要限制到很小的時候,我們需要定製化一些數據結構,這個時候內核裏面這些實現就很有參考意義了。

瞭解Linux操作系統生態,能讓你事半功倍地學會新技術

Linux是一個生態,裏面豐富多彩。很多大牛都是基於Linux來開發各種各樣的軟件。可以這麼說,只要你能想象到的技術領域,幾乎都能在裏面找到Linux的身影。

數據庫MySQL、PostgreSQL,消息隊列RabbitMQ、Kafka,大數據Hadoop、Spark,虛擬化KVM、Openvswitch,容器Kubernetes、Docker,這些軟件都會默認提供Linux下的安裝、使用、運維手冊,都會默認先適配Linux。

因此,在Linux環境下,很容易能夠找到現成的工具,這不僅會讓你的工作事半功倍,還能讓你有親密接觸大牛思想的機會,這對於你個人的技術進步和職業發展都非常有益。

如果不進入Linux世界,你恐怕很難享受到開源軟件如此多的紅利。

考慮到以上這些,在設計“圖解Linux操作系統“這個專欄的時候,我主要秉承兩大原則,希望能夠幫你打開Linux操作系統這扇門。

第一個原則仍然是“趣談”。我希望通過故事化的方式,將枯燥的基礎知識結合某個場景,給你生動、具象地講述出來,幫你加深理解、鞏固記憶、夯實基礎。

操作系統是幹什麼的呢?我們都知道,一臺物理機上有很多硬件,最重要的就是CPU、內存、硬盤、網絡。同時,一臺物理機上也要跑很多程序,這些資源應該給誰用呢?當然是大家輪着用,誰也別獨佔,誰也別餓着。爲了完成資源分配這件事,操作系統承擔了一個“大管家”的作用。它將硬件資源分配給不同的用戶程序使用,並且在適當的時間將這些資源拿回來,再分配給其他的用戶進程。

鑑於操作系統這個“大管家”的角色,我設計了一個故事,將各個知識點串起來,來幫助你理解和記憶。

假設,我們現在就是在做一家外包公司,我們的目標是把這家公司做上市。其中,操作系統就是這家外包公司的老闆。我們把這家公司的發展階段分爲這樣幾個時期:

  • 初創期:這個老闆基於開放的營商環境(x86體系結構),創辦一家外包公司(系統的啓動)。因爲一開始沒有其他員工,老闆需要親自接項目(實模式)。
  • 發展期:公司慢慢做大,項目越接越多(保護模式、多進程),爲了管理各個外包項目,建立了項目管理體系(進程管理)、會議室管理體系(內存管理)、文檔資料管理系統(文件系統)、售前售後體系(輸入輸出設備管理)。
  • 壯大期:公司越來越牛,開始促進內部項目的合作(進程間通信)和外部公司合作(網絡通信)。
  • 集團化:公司的業務越來越多,會成立多家子公司(虛擬化),或者鼓勵內部創業(容器化),這個時候公司就變成了集團。大管家的調度能力不再侷限於一家公司,而是集團公司(Linux集羣),從而成功上市(從單機操作系統到數據中心操作系統)。

第二個原則就是圖解。Linux操作系統中的概念非常多,數據結構也很多,流程也複雜,一般人在學習的過程中很容易迷路。所謂“一圖勝千言”,我希望能夠通過圖的方式,將這些複雜的概念、數據結構、流程表現出來,爭取用一張圖串起一篇文章的知識點。最終,整個專欄下來,你如果能把這些圖都掌握了,你的知識就會形成體系和連接。在此基礎上再進行深入學習,就會如魚得水、易如反掌。

例如,這張圖就表示了文件操作在各個層的數據結構的關聯。只要你學完之後,能對着這張圖將它們之間的關係講清楚,對於文件系統的部分,你就會瞭然於心了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章