Unix 和 Windows 的有趣比較

Unix 和 Windows NT 比較

來源于這兩本書,把兩本書對照來讀,發現很多有意思的地方:
《Unix 傳奇》
https://book.douban.com/subject/35292726/

《觀止 微軟創建NT和未來的奪命狂奔 》
Showstopper!: The Breakneck Race to Create Windows NT and the Next Generation at Microsoft

https://book.douban.com/subject/3699395/

在這里插入圖片描述在這里插入圖片描述

1. 創始人的教育經歷

首先是創始人的信息,他們都是 1942 年前后生人,但是家庭環境和個人成長經歷很不一樣:

Unix:
Dennis Ritchie (1941) 老爸是貝爾實驗室的科學家,他獲得哈佛博士,1966年 進入貝爾實驗室實習隨后成為正式員工。

Kenneth Thompson (1943) UC 伯克利碩士, 1966年進入貝爾實驗室。 他喜歡自由自在的生活,對加入大公司不太感興趣,貝爾實驗室花了不少努力請他去實驗室參觀,并后續誠懇邀請他入職。

在這里插入圖片描述

Brian Kernighan (1942) 多倫多大學學士,普林斯頓博士,1967 進入貝爾實驗室實習隨后成為正式員工。大學時開始編程 (COBOL,FORTRAN) 但是不得其法。
年輕時的 Brian,他一直留著大胡子,比較顯老

Windows NT:

David Cutler (1942) 密歇根州 Olivet 文理學院的學士

貧苦出身,和父親(汽車廠的清潔工)缺少交流,在學校時展現出聰明才智,并且在各種體育項目都是明星球員。他靠體育獎學金上了大學,但是受傷中斷了體育生涯。1965年畢業后拒絕了 GM 的程序員 offer (那時候程序員職業名聲不好),而進入杜邦公司。 他開始并不喜歡計算機編程,由于工作的原因不得不學,被觸動后決定要成為強者,半夜去學習,成功地在 IBM 大型機上實現實時系統處理化學數據。

在這里插入圖片描述

2. 學習方法

他們學習編程都不是一學就精通。 但是都喜歡熬夜折騰。

Ken Thompson:午夜之后會用自己的鑰匙去開機房,在大型機上折騰直到第二天早上 8 點。 "我很快樂,毫無雄心壯志,是一個沒有目標的工作狂“

David Culter:半夜去上機,犯各種錯誤,然后從錯誤中學習。

關于折騰, 我們教授(女)曾經說,當年上機時間非常寶貴,女生通常把算法考慮非常仔細,把代碼仔細地打在卡片上,上機一次運行就成功,于是高高興興地下機了,其實對具體的電腦了解不多。 男生通常很自信,但是程序經常不對,在機器上折騰很多次。 后來,女生都當了老師,男生大多去做實際開發工作了。

我在Unix 系統上也喜歡折騰, 經常把機器搞崩潰,半夜重裝系統。 😃

3. 編程的能力

Ken Thompson: 開發了國際象棋程序 Belle,是第一個拿到國際象棋大師稱號的程序。 他在一臺快要過時的PDP-7 (8K * 18位 內存)寫了一個游戲,然后寫了簡單的文件系統。 正好他妻子帶娃走親戚,不在家三周時間,他用這三周時間寫出操作系統的的其他模塊。

