有沒有好的操作系統的書?

書中能結合現代操作系統,最後看了以後會在移動端開發方面有較好的幫助


ostep

Operating Systems (豆瓣)

全名Operating Systems: Three Easy Pieces

威斯康星的研究生教材,把os分成虛擬化、並發性、持久化,三方面來講,其實寫的很入門,完全就能當本科教材或者自學。每一個主題都是從歷史沿革來講,最初什麼方法,如何實現的(真的是實際實現),解決了什麼問題,有什麼缺點,針對這些缺點人們提出了哪些方法來改進。還給了各種metric。每章末尾還給了相關領域應該看那些著名論文或者教材。(精選的那種,我是跟著下了好多著名論文,半年了都沒看完)

最後不太重要可也很重要的特點:語言風趣

PS:官方給了免費電子版

Operating Systems: Three Easy Pieces


不推薦:AST 的 Modern Operating Systems.

推薦 : Operating Systems: Three Easy Pieces. By Remzi(自學)

或 Operating Systems: Principles and Practice (教學)

下面主要就原書第三版和第四版,分析不推薦的原因:

第一,MOS 這本書的最重要問題在於內容多而雜

全書第四版一共1137頁,包含13個章節。除去所有OS書籍均涉及CPU,Memory 和 Storage的資源管理與調度外,還涉及Security 以及多個Case Study, 甚至在第三版中,AST專門用了一個章節來闡述Multimedia Systems。這些多出來的章節有的本身就是非常龐大的內容,例如Security 和 Cloud, 也有的是像Windows 8 這種具體的Case Study。導致的結果是,Security 部分羅列了繁多的攻擊與防禦手段,但是這些內容和前面的System Design沒有良好的對應關係,而僅僅成了一份科普材料。

Windows 8 Case Study 同樣為讀者提供了一個100多頁的科普介紹, 而不是一份研究Windows Kernel Trade-off 材料。且不說Windows NT Kernel 在教學、科研中的有限用途,即便是致力於使用Windows作為開發環境的人,這些內容也淺嘗輒止。具體的開發中,讀者仍需要針對Windows的開發書籍。在第三版中,同樣的問題也有,只不過談的是Windows Vista 和 Symbian OS。

事實上,除了前六章,教學中很少有其他章會被涉及到。近200美元的書籍內容,近一半等於捐給了組織。

其次,MOS並沒有一個良好的邏輯結構。

良好的可讀性和邏輯連貫性是高質量技術類書籍的根本。在MOS中,多個地方出現內容的不恰當安排。一個明顯的例子是Deadlock 這一章節的位置。CPU虛擬化為進程線程很容易導致的一個潛在問題是多線程調度下的資源競爭問題。MOS在第二章就詳細介紹了進程和線程的模型,然後直到第六章才具體描述了調度中可能存在的問題。這個問題,並不是我的一家之言。Princeton的操作系統課程(COS 318, Fall 2016: Schedule)中也是在教授完第二章後馬上開始第六章的講述。同樣的問題也存在於IO 和 File Systems 的內部章節安排,這裡不做展開。同時,在我推薦的另兩本書里,這個問題並不存在。兩本書都合理地將OS的概念分為三到四個章節,分別對應CPU, Memory 和 Storage的具體虛擬化以及資源管理。讀者無論是用於課堂教學還是自學,都可以從頭看到尾,不會因為邏輯安排不合理而導致的理解障礙。

第三,MOS並不是一本被一流高校專業人士所普遍認可的教科書。

很多人對於MOS大加褒揚,很可能是AST和Minix盛名在外,又或者是其較高的豆瓣評分。但是不同於大眾娛樂消費品(如電影、暢銷書等),一本教材或者學術書籍的好壞,普通用戶(一般是初學者)很難提供一個準確的評估。專業意見特別是一流大學的相關課程安排更能提供一個更為令人信服的角度。我按照當前US News對於Computer Systems的排名,選取了前10名的美國高校,並調查了他們的本科OS課程的教學用書,情況如下(高亮為推薦書籍):

1. UC Berkeley: Operating Systems: Principles and Practice

2. MIT: Principles of Computer System Design: An Introduction

3. Stanford: Operating System Concepts, 8th Edition XV6

4. CMU: Operating Systems: Principles and Practice

5. UW: Operating Systems: Principles and Practice

6. Gatech: 不使用教科書

7. UIUC: Operating Systems: Internals and Design Principles

8. UT Austin: Operating Systems: Principles and Practice

9. UW Madison: Operating Systems: Three Easy Pieces

