小白如何學習作業系統?

程式設計師cxuan發表於2020-07-16

很多讀者問我如何學習作業系統?推薦幾本作業系統可以看的書?作業系統都需要學什麼?有哪些視訊可以看嗎?下面我就針對性的對這些問題做一下我自己的闡述。

學習作業系統不是為了讓你設計一個作業系統,而是為了讓你更好的瞭解其執行原理。

如果你覺得作業系統有些難度的話,強烈推薦看一下我的這本 PDF。

程式設計師必知核心基礎知識

這個 PDF 能讓你對計算機的硬體和執行原理有基本的入門。

這本 PDF 可以說是對任何小白都適用了,如果你能看完,就說明你有一定的基礎了,可以正式入門作業系統了。

我學習作業系統是根據機械工業出版社的《現代作業系統》第四版學習的。我是根據中文版和英文版結合來看的,看完你可能會很懵逼,但是沒關係,就一句話很重要。

花 200 - 300 小時入門一門課程,然後在你職業生涯中,不時溫習其中的精髓

作業系統學習之旅

下面是作業系統的大綱

先對上面作業系統大綱有個印象,下面我會對每個章節放上我的文章和學習重點

第一章 作業系統概述

在這一章節,你需要知道

  • 什麼是作業系統?什麼是計算機系統?作業系統有什麼用?作業系統滿足了什麼需求?什麼是核心態和使用者態?
  • 計算機都有哪些硬體?它們各自的作用是什麼?記憶體的層次模型是什麼?多執行緒和多核晶片的關係?為什麼會出現快取記憶體?磁碟的構造是什麼?I/O 的三種方式是什麼?中斷的處理過程?匯流排是什麼?
  • 都有哪些作業系統?
  • 作業系統都有哪幾類抽象?程式是什麼?什麼是地址空間?檔案是什麼?什麼是 shell?
  • 系統呼叫是什麼?系統呼叫的分類
  • 作業系統的結構有哪些?單體系統、分層系統、微核心、客戶-伺服器模式都是什麼意思?

你可以從下面我的文章中找到答案

寫給大忙人看的作業系統

第二章 程式和執行緒

在這一章節,你需要知道下面這些內容

  • 程式模型?程式建立的方式有幾種?程式的終止方式?Unix 和 Windows 體系結構一樣嗎?什麼是上下文切換?程式有哪幾種實現?
  • 並行和併發一樣嗎?
  • 執行緒和程式一樣嗎?有了程式為什麼還要有執行緒?什麼是 POXIS 執行緒?執行緒實現有幾種方式?
  • 程式間通訊有幾種方式?競態條件是什麼?臨界區是什麼?
  • 作業系統是如何排程的?程式有哪些行為?排程演算法有哪些?排程的分類?

你可以從我下面這篇文章中找到答案

寫給大忙人看的程式和執行緒

第三章 記憶體管理

在這一章,你需要知道下面這些知識點

  • 什麼是無儲存器抽象?
  • 什麼是有儲存器抽象?什麼是地址空間的概念?如何管理空閒記憶體空間?有哪些管理演算法?
  • 頁面置換演算法有哪些?頁面置換演算法的優劣性對比?如何選擇?
  • 什麼是虛擬記憶體?為什麼能執行比系統記憶體還多的程式?什麼是頁和頁表?記憶體如何載入資料?頁表的結構是什麼?如何優化/加速分頁過程?如果頁表特別大,該採取哪種方式進行優化?

你可以從我下面這篇文章中找到答案

作業系統記憶體管理

第四章 檔案系統管理

在這一章,你需要知道下面這些知識點

  • 什麼是檔案?檔案是一種抽象嗎?檔案的命名是怎樣的?檔案的結構是什麼?檔案有哪些型別?檔案如何訪問?屬性是什麼?檔案如何操作?
  • 什麼是一級語錄系統?路徑名是什麼?
  • 檔案系統佈局是怎樣的?檔案系統實現有哪幾種方式?inode 是什麼?
  • 檔案系統的管理和優化是什麼?磁碟空間是如何管理的?檔案備份是什麼?如何進行檔案備份?
  • 如何優化檔案系統效能?