故事: 當時安裝了Unix的PDP-11被放在貝爾實驗室供大家使用,有一天大家伙發現Ken總是可以得到最高的權限輕松進入他們的帳戶,在貝爾實驗室這種高人云集的地方,這簡單是太不能容忍了,于是有若干高人跳了出來,仔細分析Unix代碼,找到后門,修改后再重新編譯整個Unix,當所有人都以為這個世界應該從此清靜了的時候,卻發現Ken還是很容易就取得了他們的帳戶權限,為此大家郁悶不已。至到很多年后,Ken才道出其中的原委,原來代碼里確實存在后門,不過并不在Unix代碼中,而是藏在編譯Unix的編譯器里,每次編譯器編譯時就會自動加入后門代碼,而當時整個貝爾實驗室都用的是Ken所寫的C編譯器。 (來源:https://i.linuxtoy.org/docs/guide/ch45s05.html)

David Culter: 他的同事評價他的編程能力: “他處理困難的問題和處理簡單問題一樣快。 ”
這說明,對于他來說,這些問題的復雜度都是一個等級,可能他期待更難的問題。

4. 典型程序員的特點是什么?

Unix 傳奇:從書上的描述看, 這些人都是:友善,有合作精神,追求卓越。

Unix 創立者:對自己嚴格要求,經常鼓勵別的同事(能在貝爾實驗室工作的人非常聰明, 可能鼓勵就足夠了)

Unix 創立者們開會:幾乎沒有正式的會議,就是聊天,郵件,而且沒有什么大的沖突。

NT: 作者這樣描述 David Cluter,并說這是普遍程序員的特點:

// David Culter 的特點
single-minded (專注)
obsessive (執著,一根筋)
competitive (好勝).

David 對自己嚴格要求, 也用同樣的標準要求所有團隊成員。 他這樣評價自己:

I thrive on stress. (我在壓力下茁壯成長)

David 的團隊開會的模式是: 前十五分鐘平靜地討論會議議程,中間充滿了有敵意的大嗓門,最后大家居然能微笑著走出會議室。

5. 程序員和領導的關系

**Unix:**貝爾實驗室的行政領導通常不管程序員在干什么。 他們的管理方法是:找到優秀的員工,把新員工介紹給優秀的老員工,然后讓大家自己尋找項目和合作者。

對于那些長年做一件事情(還沒有成果)的人,管理層會保持耐心,以待長遠。

不同部門的領導在互相評價兄弟團隊的員工很少說:“我的人比你的人強”, 而更加會說 “別忘了你的人還做了一件好事”。

NT:
David Culter 在 DEC 公司的時候, 他的領導 Gordon Bell 給了他很大的自由度,并保護他不受其他人的打擾。 在Gordon 離職后,David 把團隊搬到西雅圖, 因為那時候波士頓到西雅圖沒有直飛的航班, 公司大領導很少來視察,他獲得了很多自由。

加入微軟后, 蓋茨和鮑爾默都給了David Culter 很多空間, 但是也派了微軟原生的程序員去合作,希望雙方能磨合好。

微軟公司的績效評價經歷了很多階段,從末位淘汰到不同團隊之間惡意爭奪排名(盡管不同的工程師做的事情不具備可比性)。

6. 和先行者 OS 的關系

Unix 的先行者叫 Multics, 是GE,MIT,Bell Lab 等多方合作的項目,經歷了典型的過度設計和拖延,最后Bell Lab 退出了合作。 然后兩個程序員 (Ken,Dennis) 自己做出了簡單的早期的 Unix , 一個 Minimal Viable Product, 足夠好到能給同事們用,就行了。

NT 的先行者是 VMS,是 DEC 公司的還算成功的小型機的操作系統。 也是 David Culter 領導開發的。 David 在離開 DEC 公司前做的一個項目 Prism 失敗了,被公司高層砍掉,他在項目解散會上流下了熱淚… 隨后加入了微軟, 他想用 NT 證明什么呢?

  1. 項目的難度

Unix: 是幾個非常聰明的計算機科學家和工程師寫給自己用的簡單操作系統。

1969:用匯編語言寫的第一版,隨后移植到別的PDP 機器上
1971: 發明了C 語言,
1973: 用 C 語言重寫 Unix
1974: 正式向外界宣布,獲得學術界的重視和采用
1978:大約有 600 臺中型機使用 Unix
1979:版本 7 發布,隨后Unix 走向了紛繁復雜的開源,變異,壯大之路。一路有各種版權糾紛伴隨。

NT:是一個商業公司工程團隊寫給商業用戶的操作系統。要支持 DOS,OS/2, Windows 應用程序。 要有現代化的操作系統內核,網絡功能,應用程序支持,圖形界面。

1989:早期設計
1990/1: 最小版本 (計劃)
1990/7: Code Complete 代碼完成 (計劃)
1990/10: 應用程序 ready (計劃)
1991/3: 最終版 (計劃)
1993/7: 最終版 NT3.1(實際,比計劃晚了兩年)能運行在 12M 的內存,需要90 M 的硬盤。
在這里插入圖片描述

8. OS 的設計哲學

Unix 的哲學

https://zh.wikipedia.org/wiki/Unix%E5%93%B2%E5%AD%A6

程序應該只關注一個目標,并盡可能把它做好。
讓程序能夠互相協同工作。應該讓程序處理文本數據流,因為這是一個通用的接口。

感謝 Unix 的發明者和后來的維護者,布道者, 讓我們可以使用 Unix,Linux,MacOS,iOS,還有很多其他的分支… … 也影響了幾代程序員…

9. 下一代

Unix 的下一代是什么,它也很成功么? 一幫證明過自己的科學家來設計下一代的 OS,為何幾乎沒有人聽說過呢?

請看 Plan9 的故事: Plan-9效應:為什么東西不壞就不要去修它_ IT技術精華 (taocms.org)

NT 的下一代是什么,它也很成功么?

Windows XP 是最成功的 NT 下一代,它在市場上服役的時間遠遠超過了原來的預期,微軟 2014 年才停止發布它的安全更新。
然后進入質量和體驗起起伏伏的后代:
Windows Visa:開發過程混亂,用戶體驗差
Windows 7:改進性能,提高穩定性,用戶體驗好
Windows 8:想一舉搞定 PC 和 Mobile 體驗,隱藏 “開始” 按鈕,探索各種觸摸界面… 用戶反饋差
Windows 10: 綜合滿足了各方面的需求,還算不錯,但是 PC 時代已經慢慢落幕了
Windows 11:還有人很在乎么?

David 視頻采訪,回顧了 Windows Longhorn 系統的開發歷程,并坦言該系統所編寫代碼是“他見過最糟糕的”。
在這里插入圖片描述

革命性的下一代:請搜索 Midori。

提問

如何用Shell 命令組合起來完成一個復雜的任務,請看例子:

如何用 awk sed 命令統計一個 Unix 系統中文件大小的分布情況?例如,10K,100K,1M,10M,1G,100G 以上的文件都占多少比例?

答案和討論見評論區 😄

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63096.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63096.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63096.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SSM 垃圾分類系統——高效分類的科技保障

第五章 系統功能實現 5.1管理員登錄 管理員登錄,通過填寫用戶名、密碼、角色等信息,輸入完成后選擇登錄即可進入垃圾分類系統,如圖5-1所示。 圖5-1管理員登錄界面圖 5.2管理員功能實現 5.2.1 用戶管理 管理員對用戶管理進行填寫賬號、姓名、…

系列1:基于Centos-8.6部署Kubernetes (1.24-1.30)

每日禪語 “木末芙蓉花,山中發紅萼,澗戶寂無人,紛紛開自落。?”這是王維的一首詩,名叫《辛夷塢》?。這首詩寫的是在辛夷塢這個幽深的山谷里,辛夷花自開自落,平淡得很,既沒有生的喜悅&#xff…

Y20030004基于asp.net+Sql的環保網站的設計與實現(附源碼 調試 文檔)

環保網站的設計與實現 1.摘要要2. 系統功能3.功能結構圖4.界面展示5.源碼獲取 1.摘要要 近幾年國家對于環境管理是高度重視,尤其是對于環境生態的破壞與環境污染,已經嚴重影響到人類的生存和發展。為了使生態環境能夠得到保護和改善,持續發展…

安全計算環境-(一)路由器-1

安全計算環境-網絡設備 安全管理中心針對整個系統提出了安全管理方面的技術控制要求,通過技術手段實現集中管理;涉及的安全控制點包括系統管理、審計管理、安全管理和集中管控。以下以三級等級保護對象為例,描述安全管理中心各個控制要求項的…

D9741是一塊脈寬調制方三用于也收路像機和筆記本電的等設備上的直流轉換器。在便攜式的儀器設備上。

概述: D9741是一塊脈寬調制方三用于也收路像機和筆記本電的等設備上的直流轉換器。在便攜式的儀器設備上。 主要特點: ● 高精度基準電路 ● 定時閂鎖、短路保護電路 ● 低電壓輸入時誤操作保護電路 ● 輸出基準電壓(2.5V) ● 超過工作范圍能進行自動校…

數據挖掘之聚類分析

聚類分析(Clustering Analysis) 是數據挖掘中的一項重要技術,旨在根據對象間的相似性或差異性,將對象分為若干組(簇)。同一簇內的對象相似性較高,而不同簇間的對象差異性較大。聚類分析廣泛應用…

Qt 圖形框架下圖形拖動后位置跳動問題

在使用Qt 的圖形框架QGraphicsScene,QGraphicsView實現圖形顯示時。遇到一個很棘手的BUG。 使用的圖形是自定義的QGraphicsObject的子類。 現象是將圖形添加到畫布上之后,用鼠標拖動圖形,圖形能正常改變位置,當再次用鼠標點擊圖…

Vue技術中參數傳遞:Props與事件的實踐指南

在Vue.js中,組件間的參數傳遞是構建動態和交互式應用的核心。本文將深入探討如何通過Props和事件($emit)在Vue組件間進行參數傳遞,并提供代碼示例。 Props傳遞數據 Props是Vue中組件間傳遞數據的一種方式,它允許父組…

一、LRU緩存

LRU緩存 1.LRU緩存介紹2.LRU緩存實現3.LRU緩存總結3.1 LRU 緩存的應用3.2 LRU 緩存的優缺點 1.LRU緩存介紹 LRU是Least Recently Used 的縮寫,意為“最近最少使用”。它是一種常見的緩存淘汰策略,用于在緩存容量有限時,決定哪些數據需要被刪…

LabVIEW光柵衍射虛擬仿真系統

隨著現代教育技術的快速發展,虛擬仿真實驗平臺逐漸成為物理實驗教學的重要輔助工具。基于LabVIEW的平面透射光柵虛擬仿真系統幫助學生更好地理解和分析光柵衍射現象,提高教學質量和學生的學習興趣。 項目背景 在波動光學的教學中,光柵衍射實…

241211 selenium問題記錄

The process started from chrome location /usr/bin/chromedriver is no longer running, so ChromeDriver is assuming that Chrome has crashed. 聲明option類 chrome_option.add_argument(--headless) 后臺啟動webdriver NoSuchDriverException(msg) from err selenium.c…

前端核心知識總結

?前端架構知識總結?主要包括以下幾個方面&#xff1a; ?HTML?&#xff1a;HTML是構建網頁的基礎&#xff0c;使用各種標簽定義網頁的結構&#xff0c;如<html>、<head>、<body>等。HTML5引入了新的語義化標簽&#xff0c;如<article>、<section…

libcublas.so.11: cannot open shared object file: no such file or di

問題&#xff1a;在linux系統安裝tensorrt后import tensorrt時出現 libcublas.so.11: cannot open shared object file: no such file or directory 或者 libcublasLt.so.11&#xff1a;cannot open shared object file: no such file or directory 或者 libcudnn.so.8&…

Linux編譯Kernel時的文件zImage、文件dtb(dtbs)、核心模塊分別是什么東西?

zImage文件的介紹 在編譯Linux內核時&#xff0c;zImage 是一種內核映像文件&#xff0c;它是內核的壓縮版本&#xff0c;通常用于引導嵌入式設備或其他資源有限的環境。 zImage 的具體含義 zImage 是 “Compressed Kernel Image” 的縮寫。它是通過壓縮原始的內核映像&…

Spring Boot 3.x嵌入MongoDB 進行測試

在現代應用開發中&#xff0c;數據庫是不可或缺的一部分。對于使用 MongoDB 的 Java 應用&#xff0c;進行單元測試時&#xff0c;通常需要一個輕量級的數據庫實例。de.flapdoodle.embed.mongo 是一個非常有用的庫&#xff0c;它允許開發者在測試中嵌入 MongoDB 實例&#xff0…

scala隱式類

1 定義 隱式類指的是用implicit關鍵字修飾的類。在對應的作用域內&#xff0c;帶有這個關鍵字的類的主構造函數可用于隱式轉換。 2示例 現在有一個需求&#xff1a;有一個 Person 類&#xff0c;含有work&#xff08;&#xff09;方法&#xff0c;有一個 Student 類&#xff0…

Swin Transformer:用Transformer實現CNN多尺度操作

文本是關于Swin Transformer基礎知識的了解 論文&#xff1a;https://arxiv.org/pdf/2103.14030 項目&#xff1a;https://github. com/microsoft/Swin-Transformer. 實現一個Swin Transformer&#xff1a;Swin Transformer模型具體代碼實現-CSDN博客 Swin Transformer mlp…

系列2:基于Centos-8.6Kubernetes 集成GPU資源信息

每日禪語 自省&#xff0c;就是自我反省、自我檢查&#xff0c;自知己短&#xff0c;從而彌補短處、糾正過失。佛陀強調自覺覺他&#xff0c;強調以達到覺行圓滿為修行的最高境界。要改正錯誤&#xff0c;除了虛心接受他人意見之外&#xff0c;還要不忘時時觀照己身。自省自悟之…

flutter控件buildDragTargetWidget詳解

文章目錄 1. DragTarget 的核心概念基本屬性 2. 基本用法3. 使用 buildDragTargetWidget4. 常見場景5. 注意事項 buildDragTargetWidget 不是 Flutter 中的內置 API 或方法&#xff0c;但根據命名習慣&#xff0c;它很可能是您正在實現或使用的一個方法&#xff0c;用于在 Flut…

MySQL遷移SQLite

將 MySQL 的表結構和數據遷移到 SQLite&#xff0c;可以通過以下步驟實現。這個過程主要包括導出 MySQL 數據庫到 SQL 文件&#xff0c;然后將其導入到 SQLite 數據庫中。 步驟 1: 導出 MySQL 數據庫 首先&#xff0c;需要將 MySQL 數據庫導出為一個 SQL 文件。可以使用 mysq…