10. UMich: 不使用教科書

總結

AST作為業內德高望重的學者,很早就在OS,Networks 和 Distributed Systems上面有很高的造詣,不僅創造了Minix OS, 還培養了一批像Frans Kaashoek這樣的一流學者。在2010年以前,MOS作為學習OS的教材是個不錯的選擇,我自己便就擁有第二至第四版的原書,也從中受益匪淺。然而時至今日其他的OS書籍已經能更好地滿足讀者自學或者教學的需求。所以綜上,不再推薦使用MOS。

P.S.: 對AST身懷感情的讀者,可以讀他的 Distributed Systems: Principles and Practice。內容經典且合理,寫的也非常好。


移動端的我不知道,,,我列幾本我覺得好的給你:

  1. Modern Operating Systems 4th,這本書是教材,Tanenbaum 是誰不用多說了吧,估計 Linus 見了他也得叫一聲老師。這本書理論性較強,講的是普遍原理,但是不夠深入,如調度演算法等等,有時就是一句話,但是不會跟你說明具體實現。不過是一本操作系統入門的好教材。

2. Operating System Concepts 9th,這本書也叫「恐龍書」,名氣與第一本齊名,也是教材,第九版對比前書第三版 (第四版我沒看) 來說更好,對於演算法的解釋更詳細,但是對於一些特別基礎的東西,比如 MMU 工作起來大概是什麼樣子的等描述不如第一本詳細。

3. Operating Systems Design and Implementation 3rd,還是 Tanenbaum 的書,主要基於 Minix 講操作系統實現,這本書比前兩本書,要落地一些,理論性不是那麼強。但是建議你看完前兩本任意一本再看這本。

4. 下面就是一些特定平台的書了,基於以上理論,這些書對於特定平台的實現講的非常深入,比如都是內核,OS X,Windows 實現有何不同,你就要看這些了

比如 Windows,你要看 Windows Internals 6th

比如 OS X,你要看 Mac OS X Internals: A Systems Approach

或 Mac OS X and iOS Internals: To the Apple"s Core

移動操作系統,iOS 沒有什麼特別好的書,因為是閉源的,但是由於其和 OS X 同源,很多東西你可以參考 OS X 以及 XNU 源代碼。Android 我不關心也沒興趣,也不知道,Windows 要問做 WP 開發的朋友。

另外,看這些書,你要有一些 C 語言的功底,不然一些例子什麼的你搞不定,還要有點彙編語言的知識,不然源代碼很多你也看不太懂。

另外,如果覺得這些書很貴,可以到諸如 MIT 等大學網站找操作系統課程的講義看,都非常不錯。免費。


對於操作系統的初學者,我推薦是先閱讀孫鍾秀先生主編的《操作系統教程》:操作系統教程(第四版)孫鍾秀.pdf 這本由陳懷臨先生做過注釋孫鍾秀 。《操作系統教程》 。注釋(全).pdf 你完全可以把這兩本書下載下來然後複印進行對比閱讀。對於初學者看 @王飛所提到的操作系統書籍還是有點難度,翻譯書籍完全取決於翻譯者自身的能力。

我建議你先閱讀孫鍾秀先生編著與陳懷臨先生標註的《操作系統教程》,然後閱讀原版《Modern Operating Systems 4th》和《Operating Systems Design and Implementation 3rd》這兩本書都有各自的優勢,前者入門與鞏固你之前《操作系統教程》這本書的知識很有幫助,最後的一本操作系統設計與實現可以配合Minix系統來學習Minix3 你完全可以下載下來然後安裝到虛擬機裡面進行自我探索,裡面的源碼都做了豐富的注釋。更貼近實際

2015年7月21日 增補

這裡增加一個操作系統分散式系統資源:Qix/ds.md at master · ty4z2008/Qix · GitHub

2015年7月21日 增增補

學習操作系統時一定要多思考,把理論文字變成實際的,把圖變成實際的文字,這是一種思考也是一種總結.此外看完一個知識點之後可以多看看牛人發表的論文,如孫鍾秀的《進程與進程同步》。使用https://scholar.google.com 和 http://arxiv.org/ 能夠學習更多


操作系統的書,就沒有一本好的。

怎麼學操作系統:

1、先建立一個簡單的概念模型。

1)首先,先了解一下操作系統的背景、目的和意義。背景,一句話可以概括出來:怎麼使用戶方便地使用計算機硬體、軟體和數據(管理也是為了便於使用)。操作系統的兩個最根本的目的是資源管理和提供使用介面。所有的教科書,都沒有搞清楚目的和功能的區別,把功能當成目的。