你可以從我下面這篇文章中找到答案

簡直不要太硬了!一文帶你徹底理解檔案系統

第五章 I/O 管理

在這一章,你需要知道下面這些知識點

  • I/O 裝置都分為哪幾類?各自的優缺點是什麼?什麼是記憶體對映I/O ,它的優缺點是什麼?什麼是 DMA? DMA 的工作原理?什麼是中斷?中斷有哪些分類,各自是什麼意思,如何解釋?
  • I/O 的軟體目標是什麼?有哪幾類 I/O 方式?
  • I/O 層次結構如何劃分?
  • 磁碟是如何工作的?磁碟的構造?磁碟排程演算法有哪些?磁碟如何處理錯誤?
  • 什麼是時鐘?各自解釋一下時鐘硬體、軟體和定時器?

你可以從我下面這篇文章中找到答案

肝了很久!一文了解作業系統 I/O

第六章 死鎖詳解

  • 作業系統是如何定義資源的?什麼是可搶佔資源和不可搶佔資源?
  • 死鎖的模型,死鎖有哪幾種型別?
  • 什麼是鴕鳥演算法?
  • 死鎖如何檢測?通過哪幾種方式恢復死鎖?
  • 如何避免死鎖?
  • 如何破壞死鎖?
  • 什麼是資源死鎖?除此之外還有哪些死鎖方式?

你可以從我下面這篇文章中找到答案

寫給大忙人看的死鎖詳解

作業系統概念和麵試題

如果你看完計算機必知的核心基礎知識後還是感覺有些吃力,不妨先看看我整理的作業系統核心概念

我寫了一份作業系統詞典送給你!

還有為你準備的作業系統面試題

看完這篇作業系統,和麵試官扯皮就沒問題了

作業系統學習資料

開源專案

首先給大家推薦一個非常好的開源專案

自學電腦科學

你不僅僅可以找到作業系統相關的資源,你還可以找到其他計算機黑皮書資源

裡面有一句話非常提神

如果你是一個自學成才的工程師,或者從程式設計培訓班畢業,那麼你很有必要學習電腦科學。幸運的是,不必為此花上數年光陰和不菲費用去攻讀一個學位:僅僅依靠自己,你就可以獲得世界一流水平的教育。

為什麼有的人說學習計算機基礎沒有必要?現在看來簡直是天方夜譚

軟體工程師分為兩種:一種充分理解了電腦科學,從而有能力應對充滿挑戰的創造性工作;另一種僅僅憑著對一些高階工具的熟悉而勉強應付。

這兩種人都自稱軟體工程師,都能在職業生涯早期掙到差不多的工資。然而,隨著時間流逝,第一種工程師不斷成長,所做的事情將會越來越有意義且更為高薪,不論是有價值的商業工作、突破性的開源專案、技術上的領導力或者高質量的個人貢獻。

學習視訊

除此之外,我在 B 站上也給大家找來了一些學習視訊

機械工業黑皮書系列 B 站視訊

《現代作業系統》:https://www.bilibili.com/video/av9555596?from=search&seid=8107077283516919308

《演算法導論》:https://www.bilibili.com/video/av48922404?from=search&seid=10653982037326460685

《深入理解計算機系統》:https://www.bilibili.com/video/av31289365?from=search&seid=16298868573410423104

《計算機網路:自頂向下方法》:https://www.bilibili.com/video/av41404195?from=search&seid=15854652450440912260

《計算機程式的構造和解釋》:https://www.bilibili.com/video/av8515129?from=search&seid=537958487190286356

《編譯原理》:https://www.bilibili.com/video/av17649289?from=search&seid=5673462623145874347

《資料庫系統概念》:https://www.bilibili.com/video/BV1PJ411F78b?from=search&seid=2655021297331616552

作業系統書籍推薦

作業系統網站推薦

給大家推薦一些我在學習作業系統這門課的過程中,經常參考的網站

一般很少有人推薦作業系統的網站吧。。。。。。這幾個網站來源於我平常的學習總結,也有一些是來源於網上優秀的回答,希望這幾個網站能夠助力你對作業系統有更深的認識。

studytonight

