做者:Allen B. Downeyhtml
原文:Chapter 0 Prefacegit
譯者:飛龍程序員
協議:CC BY-NC-SA 4.0github
在許多計算機科學的課程中,操做系統都是高級話題。學生在上這門課以前,它們已經知道了如何使用C語言編程,他們也可能上過計算機體系結構(組成原理)的課程。一般這門課的目標是讓學生們接觸操做系統的設計與實現,並帶有一些他們將來在該領域所研究的隱含假設,或者讓他們手寫OS的一部分。數據庫
這本書爲一些不一樣的讀者準備,而且具備不一樣的目標。我爲歐林工學院中一門叫作軟件系統的課程編寫了它。編程
多數學生在學完Python編程以後上了這門課,因此目標之一就是幫助他們學習C語言。對於課程的這一部分,我使用了O’Reilly的《Head First C》(中譯本爲《嗨翻C語言》)做爲補充。緩存
個人一些學生從沒有寫過操做系統,可是它們中許多人都會使用C語言編寫底層的應用,或者與嵌入式打交道。個人課程包括操做系統的要素、網絡、數據庫、和嵌入式系統,並且強調了程序員須要知道的一些話題。網絡
這本書並不假設你學過計算機體系結構。在講解過程當中,我會解釋所需的東西。學習
若是這本書成功了,它會帶給你對程序運行中所發生事情的深刻理解,而且你能夠使它們運行速度更快以及更加可靠。測試
第一章解釋了編譯語言和解釋語言的一些差別,以及編譯器工做原理的一些洞察。推薦閱讀《嗨翻C語言》的第一章。
第二章解釋了操做系統如何使用進程來保證運行中的程序不相互影響。
第三章解釋了虛擬內存和地址翻譯。推薦閱讀《嗨翻C語言》的第二章。
第四章有關文件系統和數據流。推薦閱讀《嗨翻C語言》的第三章。
第五章描述了數值、字母和其它值如何編碼,同時展現了按位運算。
第六章解釋瞭如何使用動態內存管理,它如何工做。推薦閱讀《嗨翻C語言》的第六章。
第七章有關緩存和存儲器層次結構。
第八章有關多任務和調度。
第九章有關POSIX線程和互斥體。推薦閱讀《嗨翻C語言》的第十二章,和《Little Book of Semaphores》的第一和第二章。
第十章有關POSIX條件變量和生產者/消費者問題。推薦閱讀《Little Book of Semaphores》的第三和第四章。
第十一章有關POSIX信號量和C中的實現。
本書的當前版本(v0.5)是個初稿。當我處理文字時,我尚未把圖片放進來。因此我確信有些地方的解釋加上圖片以後會更好。
本書的示例代碼能夠在https://github.com/AllenDowney/ThinkOS訪問。Git是一個版本控制系統,它容許你跟蹤項目所組成的文件。Git控制下的一系列文件叫作倉庫。GitHub是一個爲Git倉庫提供儲存空間的託管服務,以及一個便利的Web界面。
個人倉庫的GitHub的主頁提供了以下方式來獲取代碼:
你能夠經過點擊「Fork」按鈕,在GitHub上建立個人倉庫的一份副本。若是你沒有GitHub帳號,你須要建立一個。在Fork以後,你在GitHub上就有了本身的倉庫,你能夠在本書編寫的過程當中,將其用於跟蹤你編寫的代碼。以後你能夠克隆這個倉庫,也就是說你能夠將文件複製到本身的電腦上。
或者你能夠克隆個人倉庫。你並不須要GitHub帳號來完成它,可是你不能將你的修改寫回GitHub。
若是你徹底不想使用Git,你能夠使用GitHub頁面右下角的按鈕,下載以Zip打包的文件。
若是你須要提供建議或糾錯,請向downey@allendowney.com發送郵件。若是我基於你的反饋做出修改,我會將你添加到貢獻者名單中(除非你要求被忽略)。
若是你包含了錯誤所在句子的一小部分,我會很容易找到它。頁面和章節的號碼也能夠,可是不是十分易於處理。多謝了!
我要感謝歐林工學院軟件系統課上的全部學生,他們在2014春季學期測試了這本書的初稿。他們糾正了許多錯誤,並提了不少有用的建議。我很欣賞他們的開拓精神!
Donald Robertson 指出了兩個打字錯誤。
Jim Tyson 提交了兩個糾正。
James P Giannoules 指出了一處複製粘貼錯誤。
Andy Engle 給出了GB和GiB的差別。
Aashish Karki 指出了一些錯誤的語法。