2)搞清楚操作系統的研究對象和研究方法。用戶要使用的東西就是操作系統要研究的對象:處理機、存儲器、外設、文件。研究方法:抽象,即模型(不要把數據結構當成抽象,所有的書都粗暴地把模型和數據結構混合在一起,數據結構是模型的實現,而不是模型的本身),對於軟體,建立了進程模型和圖模型,對於處理機、存儲器、外設、文件,建立了隊列模型、層次模型、目錄模型。在這個學習階段,根本不要去管數據結構、不要去管代碼,不要管什麼線程,什麼用戶態、核心態,等等。模型越簡單越好,就用生活中的經驗去解釋,操作系統中的基本理論,都能夠在現實生活和工作中找到對應的解釋,比如處理機的調度模型,就可以用銀行大廳的叫號機、醫院的叫號機等來解釋。

簡化,是最好的學習。把一本書,讀薄。我翻過幾十本書,個人覺得,如果你的學習能力比較強的話,先看湯小丹寫的計算機操作系統。但是,概論那一章,要去偽存真。在這個階段,不要想著能夠立刻學個什麼樣出來,能夠知道操作系統的研究對象和研究方法,理解清楚就不錯了。但是,一定要知道操作系統做的事情基本上有哪些。

國外的教材,洋洋洒洒的幾百頁,把理論和實現攪在一起,也沒攪清楚,特別是把某一子問題的各種實現方法攪在一起,不管好的、壞的,合適的、不合適的,知道那幾個東西,算什麼,最多就是把幾個名詞掛在嘴上而已,屁用也沒有,就是個面子工程。

這個階段,就是大致知道操作系統是怎麼回事就可以了,此所謂「觀其大略,不求甚解」,等到一定時機後,後面還有一個「陣而後戰,兵法之常;運用之妙,存乎一心」。

所謂觀其大略,抓住主要問題,主要矛盾,抓住主線。

2、就其中一個子問題,豐滿之。

操作系統的問題很多,相關資料汗牛充棟,一個人根本就搞不定。所以,只能選擇一個子問題進行學習。這個時候,就可以挑著一些教科書看了。

當然,最主要的幾個基本問題是必須看的,比如進程、處理機調度、存儲器管理。不要管設備管理和文件管理,它們太複雜,因為設備的類型太多,所以設備管理很複雜,這個時候還不是碰的時候;因為文件系統的要求太繁瑣,也不到時候。

對於進程、處理機調度、存儲器管理,看看現在有哪幾種主流方法,看看綜述,看看教科書,這裡同樣要批判國外的教科書,當然國內的也沒有好的,也沒有講清楚,都是一團狗屎。

此時,可以模擬簡單的進程、處理機調度、存儲器管理的實現了,有一本還是兩本書,講了一些簡單的實驗(用數據結構),網上也有這樣的實驗。

然後,先學一下進程、存儲器的相關的系統調用(找一本linux c編程的書,或者unix環境高級編程,不過unix環境高級編程這本書,同樣是糟點多多),體驗一下操作系統的一個主要功能和目的:系統資源使用的編程介面,即系統調用。

接下來,我記得浙江大學有一個linux內核的實驗,修改linux內核的進程調度演算法。應該還有一個實驗,就是修改linux內核的存儲器管理。

3、到此,基本就有點感覺和基礎。接下來,就是決定繼續做什麼了。如果不是搞底層和系統結構的話,操作系統學到這個程度也差不多了,繼續往下來學,對於工作的必要性倒不是太大。但是,如果是工作或者科研和這個有關的話,就要挑一個方向了。


我剛開始學習的時候看的是很多人提到的 Modern Operating System

這本書好不好?

非常好,語言生動形象,講述的很詳細,但是很多東西太過理論化了,反而會使你學習的非常乏味,而且學習完整本書後還是一臉蒙逼,os到底是什麼(該書缺少對整個os的融會貫通)?

後來我看到了這本書 Operating Systems (豆瓣)(新書,豆瓣連評論都沒有233333)

剛看第一章我就知道這是我的菜了,它很多概念都和實際聯繫的很緊密,看完後會有恍然大悟之感,例如該書的concurrency部分的表達,真的是神了。同時這本書也是Stanford的教材,所以不用擔心質量問題了。

不過,我還是強烈推薦仔細閱讀一下 Andrew S. Tanenbaum 的Modern Operating System,裡面有非常多操作系統設計的妥協與思考。(建議閱讀英文版,這本書英文版寫的非常友好,一氣合成)

