
雷姆茲·H.阿帕希杜塞爾 安德莉亞·C.阿帕希杜塞爾
這是一本關於現代操作系統的書。全書圍繞虛擬化、併發和持久性這3個主要概念展開,介紹了所有現代系統的主要組件(包括調度、虛擬內存管理、磁盤和I/O子系統、文件系統 )。 本書共50章,分爲3個部分,分別講述虛擬化、併發和持久性的相關內容。本書大部分章節均先提出特定的問題,然後通過書中介紹的技術、算法和思想來解決這些問題。筆者以對話形式引入所介紹的主題概念,行文詼諧幽默卻又鞭辟入裏,力求幫助讀者理解操作系統中虛擬化、併發和持久性的原理。 本書內容全面,並給出了真實可運行的代碼(而非僞代碼),還提供了相應的練習,適合高等院校相關專業教師教學和高校學生自學。
第一次打開這本書還是 21 年,拖拖延延看了 5 年纔看完也是沒誰了哈哈。那年我剛開始工作,對所謂的操作系統還只有紙面的理解,這些年來隨着實踐的深入也算是對操作系統有了更多角度的認識,工作中遇到的很多的問題也開始能從操作系統的角度去分析和解決。 操作系統這門課上學時就是睡過去的,這本書翻起來也有很多犯困的地方。整本書採用啓發式教學的方式,循序漸進地講解了虛擬化、併發、持久化三個方面的內容。虛擬化部分介紹了 CPU 和內存的虛擬化,包括進程管理和內存管理;併發部分介紹了線程、鎖以及信號量;持久化部分介紹了設備管理、數據存儲以及文件系統。三個主題基本涵蓋了操作系統需要了解的核心內容。雖然名爲《導論》,但很多地方其實講得相當深入,每章開始和結尾教授與學生之間的趣味互動(扯皮)也讓閱讀過程輕鬆了不少。 看完這本書我最大的收穫不是操作系統方面的知識,而是作者講述這些概念的方法、研究和解決問題的思路以及保持好奇的心態。一個看似簡單的系統調用背後可能有相當多的決策和設計,例如性能、安全、兼容性以及易用性之間的權衡。理解這些設計背後的原因,比單純記住 API 的使用方式更加重要。 總的來說內容和寫作角度都不錯,翻譯有點小問題不影響閱讀,算是技術類書的通病。推薦對操作系統感興趣的朋友讀一讀,如果你是計算機專業學生,這本書可以幫助建立操作系統整體框架;如果你是應用開發工程師,這本書可以幫助你理解日常 API 背後的機制;如果你的目標是深入 Linux 內核開發,那我們繼續在《Linux 內核設計與實現》等更偏實現層面的書中見吧🤗
一口氣讀完了。在讀此書前,我已經讀過國外三個不同版本的講操作系統的書,所以我應該能給個公允的評價。本書採用啓發式的教學方法,循序漸進、深入淺出地講解了操作系統三個最核心的技術,即虛擬化、併發和持久化,基本上能滿足讀者對操作系統原理的好奇。正如書名所示,所謂“導論”,就是勾勒摘要,引人入勝,更多的細節仍需讀者自己去進一步探索在翻譯上,本書存在一些瑕疵甚至錯誤(翻譯者英文雖比我好,但是背景知識和專業知識不如我,這幾乎是翻譯圖書的通病),有條件的同學,可以對照官網原版電子書一起閱讀。
本書從操作系統的三個特性:虛擬化、併發和持久性,分別介紹了操作系統對CPU和內存資源的虛擬化技術,程序多進程或多線程的併發執行,以及I/O持久化存儲和文件系統的相關知識和概念。操作系統提供了對底層複雜硬件的抽象和管理,提高對各種資源的利用。衆所周知,底層硬件和驅動是醜陋的和複雜的,諸如像CPU、內存和磁盤這樣的物理資源,如果沒有一個統一的系統進行高效的抽象和管理,那麼就需要程序員直接與這些硬件打交道,諸如讀寫磁盤文件這樣的簡單操作,如果越過操作系統這一部分,就需要了解磁頭讀寫、磁臂的移動、磁道管理等,這會讓程序員直接抓狂的。故而操作系統使我們更優雅地使用資源,並屏蔽了底層硬件的諸多細節。 操作系統的另一個目標是,系統和應用程序之間提供保護,除了提供讓進程彼此隔離並且提供獨立同步運行的假象,也保護底層硬件資源不被各個應用程序直接肆意訪問和修改。從這一層講,操作系統力求提供高度的可靠性和保護性。 對於虛擬化CPU和內存,本書詳細闡述對於每一個進程,如何提供一個獨立的CPU和獨立的地址空間的假象,圍繞這一關鍵問題介紹了所需瞭解的許多概念和預先知識。受限直接執行的敘述部分,對於我來說第一次徹底理解所謂內核函數的陷阱概念,即什麼纔是真正的“陷入內核執行”。虛擬化內存的章節,則把內存分段、分頁和快速地址轉換(TLB)的概念詳細敘述出來,除了理解爲什麼能夠對每個進程提供獨立的地址空間外,還順帶徹底理解編程中經常出現的懸垂指針和內存段錯誤等。 關於併發部分,印象最深的是爲多線程同步實現自旋鎖、條件變量和基於鎖的併發數據結構,基於原子的“比較並交換”、“獲取並增加”的思想,對多線程同步和互斥會有更深的理解,這一部分也把一直搞不明白的“哲學家就餐”問題論述清楚了,生產者消費者思想在各種系統的應用屢試不爽。 關於持久性,除了詳細介紹Linux下的文件讀寫外,最大的收穫是閱讀關於一個簡單的文件系統的實現,明白了我們平常使用的文件系統包含哪些部分,需要解決哪些方面的問題,崩潰瞭如何保存各個信息的同步等。磁盤和驅動器方面的介紹,讓我們瞭解“尋道、旋轉,是最昂貴的磁盤操作之一”。 操作系統的設計,某方面來說是一種平衡和折中的哲學,面對硬件資源的速度、空間、大小、公平性等各種方面的競爭,如何做到利用的平衡。正如在虛擬化CPU那一章所說,“如果你願意不公平,你可以運行較短的工作直到完成,但是要以響應時間爲代價。如果你重視公平性,則響應時間會較短,但會以固有時間爲代價”。作者說了一句很形象的話來概況這一點:“你既不能保留你的蛋糕,又喫掉它”。這就是操作系統的設計和實現對我們生活的啓發,很多情境下,我們要選擇妥協和平衡才能換來目標的實現,因爲操作系統的設計思想,很多地方也來源於社會生活。 所以對於有些系統的實現,在面對資源不平衡的情況下,則需要因地制宜,根據具體實際情況來採取具體的策略,一切從實際出發,如果後續資源有所側重和改變,則需立即調整策略和轉變,以適應相應情況的變化,沒有一勞永逸。 畢竟,法無定法,存在決定意識!
Operating Systems: Three Easy Pieces 十分推薦的一本好書,10月3號開始閱讀,大概花了13h看完,做了大約200多條筆記(後面學習到讀書過程中不應該有太多的劃線,而應該理解,在自己的腦海中回想剛剛學的知識。本意是想複習的時候直接看筆記速度更快,但事實是劃線的筆記太過零散沒變成自己的筆記,複習起來很碎片,所以直接看筆記的話效果不太好,還不如就不懂的地方直接再複習原文部分)。記得當時讀這本書不會很難且很有收穫,讓我對OS沒那麼恐懼了,反而覺得很有意思,想深入學習下去,在想爲什麼最初學OS的時候沒有讀到這本書(這假設好像有點不成立,正是因爲了有了一定的知識儲備所以才理解起來不那麼難,一點了解都沒有的話大概閱讀也很艱難)。一口氣讀完,不知道當時是不是爲了逃避刷題的無聊。 主要是通過OS的三大主題:虛擬化、併發和持久性展開的,書中教授和學生的對話很有趣。書名譯爲《操作系統導論》,譯名還是蠻準確的。畢竟OS的內容很多,所以只是寫了最重要最主要的部分,但同時也提出了很多啓發式的思考。很喜歡每一章節後面給出的參考資料,列出了參考書籍和論文,但自己看的是中文所以也沒有關注這些參考資料。 隨着漸漸讀書,發現好的書籍是作者自己的知識輸出加上大量的查閱書籍和論文等,書中也詳細列出了參考來源。這一點倒是可以成爲鑑別一些專業書籍好壞的依據之一。 希望後面第二遍讀OSTEP時可以讀英文原版然後就不懂的地方查閱列出的參考資料。老是擔心自己英文讀着讀着就不知所以了,可說起來好像中文書籍自己就可以很容易讀懂了,然而並不是,讀其它領域的中文書籍,就在想:明明都是漢字,也沒有數學公式啥的,怎麼就放到一起完全讀不懂了,比如之前讀的《資本論》。所以要開始讀英文書,反而更有助於吸收書中的知識。 很久之前讀的再寫書評的確是有點難,所以養成閱讀書籍寫書評的習慣後就不要拖延,記錄下自己的想法。
第一遍閱讀 瞭解操作系統的三個要點:虛擬化,併發,持久。 虛擬化有兩點,一是CPU的虛擬化,這抽象出進程,另外一個是內存虛擬化,這抽象出進程的地址空間。 虛擬化讓每個進程有一種虛像:我獨自佔用CPU和我在內存中有完整的地址空間。 併發,是針對線程的,其中一個是過程調用。關於併發,瞭解了鎖和解鎖以及條件變量的相關基本工作原理,最後,以及信號量。 持久性,關係着數據的持久性存儲。 後面的併發和持久性讀得有點困難,等再瞭解相關的知識和操作再來詳細閱讀。
不同於其他操作系統書籍那樣按部就班地介紹cpu管理內存管理io管理等等,本書巧妙地從操作系統這個龐然大物中提煉出三大理念,即虛擬化,併發,和持久化。這是最大的亮點:從高層的理念出發,拋出問題,然後設法解決它,你能明白爲什麼操作系統需要這些設計。更重要的是,本書在許多章節的內容並非教條式的介紹,而是從一個最簡單的情況開始設計,然後逐步解除限制,一步步實現一個在現實情況下運行良好的方案,接着引出現有方案以供對比,這種內容模式能很大激發讀者的思考。一以貫之,本書更傾向於教你哪些問題會發生,和解決問題的思路,而非輸出現有的知識點。要知道計算機領域技術發展日新月異,知識更迭的飛快,而通用的問題和挑戰其實並沒有多大的變化。甚至這些問題和解決思路並非操作系統獨有,在許多應用架構設計中也常常有這些理念的影子。 本書提出的一些設計理念也是特別值得借鑑的,最經典的莫過書中引用的“最好是好的敵人”以及反覆強調的折中,書中從未斷言哪種方案是完美的,事實上一些問題也從未有過完美方案,一切只不過是特定環境下的權衡,這也反映出作者的務實精神。 當然通過本書的內容去實現一個操作系統是遠遠不夠的,正如其所說“魔鬼藏身於細節中”,達到這一目標還需大量閱讀和實踐,好在作爲導論書中提供了大量帶評論的參考資料,非常方便有興趣深入瞭解的讀者去研究。 最後從持久化之後的章節明顯感受到翻譯質量下降,一些地方看的令人費解😅,不過其優秀的內容仍然是值得反覆閱讀的。
首先這本書是真正意義上的帶我入了操作系統的世界,而且從排版和章節的規劃我覺得是比較合理的,而且有些內容是承上啓下的有些是串聯了一些歷史發展,就是有着翻譯不是太妥當,不過整理瑕不掩瑜,再者,對應有github的配套教材練習方便鞏固知識點,我打算再看一遍,第一遍可能理解了30%不到,哈哈哈哈 個人認爲較爲難理解的就是內存虛擬化的發展過程以及出現的問題和如何解決的,主要是物理內存是如何分配規劃和映射的,做到了進程毫不知情的安全隔離性,以及內存與磁盤置換等,關注cpu的虛擬化以及進程調度個人覺得道理其實比較容易理解和掌握,不過實際上關於進程切換,線程切換的時間片輪訓和運行上下文的保存和恢復都是十分複雜的,再有就是由於多線程和多核以及中斷導致產生的併發處理也是十分值得探討的話題,其中涉及到一開始的互斥體,條件變量,以及後面的信號量,臨界區等等,還有經典的哲學家就餐問題引出死鎖,以及探討死鎖的預防和解決太多了… 最後是持久化技術的發展,瞭解了磁盤存儲的直接,以及順序和隨機的區別,還有尋道旋轉傳輸一起構成了物理IO的時間組成,以及磁盤如何管理空間劃分,以及後面的RAID的出現和基於磁盤的文件系統的誕生,以及各種各式各樣的設備接入,形成了完整的操作系統 真的我由衷的覺得操作系統的發展真的是一個內含哲學思考的藝術品,各種權衡利弊,也是後面大量應用程序效仿的原因,感謝那些幾十年前奉獻給操作系統的前輩們 基於以上,我必須要給這本書5星的評價,此刻我依然久久不能平靜,懷着崇敬感恩的心情我將再次研讀此書,然後加薪,23333333
我剛買了紙質版的,微信讀書就有了😅🤦♂️ 最近微讀是不是對計算機書籍上線加大力度了[疑問][可愛]
OSTEP中文版終於出了,先給個五星好評!去年讀了英文版,可以重溫一遍了。國內湯版操作系統很多知識點點到即止,不夠深入,深入瞭解操作系統還得是看《操作系統的設計精髓》和這本 OSTEP 了!給微信讀書點贊@微信讀書
花了三十多個小時,近一個月,把這本書讀完了。讀了後,有種相見恨晚的感覺。它符合我對優秀教材的期待。內容紮實自然無需多言,以作者是研究操作系統的專家。在內容的組織上,先整體上描述操作系統的功能和特性,然後不斷細化。在敘述過程中,以問題爲導向,啓發讀者,引導思考,不斷拋出問題,解決問題。讀者在跟隨作者思路的過程中,已經在腦子裏構建了一遍操作系統。在這個過程中,作者總結出了操作系統的典型研究對象、典型研究問題和典型思維方式,以及操作系統和其他學科的關係。在閱讀的過程中,總能聯想起計算機組成原理、彙編、數據結構等知識,慢慢地就搭起了計算機知識體系的框架。 同時,作者的語言也很優美,無論是每個部分開頭和結尾的對話,還是行文中的提出問題解決問題式的敘述,都不斷地吸引我讀下去,書中時不時出現一些幽默,讓我時不時會心一笑,不得不說,這是第一次讀專業書有這種快樂的體驗。 更重要的是,這本書讓我感覺到,枯燥乏味的專業知識也可以變得生動有趣,也越讓我覺得,以前學過的學校教材是真的垃圾。 作爲一本導論,這本書已經詳細地講解了操作系統的方方面面,但它也指明瞭進一步深入學習的方向——豐富的參考文獻和對它們的簡評——來彌補本書的不足。 本書也有一些翻譯問題、錯別字,但不影響閱讀。 我對這本書給予很高的評價,不僅僅是它對操作系統的精彩講解,更重要的是它作爲“導論”,真正地激發了我對計算機科學的興趣,引導我更深入地學習。 2021.8.22