studytonight 簡直太棒了!!! studytonight 會包括 operationg system,但是並不是說 studytonight 就是一個單純的 OS 學習網站,它是一個基礎教程網,它的首頁是這樣的,不僅限於 os ,還會包括 Java、C、CSS、OS、Computer network 等

這個頁面一看就愛上了,和國內很多頁面做的硬風格不同,這樣的教程才不那麼生硬和讓人討厭。在所有的素材庫裡面,有各種各樣的教程

我們推薦的是作業系統,所以索性就點進去作業系統主頁好了,點進去的頁面就是這樣的

studytonight 是一個對初學者來說學習作業系統的一個很友好的網站。

課程藝術主要分為三部分,由易到難分別是基礎篇、中等篇、提高篇,我們點進去基礎篇的第一篇


這一篇主要是對作業系統的介紹,作業系統的功能、作業系統任務等

通過簡單的描述和圖片來說明,讓人感覺清晰易懂,很有目的性的學習,而且這些主題也可以作為面試題來考

你還真說對了,studytonight 還真的就有面試題

我們在 Test 頁簽下面會發現有很多面試題

我們選擇 Operating System 進去之後會發現有很多的測試

是一個一體化的學習平臺,適用於新手,我大致翻看了一下,裡面的東西比較基礎,受眾廣,是大家學習必備的一個網站。

udacity

udacity 是一個視訊學習網站,介面看起來很清爽。

下面還有關於課程的介紹,同時你可以開始免費的課程,這個介面就是中文版了,讓人眼前一亮

我的課程 就是你學過的所有課程,你可以在所有課程中搜尋指定的課程,種類非常多

我們還是以作業系統為例,來看一下具體的課程

左面是具體的課程列表,右面是講師授課部分,視訊非常清晰,而且講師吐字很清楚,可以鍛鍊英語。有一些小夥伴們說英文看不懂,對英文網而退卻,這不是一個好習慣。英文在程式設計世界中的重要性不言而喻。所以英文是你一定要學好的一門語言。

講師講完課程之後還有具體的練習環節,作為學習鞏固,非常不錯。

udacity 的課程要比 studytonight 更深一些,作業系統這門課就分成了 22 堂課,每一堂課還有很多小節,真是一個非常好的網站。我現在在寫文章,我巴不得不寫字了,馬上學習!。 還是忍住了,那就寫完了馬上去看!!!

tutorialspoint

tutorialspoint 這個網站也是一個資源教程網,這個網站的搜尋指數非常高,基本上搜任何問題都有 tutorialspoint 的解釋。

我們點進去 Library 之後發現,這就是教程寶庫啊,羅列的非常清楚

tutorialspoint 也有視訊教程,不過大多都收費。

教程非常多,不僅限於程式設計,也包含 Excel 、SAP 等教程。

tutorialspoint 還有電子書教程,不過大部分也是收費的,應該是 tutorialspoint 自己製作的 PDF,不知道寫的怎麼樣,如果有興趣的小夥伴可以付費下載,到時候記得給我發一份哦,嘿嘿。

說了這麼多,我們還沒有看 tutorialspoint 作業系統的主頁呢

左邊是導航欄,右邊是具體的教程,這個樣式感覺有些老,不過分類倒是很明確的,裡面的內容要比 studytonight 差一些,也是一個入門非常好的教程網

classcentral

classcentral 這個網站有點強啊,裡面彙總了各大名校的教程

我們發現了一箇中文教程,一看是 南京大學 的教程,南京大學也是非常牛逼的一所學校,小編也有南大的基友在搞影視,其實我是一個被程式設計耽誤的導演,狗頭保命。

不扯皮了,來看看南大的課程

這麼多牛逼的課程發現了中文大學,也側面說明了我國大學在國際上的地位。Overview 是 OS 的總體介紹。

我們註冊後點選開始課程,就進入講課頁面

課程分為 6 周,以視訊的形式展開,我們開始 計算機系統概覽

終於能看到國人講的作業系統了!!!

右邊還可以隨時做筆記進行檢視,課程還支援 下載 功能,非常不錯!

好了我們該退出來了,一會兒又忍不住聽課了!

nptel

