1. 程式人生 > 其它 >《UNIX 傳奇:歷史與回憶》Note

《UNIX 傳奇:歷史與回憶》Note

只是為了不汙染微信讀書的“想法”線(此處想批評一下產品經理,沒有非公開的註釋功能),不具有實用性。推薦陳碩大佬的Kernighan《UNIX 傳奇:歷史與回憶》雜感 ## Unix雛形 1. 貝爾實驗室和科研型高校的績效評估的不同: 在高校,招聘和晉升會參考同領域知名學者的推薦信,因此專注於狹窄領域的精專研究 在貝爾,從下到上的績效考核,跨領域的協作研究會被更多人注意到 2. 面向非技術背景: 《普林斯頓計算機公開課》(Understanding the DigitalWorld) 3. CTSS分時系統 Multis是CTSS二代 UNIX:部分原因是Multics的複雜架構 4. 1969年,肯.湯普森 磁碟轉速太快->磁碟排程演算法->為了測試,需要批量寫資料的程式->三週:用來建立程式碼的編輯器、將程式碼轉成PDP-7能執行的組合語言的彙編器、作業系統 5. 詞根uni, Multics->Unics, Unix 6. 肯2000年從貝爾退休,2006年加入谷歌,然後合作發明了Go語言 ## Unix初版 1.0 1. 文字格式化:在PDP-11上寫專利申請文件 2. Unix房間:每位MTS都有獨立的辦公室,但還是在“Unix房間互通有無、分享點子或只是隨便聊聊 3. 線上手冊: `man man` 4. 那時候的主儲存器是甜甜圈形狀的鐵氧體小磁芯組成,磁芯可以順時針和逆時針兩種磁化,因此能夠代表一個資訊位 5. 那時,記憶體往往是計算機中最昂貴的部件 6. 程式出現嚴重錯誤時,作業系統會建立一個檔案,用來儲存主儲存器的狀況(即磁芯中的內容),這就是“磁芯轉儲(core dump)”。 ## Unix 第6版 1975年 1. 第六版Unix首次擴充套件到貝爾實驗室以外,開始對世界產生重大影響 2. 系統呼叫:Unix的一個創新是把磁碟、終端等外圍裝置看做檔案系統中的檔案,訪問裝置的系統呼叫和訪問檔案的系統呼叫是一樣的 3. 檔案只是位元組:不管檔案是怎麼存的、不管位元組代表什麼含義 4. shell是執行其他程式的程式。shell是普通的使用者程式,而不是作業系統的一部分。如果你覺得這個shell不好用,你大可以換一個,這就是為什麼有這麼多個Unix shell的原因 5. 萬用字元(檔名擴充套件)和輸出重定向,程式是並不知道的,是shell在做展開和重定向。因為這是一種統一的機制,應該由shell來做 6. 管道相反,管道是一種機制,是作業系統提供的,而不是shell。shell只是使用管道這種機制 7. 只花了一個小時就在作業系統中新增管道系統呼叫,花一個晚上升級系統中的每個命令(最大的改變就是,當沒有指定檔名引數時,從標準輸入流中讀取資料) 8. 標準錯誤流stderrd的創造是必要的。它和標準輸出流是獨立的,因此不會進入管道。所以自己寫程式時,要想結合管道使用,也應該將錯誤傳送給stderr. 9. dc: reverse-polish desk calculator, 這個命令macos中也有 10. grep:g/re/p,列出所有符合正則表示式re的行 11. creat 建立檔案 肯.湯普森個人愛好 去掉了末尾的e ## Unix 第7版 1976~1979 1. 第7版是第一個可以移植的版本,Unix從此爆炸性的移植到無數硬體上 2. 所有Unix共享的部分大多數來自第7版 3. makefile中,每行命令必須以製表符(Tab)開頭,而不能是空格。作者怕用的人太人懶得售後,故意設定的debuff ## 商業化 1. USL(Unix System Laboratories)來做Unix的推廣,專有Unix版本:SVR4 ## 派生物 1. 貝爾實驗室新的作業系統Plan 9, 貢獻了Unicode中的UTF-8。UTF-8是可變長的編碼,可以是1個位元組、2個位元組最多不超過4個位元組。UTF-8可以邊讀取變解碼,因為沒有任何合法字元是其他字元的字首(哈夫曼編碼?) 2. Unix 6 在x86上的重新實現:xv6。新版的xv6已經遷移到RISC-V上 個性簽名:時間會解決一切