菜鳥拙見,答案有不當之處歡迎指正。


我推薦一本書


1. 《CODE》

這本書從最基礎的編碼、電路、組合學來展開計算機的發展史,各內容之間的連接非常自然,只需有高中基礎就可以理解書中內容。

另外如果你對「如何實現加法器?」「內存和存儲器之間的區別?」「為什麼訪問寄存器比訪問內存快?」這些問題存在疑問,或許這本書會幫到你理解其本質。

編碼 (豆瓣)

2. 《深入理解計算機系統》

這本書從程序員的視角闡述計算機的本質,比《CODE》稍偏上層。通過這本書,會幫助理解為什麼會提出「進程」「虛擬存儲器」等抽象的概念,而正是這些抽象使程序編寫的難度大大減低。這本書通過描述計算機的實現細節,幫助其在大腦中構造一個層次性的計算機系統。

深入理解計算機系統(原書第2版) (豆瓣)

3. 《現代操作系統》

聽說也不錯,不過還沒讀。

現代操作系統 (豆瓣)


https://github.com/ranxian/xv6-chinese


麻省理工6.828,XV6


今天我偶然之間發現了一本都是插圖的操作系統書籍很有意思,特地來回答這個問題

Operating Systems Study Guide


沒有人提到xv6嘛?

附上鏈接 6.828 / Fall 2014


FreeBSD系統設計與實現


哪本操作系統的書好,這個問題比較寬泛,畢竟每本書的側重點不同。比較常見的外國教材我就不講了,至於哪本適合移動端,我感覺移動端和主機上的系統設計原理大體相同,所以我還是側重推薦一下更通用的操作系統。不同的人學習操作系統的目的也不同,像軟體工程師可能更偏向於理解各個系統調用,在程序設計中能最大程度的優化程序的性能,做系統的可能會更偏向於系統的實現,這就牽涉到很多細節。如果是對於具體的系統實現,推薦趙炯博士的 「linux內核代碼注釋」 以及楊力翔的 「linux內核設計藝術」。這兩本書都是基於linux0.11的源代碼,雖然比較古老,但是相對於linux後期的內核,學習效率可能會更高,更容易看到系統的全貌(畢竟代碼量少了兩個數量級)。當然看這些書還是需要一些基礎,彙編指令,操作系統的基礎理論比如進程/線程模型得有了解,如果這些基礎都沒有的話,還是看csapp先打好基礎吧。等這幾本書看完,真正到了自己動手實踐,感覺還得依賴因特爾那三卷manual(如果用的是IA32或IA32-E的話,其他架構就不清楚了)。

如果是移動端和嵌入式的系統設計,我會比較推薦普渡大學的那個xinu系統,他們也出了本書專門通過那個系統來講系統實現。

啰嗦一堆,總結下就是如果目的是了解操作系統的概念那麼國外知名教材(Modern Operating Systems, Operating system concept)就夠了,如果要實現操作系統,推薦讀完上面幾本後再讀中國兩位作者的兩本書(「linux內核代碼注釋」 , 「linux內核設計藝術」),嵌入式系統推薦普渡的xinu,如果基礎不紮實,就刷一遍csapp。


樓上說這麼多,其實都是屁話(先別生氣),操作系統的學習是以實踐為主的,好多所謂看懂其實似是而非,我個人看過樓上所列幾乎所有書籍,可以說,學生看看,最多只有了解,真正實現設備驅動,核心子系統,要靠非常多的項目經驗,我個人的觀點,淘寶買塊linux開發板,自己動手,調試。再配上幾本linux內核,驅動,網路相關書籍,你會發現上面說的書都是非常簡單的,並且理解程度比之前要深的多,也會同意我的觀點。ps:csapp的確是本好書。


Operating Systems Concepts, 9th Edition, Silbershatz, Galvin, Gagne

Linux Kernel Development, 3rd Edition, Robert Love

Text on the structure of Linux 2.6.xx Kernel

Understanding the Linux Kernel,3rd Edition, Daniel P. Bovet, Marco Cesati

Linux Device Drivers,3rd Edition, Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman

Understanding Linux Network Internals,1st Edition, Christian Benvenuti


鄭扣根翻譯的 操作系統概念


《操作系統概論》 02323


推薦閱讀:

如何控制Linux清理cache機制?
Linux 是否被過譽了?
scp如何跨過中轉主機直接傳輸文件?
怎麼給電腦裝系統?
在使用Multiplexed I/O的情況下,還有必要使用Non Blocking I/O么 ?

TAG:iOS | 操作系統 | 書籍 |