彷彿見到了一個不得了的網站,這個網站的名字就隱隱的感覺有點牛逼。我們先看牛逼在哪,然後再看為什麼牛逼

你能感覺出來牛逼了嗎

這每一個目錄都 TM 是一本書啊,雖然頁數不多,但這確確實實是寶貝啊。

從作業系統概述到檔案系統、程式管理、檔案管理、I/O 管理等等等等。這還不是最牛逼的,最牛逼的是右邊能免費 下載,你說氣人不氣人

每一章節都支援下載 PDF 版本。

我們帶著好奇心,點開了 About Us

然後就看到了下面這段話

也就是說,這是一個 印度的國家增強型學習計劃,也就是說,印度的各大名校聯合推出的免費學習計劃,這也能理解為什麼印度人在電氣、程式設計、通訊方面能夠越來越牛逼了。

這個網站你一定要看,我認為可以和黑皮書系列平起平坐了。

codescracker

codescracker 又是一個牛逼的網站,看完這個網站,我才覺得低調才是最牛逼的炫耀。。。

分類都非常全,解釋的也很到位,但是 codescracker 並不只是一個 os 網站,它是一門程式語言的學習一站式平臺,只不過網站比較簡潔

可以看到有各種各樣的教程,下面還是有測試類的,基本上企業用的語言都涵蓋到了。

你必須要珍藏的一個網站。

sciencedirect

sciencedirect 這個網站真是太牛逼了。百度對 sciencedirect 的解釋

不過 sciencedirect 大部分的 PDF 下載是需要收費的,感興趣的小夥伴們可以購買

homepage

Homepage 是做什麼的,一看主頁就明白了

這是一個電腦科學和統計學的網站,然後我們點選 search 搜尋 os 直接跳轉到 os 的網站

然後就呵呵呵呵了,這個網站比較奇葩,它沒有後退和前進的按鈕,那怎麼訪問?

我是直接通過 url 訪問的,主頁就是 https://homepage.cs.uri.edu/faculty/wolfe/book/Readings/Reading01.htm

但是網站太硬核了,很好的一個學習資料哦。

computer.howstuffworks.com

computer.howstuffworks.com 就是一個計算機網站,它涵蓋軟體和硬體的方方面面。

Computer 知識包括 計算機硬體、網路、計算機軟體、計算機祕密等等

都是一些講的非常好的文章,可以說是計算機的百科全書了。

老樣子我們點開 COMPUTER OPERATING SYSTEMS 專題,可以看到都是一些非常好的文章

加入收藏夾!

tldp.org

這個網站又是一個學習作業系統非常牛逼的網站,我都不知道今晚上說了多少次了,哈哈哈哈。

來看看主頁是啥樣的

這一看就是一個牛逼的網站,不要問我為什麼,OS 的頁面是這樣的

沒有任何點綴和裝飾,成年人的生活就這麼樸實無華

bilibili

說到教程,怎麼能沒有我大 B 站?

各大視訊廠家坐在一起談論誰最牛逼,youtube 說,bilibili 你站起來,bilibili 很不情願的說,"為什麼"?"你站起來",youtube 說到,bilibili 很不情願的站起來了,youbute 隨後說:我不是針對誰,各位在座的都是垃圾!

提出勘誤

最後,提出幾個我個人和讀者發現的勘誤。人非聖賢孰能無過,但是有錯誤還是要指出來的,以免大家碰到相同的問題無厘頭,既浪費時間又沒有效果,不去看英文原版的話很難發現問題。

注:如果你在學習過程中也發現了勘誤,歡迎新增我的微信 lx252279279,我可以幫助你反饋。

最後

最後在本篇文章最後給大家推薦一下我自己彙總的 作業系統 PDF,可以離線在看,一共是 306 頁,大概 50w 字,排版非常精美,也非常清晰,字是我自己一個一個手敲的,圖是一筆一筆畫的。

另外,昨天有一位高校老師也肯定了我的這本 PDF,也算是對我的肯定吧,沒想到能起到這麼大的社會效應。

大家可以關注一下我的公眾號 Java建設者 或者掃描下面的二維碼,回覆 os 即可獲取這本寶貴的 PDF。

相關文章