NT 真的是新技術(shù)嗎? 當(dāng) Microsoft 于 1993 年四月發(fā)布 Windows NT 第一個(gè)版本的時(shí)候, 公司的市場和 公關(guān)部門極其強(qiáng)調(diào)操作系統(tǒng)里面 NT 一詞 (指新技術(shù)). Microsoft 力推 NT 為 性能優(yōu)越的操作系統(tǒng), 包含了用戶所期待的, 用在工作站和中小型服務(wù)器上的操作系統(tǒng) 的所有特性. 雖然 NT 在 1993 年是一個(gè)新的操作系統(tǒng), 擁有新的API(Win32 API), 新的用戶和系統(tǒng)管理工具, 但是 NT 的核心體系與實(shí)現(xiàn)的根源卻要回溯到七十年代中期. 現(xiàn)在......其余的故事: 我?guī)ьI(lǐng)你簡短的回顧一次 NT 的家世, 這將追溯到 Digital 公司和它的 VMS 操作系統(tǒng). 大多數(shù) NT 的重要開發(fā)人員, 包括 VMS 的首席設(shè)計(jì)師, 來自 Digital, 因而他們的背景極大影響了 NT 的發(fā)展. 在我講述完 NT 的根源后, 我將討論 NT 和 VMS 之間不僅僅是巧合的相似, 以及 Digital 在 NT 發(fā)布后的反應(yīng). NT 簡史 NT 的歷史和 David N. Cutler 的工作密不可分, 他是 NT 的首席設(shè)計(jì)師. 1965 年自 Michigan 州的 Olivet 大學(xué)畢業(yè)后, Cutler 為 DuPont (杜邦)公司工作. 雖然計(jì)算機(jī) 不是他的主要興趣, 他在 DuPont 公司的工作之一是在 Digital 的機(jī)器上運(yùn)行模擬程序. 沒過多久 Cutler 就對軟件有了豐富的知識, 他決定去開發(fā)操作系統(tǒng)而不是應(yīng)用程序. 1971 年他加入了 Digital, 在 Massachusetts 州 Maynard 市 Digital 著名的 "磨坊" 工作,為 PDP-11 系列開發(fā)操作系統(tǒng). RSX-11M 是讓 Cutler 結(jié)合總體概念和設(shè)計(jì)原則 的第一個(gè)操作系統(tǒng), 后來這些概念和原則都出現(xiàn)在 NT 上. RSX-11M 是 Digital 為 工業(yè)控制和制造控制開發(fā)的 PDP-11 操作系統(tǒng). 到了 1975 年, Digital 發(fā)覺它的競爭對手正在開發(fā) 32 位處理器, 這種技術(shù)將把客戶 從 PDP 的 16 位系統(tǒng)結(jié)構(gòu)上拉走. Gordon Bell, 計(jì)算機(jī)史上的傳奇人物, 也是 Digital 工程部的副主席, 要求開發(fā) 32 位處理器, 也就是后來 Digital 命名的 VAX. 作為當(dāng)時(shí) Digital 里面的新秀, Cutler 參加了最初的 VAX 開發(fā)組. Digital 讓 Cutler 以及 Dick Hustvedt 和 Peter Lipman 負(fù)責(zé)設(shè)計(jì) VAX 的操作系統(tǒng) VMS. VAX 硬件的主要設(shè)計(jì) 目標(biāo)包括向下兼容 PDP-11 處理器并具有足夠的靈活性, VAX 可以成為從低端工作站到 企業(yè)級服務(wù)器的基礎(chǔ). Digital 同樣要求 VMS 向下兼容 RSX-11M, 可以在不同大小的 機(jī)器上運(yùn)行. Digital 敘述它的公司史,對 VAX 和 VMS "壓上了一切". 和 Digital 遙相呼應(yīng), Bill Gates 最近聲稱 Microsoft 對 NT 5.0 "壓上了一切". Digital 在 1977 年公布了 VAX-11/780 和 VMS 1.0, 并在 1978 年交付了第一批產(chǎn)品. 作為項(xiàng)目領(lǐng)導(dǎo)和 VMS 的主要設(shè)計(jì)者之一, Cutler 繼續(xù)研制 VMS 的后續(xù)版本, 但是他對 Digital 變的不安心. 到了 1981 年 Cutler 威脅要離開 Digital. 為了挽留它們的明星 開發(fā)者, Digital 給了 Cutler 大約 200 個(gè)軟硬件工程師. Culter 把他的小組搬到 西雅圖, 并建立了一個(gè)開發(fā)中心. 這個(gè)精英小組的目標(biāo)是設(shè)計(jì)一個(gè)新的 CPU 體系結(jié)構(gòu)和 操作系統(tǒng), 可以把 Digital 帶到九十年代. Digital 把 Cutler 小組的硬件項(xiàng)目稱為 Prism, 操作系統(tǒng)為 Mica. 1988 年, Digital 執(zhí)行層取消了 Cutler 的項(xiàng)目, 裁去了許多小組成員. Cutler 決定 離開 Digital. 在他這么做之前, Microsoft 執(zhí)行層得到這個(gè)消息, 并且意識到他們 有了絕佳的機(jī)會去雇用 Cutler. Cutler 離開 Digital 的時(shí)候, VMS 發(fā)布的是 5.0 版 (今天的版本是 7.1). 1988 年八月, Bill Gates 雇用了 Cutler. Cutler 去 Microsoft 的條件之一是可以 帶上大約 20 名 Digital 的前雇員, 包括一些 Prism 硬件工程師. Microsoft 爽快地 同意了這個(gè)要求, 公司知道雇用 Cutler 這種境界的操作系統(tǒng)設(shè)計(jì)師妙不可言, 極少 有人能達(dá)到 Cutler 的記錄. 另外, Bill Gates 感到 Microsoft 的長遠(yuǎn)未來將依靠 開發(fā)能夠匹敵 UNIX 的新型操作系統(tǒng). 新操作系統(tǒng)在 Microsoft 的內(nèi)部項(xiàng)目名稱曾經(jīng)是 OS/2 NT, 因?yàn)?Microsoft 的意圖是 繼承 OS/2, 保留 OS/2 的 API 作為新操作系統(tǒng)的主要接口. 1990 年四月 Windows 3.0 的成功改變了 Microsoft 的想法以及它和 IBM 的關(guān)系. Microsoft 發(fā)布 Windows 3.0 六個(gè)星期后, OS/2 NT 改名為 Windows NT, 并且確認(rèn) Win32 API (從 Windows 3.0 的 16 位 API 進(jìn)化來的 32 位版本)為 NT 的正式 API. Gates 決定, NT 最重要的目標(biāo)是 兼容 16 位 Windows API, 能夠不加修改的運(yùn)行 Windows 3.x 應(yīng)用程序. 另外再加上對 DOS, OS/2 和 POSIX API 的支持.從 1990 年到 1993 年八月公布 NT, Cutler 的小組 以瘋狂的速度開發(fā) NT, 項(xiàng)目增長到多達(dá) 200 名工程師和測試員. 圖一顯示 NT 歷史上 的主要事件. 表一: VMS 和 NT 的術(shù)語翻譯 VMS 術(shù)語 NT 譯本 Interrupt Priority Level (IPL) Interrupt Request Level (IRQL) Asynchronous System Trap (AST) Asynchronous Procedure Call (APC) Fork Procedure Deferred Procedure Call (DPC) I/O Request Packet (IRP) I/O Request Packet (IRP) Bug Check Bug Check System Service System Service sys.exe ntoskrnl.exe Paged Pool Paged Pool Nonpaged Pool Nonpaged Pool Look aside List Look aside List Section Section NT 和 VMS 大多數(shù) NT 的核心設(shè)計(jì)人員在 Digital 的時(shí)候設(shè)計(jì)并使用了 VMS; 某些人直接為 Cutler 工作. 他們怎么能避免 VMS 的設(shè)計(jì)思路影響 NT 的設(shè)計(jì)和開發(fā)呢? 許多用戶相信 NT 的開發(fā)者把 VMS 的概念搬到了 NT, 只不過多數(shù)人不清楚在內(nèi)核層 NT 和 VMS 到底有多 相似. (盡管新聞組里有笑話指出把 VMS 的每個(gè)字母加一就可以得到 WNT, Windows NT) 如圖二所示,同 UNIX 和大多數(shù)商業(yè)操作系統(tǒng)一樣, NT 有兩個(gè)執(zhí)行模式. 在用戶模式 可以執(zhí)行應(yīng)用程序, 可以執(zhí)行 OS/2, DOS, 和 POSIX, 提供 API 讓應(yīng)用程序使用. 這些組件沒有特權(quán), 因?yàn)?NT 控制它們以及它們所需的硬件資源. 沒有 NT 的許可, 這些 組件無法直接訪問硬件設(shè)備. 另外, 組件和硬件無法訪問各自的內(nèi)存空間, 也無法訪問 NT 內(nèi)核的內(nèi)存空間. 用戶模式下的軟件如果要訪問硬件, 分配物理或邏輯資源, 它們 必須調(diào)用內(nèi)核. 內(nèi)核在特權(quán)模式上運(yùn)行: 它可以直接訪問內(nèi)存和硬件. 內(nèi)核由一些執(zhí)行子系統(tǒng) (Executive subsystem) 組成, 它們負(fù)責(zé)管理各種資源, 包括進(jìn)程管理器, I/O管理器, 虛存管理器, 安全引用監(jiān)視器(Security Reference Monitor), 以及一個(gè)處理調(diào)度和 中斷的微內(nèi)核. 系統(tǒng)動(dòng)態(tài)的裝載設(shè)備驅(qū)動(dòng)程序, 設(shè)備驅(qū)動(dòng)程序是給不同的互連設(shè)備提供 NT 接口的內(nèi)核部件. 硬件抽象層 (HAL) 對 NT 隱藏了 CPU 和主板上特別錯(cuò)綜復(fù)雜 的東西. 用戶模式的應(yīng)用程序通過 NT 的本地 API 和內(nèi)核交談. 本地 API 多數(shù)未公開, 因?yàn)閼?yīng)用程序被認(rèn)為在和 Win32, DOS, OS/2, POSIX, 或 Win16 打交道. 這些 OS 操作環(huán)境代替應(yīng)用程序訪問內(nèi)核. VMS 不象 NT 那樣 具有不同的操作系統(tǒng)特征, 但是很明顯, 它的內(nèi)核和執(zhí)行子系統(tǒng)是 NT 內(nèi)核和執(zhí)行子系統(tǒng)的前身. Digital 的開發(fā)人員幾乎用 VAX 匯編語言寫了整個(gè) VMS 內(nèi)核. 為了能夠在不同的 CPU 體系結(jié)構(gòu)間移植, Microsoft 的開發(fā)人員幾乎用 C 語言 寫了整個(gè) NT 內(nèi)核. 開發(fā) NT 的時(shí)候, 這些設(shè)計(jì)師用 C 重寫了 VMS, 使它變的干凈, 協(xié)調(diào), 有效, 并加入一些他們想要的功能和性能. 這樣描述顯得他們的付出無足輕重; 畢竟設(shè)計(jì)師們建立了新的 API (就是說 Win32), 新的文件系統(tǒng)(NTFS), 新的圖形界面 子系統(tǒng)和管理環(huán)境, 同時(shí)仍然向下兼容 DOS, OS/2, POSIX, 和 Win16. 然而,從 VMS 內(nèi)部遷移到 NT 做的那么徹底, 以至于 NT 發(fā)表幾個(gè)星期后, Digital 的工程師就注意到 這些驚人的相似. 這些相似能夠填滿一本書. 事實(shí)上, 只要簡單的做個(gè) VMS 術(shù)語和 NT 術(shù)語替換, 你就 可以閱讀 <>;(Digital出版)作為 NT 內(nèi)部描述精確的替代. 表一列出了一些 VMS 術(shù)語和 NT 術(shù)語的對照. 盡管我不打算進(jìn)入細(xì)節(jié), 我在后面還將 討論一些介于 Windows NT 3.1 和 VMS 5.0 之間的主要相似和差異, VMS 5.0 可能是 Dave Cutler 和他的小組涉及到的最后一個(gè)版本. 這個(gè)討論需要你對操作系統(tǒng)的概念 比較熟悉 (想了解 NT 系統(tǒng)結(jié)構(gòu)的背景知識, 請參考 1998 年 3 月出版的 "Windows NT Architecture, Part 1" 和1998年4月出版的"Windows NT Architecture, Part 2" . 表二: VMS 和 NT 間的明顯相似處 VMS NT 進(jìn)程調(diào)度器采用32級優(yōu)先級, 分成兩半. 進(jìn)程調(diào)度器采用32級優(yōu)先級, 分成兩半. 進(jìn)程調(diào)度器決不會把進(jìn)程的優(yōu)先級降低到 進(jìn)程調(diào)度器決不會把進(jìn)程的優(yōu)先級降低到 低于程序編制時(shí)的優(yōu)先級. 低于程序編制時(shí)的優(yōu)先級. 使用優(yōu)先級提升對付CPU獨(dú)占. 使用優(yōu)先級提升對付CPU獨(dú)占. 支持 SMP. 支持 SMP. Digital 在 VMS 7.0 引入內(nèi)核線程. NT 3.1 使用內(nèi)核線程. 強(qiáng)烈依賴于內(nèi)存映射文件. 強(qiáng)烈依賴于內(nèi)存映射文件. 物理內(nèi)存管理器采用請頁虛內(nèi)存. 物理內(nèi)存管理器采用請頁虛內(nèi)存. 使用工作集和基于時(shí)鐘的替換算法. 使用工作集和基于時(shí)鐘的替換算法. 平衡集合管理器用交換解決系統(tǒng)的內(nèi)存請求. 平衡集合管理器不使用交換. 支持設(shè)備驅(qū)動(dòng)程序棧的分層驅(qū)動(dòng)模型. 支持設(shè)備驅(qū)動(dòng)程序棧的分層驅(qū)動(dòng)模型. 采用基于包的異步 I/O 命令. 采用基于包的異步 I/O 命令. 通過對象管理器使資源表現(xiàn)為對象. 通過對象管理器使資源表現(xiàn)為對象. 安全子系統(tǒng)基于訪問控制列表(ACL)的對象. 安全子系統(tǒng)基于訪問控制列表(ACL)的對象. MONITOR Performance Monitor BACKUP NT Backup NT 的進(jìn)程事實(shí)上就是 VMS 的進(jìn)程 (118頁, 表二顯示 VMS 和 NT 進(jìn)程的比較). NT 和 VMS 一樣, 進(jìn)程調(diào)度器采用了 32 級優(yōu)先級. 具有最高優(yōu)先級的進(jìn)程始終在運(yùn)行, 同級 進(jìn)程采用輪轉(zhuǎn)調(diào)度(round-robin). 系統(tǒng)把高 16 級優(yōu)先級看作實(shí)時(shí)或固定優(yōu)先級, 因?yàn)檫M(jìn)程調(diào)度器不處理系統(tǒng)分配在這個(gè)范圍的進(jìn)程的優(yōu)先級.低 16 級優(yōu)先級 (除了 0 級, 這是系統(tǒng)保留, 當(dāng)沒有什么可執(zhí)行的時(shí)候, 用來調(diào)度空閑線程) 是動(dòng)態(tài)的, 因?yàn)? 調(diào)度器, 通常配合設(shè)備驅(qū)動(dòng)程序的輸入, 作為對環(huán)境變化的反應(yīng), 如進(jìn)程從設(shè)備獲取輸入 的時(shí)候, 提高進(jìn)程的優(yōu)先級. 這個(gè)行為叫做提升(boosting). NT 和 VMS 調(diào)度器的一個(gè) 明確特點(diǎn)是它們不會把進(jìn)程的優(yōu)先級降低到低于程序編制時(shí)的優(yōu)先級. 為了對付 CPU 獨(dú)占, 即某個(gè)進(jìn)程消耗所有的 CPU 時(shí)間而不分配給系統(tǒng)的其他進(jìn)程, 調(diào)度器會提升饑餓進(jìn)程 (在預(yù)定的時(shí)間段內(nèi)沒有得到執(zhí)行)的優(yōu)先級. VMS 5.0 和 NT 3.1 的調(diào)度器都支持對稱多處理 (SMP), 即為了增加程序性能, 在不同的 CPU 上同時(shí)執(zhí)行進(jìn)程. NT 進(jìn)程管理器和 VMS 進(jìn)程管理器的一個(gè)主要區(qū)別是, NT 的進(jìn)程包含了一個(gè)或多個(gè) 執(zhí)行線程,而 NT 的任務(wù)調(diào)度器把 CPU 時(shí)間分配給線程, 而不是進(jìn)程. Digital 直到 1995 年的 VMS 7.0 才引入內(nèi)核線程. 這是自從 NT 發(fā)布后 Digital 對 VMS 的幾項(xiàng) 改進(jìn)之一, 看上去是對 NT 功能的回答. 作為答復(fù), Microsoft 于 1996 年的 NT4.0 增加了輕量級用戶模式線程, 是從 VMS 采用的線程上抄來的. NT 和 VMS 的內(nèi)存管理器也同樣的相似. 它們都實(shí)現(xiàn)了虛內(nèi)存地址映射, 系統(tǒng)分為正在 執(zhí)行的應(yīng)用程序和內(nèi)核兩個(gè)部分. 無論 NT 還是 VMS 極大程度上依賴于內(nèi)存映射文件, 尤其是映射某些代碼, 用來執(zhí)行應(yīng)用程序以及實(shí)現(xiàn) copy-on-write 功能 (由于 VAX 的 硬件限制, VMS 提供了效率較低的請求即復(fù)制功能). NT 和 VMS 的物理內(nèi)存管理器基于 請頁虛內(nèi)存(demand-paged). VMS 的內(nèi)存管理器為每個(gè)進(jìn)程分配上下限(稱為工作集), 即系統(tǒng)能夠分配給它們的物理內(nèi)存數(shù)量. 這個(gè)特性把進(jìn)程和進(jìn)程隔開, 使消耗大量內(nèi)存 的進(jìn)程對其他進(jìn)程的影響降低到最小. NT 的內(nèi)存管理器整合了工作集, 以及許多 VMS 工作集調(diào)節(jié)算法的精華. 和進(jìn)程管理器一樣, NT 和 VMS 的內(nèi)存管理器之間存在著顯著的不同. VMS 的平衡集合 管理器(Balance Set Manager)把進(jìn)程覆蓋的全部內(nèi)存交換到分頁文件中, 然后根據(jù)系統(tǒng) 整體的內(nèi)存需求交換回來. Microsoft 沒有把這種機(jī)制(既內(nèi)存交換)引入NT 的平衡集合 管理器中, 雖然 NT 平衡集合管理器的某些第二職能和 VMS 平衡集合管理器的第二職能 一模一樣. NT 的 I/O 管理器很大程度上基于 VMS 的 I/O 管理器. 兩者為了支持不同的設(shè)備類型, 設(shè)備驅(qū)動(dòng)程序棧都采用了分層驅(qū)動(dòng)模型, 它們都采用了基于包的異步 I/O 命令, 支持設(shè)備 驅(qū)動(dòng)程序的動(dòng)態(tài)加載和卸除. 棧架化和可加載化驅(qū)動(dòng)程序使 NT 和 VMS 具有極佳的 延伸性. 兩者都能夠在多個(gè)驅(qū)動(dòng)程序間劃分功能, 各自實(shí)現(xiàn)不同的抽象層. 例如, 系統(tǒng) 可以把一個(gè)容錯(cuò)磁盤驅(qū)動(dòng)程序插到文件系統(tǒng)驅(qū)動(dòng)程序和磁盤驅(qū)動(dòng)程序之間. 容錯(cuò)磁盤 驅(qū)動(dòng)程序?qū)⑹盏较到y(tǒng)發(fā)給某個(gè)本地磁盤驅(qū)動(dòng)器(比如說C驅(qū))的請求, 然后把請求分發(fā)到 多個(gè)物理驅(qū)動(dòng)器上, 以實(shí)現(xiàn)鏡像或 Striping. 異步 I/O 使應(yīng)用程序和內(nèi)核子系統(tǒng)發(fā)出 設(shè)備請求, 并在處理請求的時(shí)候繼續(xù)工作, 而不是傻等. NT 的設(shè)備驅(qū)動(dòng)結(jié)構(gòu)和中斷請求 優(yōu)先級策略都基于 VMS. I/O 管理器的描述文檔除了小小的區(qū)別, 對兩者均適用. 你可以比較圖二和圖三, 執(zhí)行子系統(tǒng)明確展示了 VMS 和 NT 的顯著相似. 許多細(xì)節(jié)表明 NT 從 VMS 繼承了這些東西. 例如, NT 和 VMS 都把資源描述為對象, 通過對象管理器 管理, 這樣就實(shí)現(xiàn)了一致的引用計(jì)數(shù)和記賬. 對象管理器規(guī)范資源的分配, 并且調(diào)用 執(zhí)行子系統(tǒng)的功能, 請求某些對象操作. VMS 的對象管理沒有象 NT 那樣正式, VMS 對象 管理器僅僅是一組函數(shù)的松散集合. Microsoft 擴(kuò)展了 NT 對象管理器, 使其對所有的 內(nèi)核資源提供一致的命名模型. NT 的安全子系統(tǒng)基于自由訪問控制列表(DACL)的對象. 自由訪問控制列表決定哪些用戶 對這些對象可以進(jìn)行各種操作. Digital 在 1984 年的 VMS 4.0 版的安全模型添加了 DACL 增強(qiáng). 因此, VMS 安全系統(tǒng)是 NT 的先驅(qū). Microsoft 甚至在 NT 里包括了類似 VMS 的系統(tǒng)工具, 如性能監(jiān)視器, 基于可擴(kuò)展的 VMS 性能監(jiān)視器 MONITOR. 遠(yuǎn)在 Microsoft 開發(fā) NT 的備份工具以前, VMS 就帶了 BACKUP 工具. "為什么最快的芯片不能贏" (Business Week, 1997年4月28日) 敘述了當(dāng) Digital 的 工程師注意到 VMS 和 NT 的相似性, 他們把觀察結(jié)果報(bào)告給高層. Digital 沒有進(jìn)行 訴訟, 而是和 Microsoft 達(dá)成一項(xiàng)協(xié)議. 1995年夏季, Digital 宣布為 OpenVMS 聯(lián)姻, 要求 Microsoft 幫助 Digital 培訓(xùn) NT 技術(shù)員,把 NT 和 OpenVMS 升級到客戶機(jī)/服務(wù)器 三級網(wǎng)絡(luò)解決方案中的兩個(gè)組成部分, 承諾維持 NT 對 Alpha 處理器的支持. Microsoft 還要償付 Digital 六千五百萬到一億美圓. NT 和 VMS 的演變 雖然 Microsoft 把 NT 介紹為自產(chǎn)的 OS, NT 的生日實(shí)際上比官方聲明的 1993 年更早. NT 包含的系統(tǒng)構(gòu)架和設(shè)計(jì)思路來自另一個(gè)公司的旗艦 OS. 有趣的是, 整個(gè)90年代 Digital 把 NT 的許多特征引入 VMS, 而 Microsoft 要把 VMS 的能力加進(jìn) NT. 例如, VMS 于 1984 年實(shí)現(xiàn)了本地集群, 1996 年實(shí)現(xiàn)了 64 位內(nèi)存和系統(tǒng) API. Microsoft 直到去年下半年才在 NT 中有限的引入集群支持, 而推出 64 位 NT 可能還需要好幾年. 相反的是, Microsoft 發(fā)布的 NT 第一版就支持內(nèi)核線程, 系統(tǒng)事件記錄, 和稱為注冊表的配置數(shù)據(jù)庫.而 1995 年 VMS 7.0 引入內(nèi)核線程, VMS 7.2 將引入 NT 風(fēng)格的事件記錄和注冊表. 傳奇在繼續(xù). 現(xiàn)在 Compaq 擁有了 Digital, VMS 將繼續(xù)發(fā)展呢, 還是被 NT 終結(jié)其命運(yùn)? 有一件事情是肯定的: NT 將繼續(xù)成長, 把它的祖先甩的越來越遠(yuǎn). 轉(zhuǎn)載于http://bbs./thread-438807-1-1.html |
|