Windows_9x

**Windows 9x** 是以 Windows 95 核心作為藍本的微軟作業系統的通稱。這包括了 Windows 95、Windows 98 的所有版本，以及 2000 年發布的 Windows Me。

Windows 9x 所使用的內部發行版本號為「4.x」，而之前基於 MS-DOS 的 Windows 版本則使用等於或小於 3.9 的版本號。Windows NT 使用類似但獨立的、介於 3.5 與 4.0 的版本號。

Windows 9x 聞名於它在桌面的使用；在 1998 年，Windows 占有了作業系統市場份額的 82%。

基於 Windows 9x 產品線的作業系統的大多數功能集與相容性隨著 Windows XP 的發布，被合併到 Windows NT 中。

為了能與 Windows 3.x、MS-DOS 相容，Windows 9x 的核心裡混雜著 16 位元和 32 位元的程式碼。

## 歷史

### 95 之前的 Windows

微軟第一個獨立的 Windows 版本 1.0 發布於 1985 年 11 月 20 號，頗受歡迎。它最初定名為「Interface Manager」，但 Rowland Hanson，微軟的銷售經理，說服公司，認為名稱「Windows」更為引人。Windows 1.0 並非完整的作業系統，而是被擴充的 MS-DOS「操作環境」，並擁有後者原生的缺陷與問題。

Windows 2.0 現身於 1987 年 12 月 9 日。它使用真實模式的記憶體模型，受限於為 1 百萬位元組的最大記憶體。於此模式下，它可執行在使用 286 保護模式的另一個多工管理器下，如 DESQView。

發布於 1990 年的 Windows 3.0 讓 Windows 獲得了巨大的商業成功，提供了完整的 16 位色圖示與圖形的 EGA 與 VGA 支援。

微軟開發了 Windows 3.1，對 Windows 3.0 做了些小改進，由於引入虛擬記憶體機制，Windows 也讓使用者（相對於 Windows/386）享有更好的 MS-DOS 程式多工處理，也引入了多媒體支援。它也剔除了真實模式支援，只可在 80286 或更高的處理器上執行。爾後，微軟又發布 Windows 3.11，對 1992 年的 Windows 3.1 進行了修飾並加入 Windows 3.1 發布之後的所有修補程式與更新。

同時，微軟繼續研發 Windows NT。其主要的系統架構師為 Dave Cutler，曾在 Digital Equipment Corporation（後被康柏收購，現為惠普的一部份）擔任 VMS 的架構師。微軟於 1988 年 8 月聘請他以開發 OS/2 的後繼作業系統，但他卻建立了一個全新的作業系統。

微軟在會上宣布了將會為 Windows NT 及 Windows 3.1 的替換者（Windows 95，代號為 Chicago）開發一個可統一兩者的作業系統。這個計劃的代號為 Cairo。事後看來，Cairo 是一個遠比微軟預期中更為艱難的專案。因此直到 Windows XP 時期產品線才統一成功。

### Windows 95

Windows 3.1 之後，微軟開始研發一款以使用者為導向的、代號為 Chicago 的作業系統。Chicago 的主要設計目標為支援像是 OS/2 和 Windows NT 那樣的 32 位元搶占式多工處理，儘管 16 位元核心將會因向下相容而被保留。首次推出於 Windows NT 中的 Win32 API 被選定為標準 32 位元的程式介面，並通過一種被稱為「thunking」的技術對 Win16 相容。設計全新的 GUI 雖然沒有在計劃之中，但很多 Cairo 的使用者介面元素都被借鑑並用在後來的發布之中（特別是隨插即用 - Plug and Play）。

微軟並沒有把所有的 Windows 程式碼更換到 32 位元；部份程式碼因相容、效能、開發時間等問題而保留一些 16 位元程式碼（儘管沒直接使用真實模式）。再說，它必須滿足早期開發 Windows 的設計決策，以便向下相容，即使這些設計決策不再適用於更現代的計算環境。這些因素最終開始影響作業系統的穩定與效率。

當 Chicago 發布於 1995 年 8 月 24 日時，微軟銷售部採用「Windows 95」作為 Chicago 的產品名字。

微軟接著發布五個不同版本的 Windows 95：

* Windows 95 - 原始版本
* Windows 95 A - Windows 95 OSR1 匯集到安裝程式中。
* Windows 95 B -（OSR2）包含了幾個重大的改進、Internet Explorer（IE）3.0 和完全的 FAT32 檔案系統支援。
* Windows 95 B USB -（OSR2.1）包含了基本的 USB 支援。
* Windows 95 C -（OSR2.5）包含了上述所有功能，再加上 IE 4.0。這是最後一個 Windows 95 版本。

OSR2，OSR2.1 及 OSR2.5 沒有對外發布；相反的，它們僅被售賣給那些會預裝系統在電腦中的 OEM 廠商。一些公司銷售預裝 OSR2 新的硬碟機。

第一個 Microsoft Plus!附加包是為了 Windows 95 而出售的。

### Windows 98

1998 年 6 月 25 日，微軟發布了 Windows 98。它包含了新的硬體驅動，並提供較完善的 FAT32 檔案系統支援，允許硬碟分割區大於在 Windows 95 可接受的 2GB 上限。Windows 98 對 USB 的支援也遠優於僅提供基本 USB 功能的 Windows 95 的 OEM 版本。它還受爭議地整合了 Internet Explorer 瀏覽器到 Windows GUI 及 Windows Explorer（Windows 檔案總管）中。

1999 年，微軟發布了 Windows 98 的第二版，一個過渡性的發布。其值得注意的新特性有 Internet Connection Sharing 和較完善的 WDM 音訊及數據機支援。Internet Connection Sharing 是一種網路位址轉換器，允許多個機器在同一個 LAN 上共享唯一的網際網路連接。Windows 98 的第二版改進了原版的一些問題，支援了更多的硬體驅動。由於很多存於原版中的小問題得到了修復，Windows 98 的第二版成為眾人眼中最穩定的 Windows 9x 發布 —— 以致眾多評論員常說 Windows 98 的測試版本比 Windows Me 的最終版本穩定。

### Windows Me

於 2000 年 9 月，微軟推出了 Windows Me（千禧年版本），被稱為擁有增強的多媒體及網際網路功能的 Windows 98 升級版。引入了系統還原機制，使使用者能在系統故障的情況下還原系統到之前「已知良好」的狀態。Windows Movie Maker 也在這時推出。

Windows Me 被認為是一個在 Windows 98 與 Windows XP 之間臨時過渡性的、為期一年的短期專案。Windows Update 網站為舊版 Windows 提供了很多相關新特性的更新下載。因此，Windows Me 不被認為是一個在 Windows 95 或 98 產品線上的獨立作業系統。

因為頻繁的當機和崩潰，Windows Me 的穩定性與可靠性常被人詬病。一篇《PC World》所載的文章為 Windows Me 取名為「Mistake Edition」（錯誤版本），並把它列為「Worst Tech Products of All Time」（史上最差的科技產品）的第四名。

由於使用者無法像之前的 Windows 9x 版本那樣容易啟動進入 MS-DOS 模式，造成大量使用者快速學會破解 Windows Me 安裝程式以制定出所需服務。

### 衰落

Windows 2000 的發布標誌著介於 Windows 9x 系列與 Windows NT 系列的使用者體驗轉換。NT 受困於缺少 USB 及隨插即用的支援，且披著陳舊過時、難以操作的介面。而 Windows 2000 則有著比 Windows 9x 更炫酷的介面，和較完善的隨插即用及 USB 支援。

Windows XP 的發布顯示了微軟方向的轉變，把個人版及企業版作業系統調和得更為統一。

最後，微軟結束了對 Windows 9x 的支援，並先後對終端使用者及 OEM 廠商停止售賣相關軟體。

### 服務終結

微軟在 2006 年 7 月 11 日終止了對 Windows 9x 系列的支援。DirectX 系列在 8.0a 版停止對 Windows 95 的更新、9.0c 版停止對 Windows 98 與 Me 的更新；Visual Studio 系列最後可將 Windows 98 作為目標平台的版本是 Visual Studio 2008。如今，即使是開源專案的 Mozilla 瀏覽器，在不加工修改的情況下，也無法在 Windows 9x 上執行。

## 設計

### 核心

Windows 9x 是一種混合 16/32 位元的作業系統。

與大多數作業系統一樣，Windows 9x 由核心及使用者空間組成。

儘管 Windows 9x 擁有記憶體保護機制，但它並沒有保護記憶體的首個百萬位元組以防止來自使用者空間應用程式的侵害。這個記憶體區含有讓作業系統正常運作的關鍵碼。寫入這些記憶體區將可能造成系統崩潰或當機。錯誤的應用程式可能意外寫入此記憶體區並使作業系統停止執行。這是系統不穩定的原因之一。

#### 使用者模式

Windows 9x 的使用者模式由三個子系統組成：Win16 子系統、Win32 子系統及 MS-DOS。

Windows 9x/Me 為 GDI 及堆資源保留兩塊 64KB 的記憶體。長時間執行多個應用程式，又或執行多個擁有大量 GDI 元素的應用程式將可能耗盡這些記憶體。若空閒資源少於 10%，Windows 將變得不穩定並可能崩潰。

#### 核心模式

核心模式由虛擬機器管理器（VMM）、Installable File System（IFSHLP）及組態管理器所組成。在 Windows 98 及之後的版本中，又加入了 WDM 驅動管理器（NTKERN）。身為 32 位元作業系統，Windows 9x 中的每一個處理程序都有 4GB 的虛擬記憶體空間：前 2GB 給核心而後 2GB 給應用程式。

### 登錄檔

像 Windows NT 一樣，Windows 9x 把使用者和組態特定的設定儲存在一個大型的、被稱為 Windows 登錄檔的資訊資料庫。硬體特定的設定也存於登錄檔中，且很多裝置驅動器都使用登錄檔來載入組態資料。此前的 Windows 版本使用如 AUTOEXEC.BAT、CONFIG.SYS、WIN.INI、SYSTEM.INI 的檔案及其它帶有.INI 字尾的檔案來維持組態設定。當 Windows 日趨複雜並納入更多的特性時，.INI 檔案們對當時的 FAT 檔案系統無疑顯得笨重至極。對.INI 檔案的相容維持直到 Windows XP 的出現。

儘管微軟不鼓勵使用.INI 檔案以代替登錄檔的使用，但仍有大量的應用程式（尤其是基於 16 位元 Windows 的程式）使用.INI 檔案。Windows 9x 支援.INI 檔案僅僅是為了相容這些程式及相關工具（譬如安裝程式）。AUTOEXEC.BAT 及 CONFIG.SYS 檔案也繼續存在以相容真實模式系統組件並允許使用者更換預設系統設定，譬如 PATH 環境變數。

登錄檔由 User.dat 及 System.dat 檔案組成。在 Windows Me 中，又加入了 Classes.dat。

### 虛擬機器管理器

虛擬機器管理器（VMM）是個在 Windows 9x 核心中的 32 位元保護模式核心。它的主要任務是建立、執行、監管及終止虛擬機器。VMM 提供可管理記憶體、處理程序、中斷及錯誤保護機制的服務。VMM 作用於虛擬裝置（可載入的核心模組，主要由 32 位元環 - 0 或核心模式碼組成，但也包了括其它類型的程式碼，譬如 16 位元真實模式初始化段）以允許這些虛擬裝置攔截中斷或故障來控制一個應用程式對硬體及軟體的存取。VMM 及虛擬裝置都執行在一個單一的、0 權限級（也稱做環 - 0）的 32 位元平面記憶體模型位址空間。VMM 提供多執行緒搶占式多工處理機制。為了同時執行多個應用程式，它把 CPU 時間分配給在這些應用程式及虛擬機器中的執行緒們。

VMM 也負責為系統處理程序及還需執行在 MS-DOS 模式中的 Windows 程式建立 MS-DOS 環境。它是 Win386（在 Windows 3.x 中）的替代品。檔案 vmm32.vxd 是一個壓縮檔案，含有大部份 VxD 的核心程式碼，包括了 VMM.vxd 及 ifsmgr.vxd（利於檔案系統的存取，無需呼叫 DOS 核心真實模式的系統碼）。

### 軟體支援

#### 檔案系統

Windows 9x 本身不支援 NTFS 或 HPFS，但第三方軟體解決了問題，允許 Windows 9x 對 NTFS 卷進行唯讀存取。

Windows 95 的早期版本不支援 FAT32。

同 Windows for Workgroups 3.11 一樣，Windows 9x 支援 32 位元檔案存取。不同於 Windows 3.x，Windows 9x 支援 VFAT 檔案系統，允許檔案名字可達最多 255 個字母以取代 8.3 檔案命名法。

#### 事件紀錄檔及追蹤

Windows 9x 不支援 Windows NT 家族所擁有的事件紀錄檔及追蹤或出錯報表機制，儘管使用像 Norton CrashGuard 的軟體可在 Windows 9x 上實現相似的功能。

#### 安全機制

Windows 9x 乃單使用者系統。所以，它的安全機制不如 Windows NT 有效。其原因之一是 Windows 9x 只正式支援 FAT 檔案系統（包括 FAT12/16/32），儘管 Windows NT 也支援 FAT，且 Windows 9x 也可通過第三方的可安裝檔案系統驅動器來實現對 NTFS 卷的讀寫。FAT 系統的安全機制不彰，每個擁有 FAT 驅動器存取權限的使用者都可存取其內的所有檔案。不像 NTFS，FAT 檔案系統沒有存取控制列表和檔案系統加密機制。

一些與 Windows 9x 同時期的作業系統（不管是多使用者的或是擁有多個不同存取權限的使用者戶口）的重要系統檔案（譬如核心映像）在大多數使用者戶口底下都是不可更動的。相反的，Windows 95 及其後的作業系統為多個使用者提供簡檔選項，它們沒有存取權限的概念，使它們大致相當於單使用者的、單戶口的作業系統，意味著所有處理程序都可修改所有未打開的檔案及引導磁區，或對硬碟進行修改。這使病毒及其它被秘密安裝的軟體更緊密地與作業系統結合在一起，使使用者難以對它們進行偵查及復原。在 Windows 9x 中的使用者簡檔支援僅是為了方便而已。除非修改一些登錄檔項，在登入時可按下「取消」以存取系統，即使所有的簡檔都擁有口令保護。Windows 95 的預設登入對話方塊允許在不登入的情況下建立新使用者的簡檔。

使用者或應用程式可通過刪除或覆寫重要的系統檔案來使作業系統無法運作。使用者或應用程式也可自由更改設定檔以致作業系統無法啟動或正常運作。

安裝軟體常常覆蓋或刪除系統檔案，但沒有正確檢查被覆蓋或刪除的檔案是否為更新的版本或正在使用著。這就是 DLL 地獄的由來。

Windows Me 引入系統檔案保護機制及系統還原來解決此問題。

而被 Windows 9x 從 DOS 繼承的 FAT 及 FAT32 檔案系統則沒有檔案保護機制，也沒有類似 NTFS 的檔案權限機制。

### 硬體支援

#### 驅動程式

Windows 9x 的裝置驅動程式可以是虛擬裝置驅動程式或 WDM 驅動程式（始於 Windows 98）。VxD 通常都有檔案名字字尾.vxd 或.386，而 WDM 相容驅動程式則使用副檔名.sys。32 位元 VxD 訊息伺服器（msgsrv32）乃一程式，能在啟動時載入虛擬裝置驅動程式（VxD）並爾後處理與驅動程式的通信。訊息伺服器也可執行一些背景功能，包括載入 Windows shell（譬如 Explorer.exe 或 Program.exe）。

其它類型的驅動程式有.DRV 驅動程式。這些驅動程式在使用者模式中被載入，通常被使用來控制裝置，譬如多媒體裝置。為了存取這些裝置，動態連結媒體櫃（如 MMAYARWM.DLL）是必需的。

寫給 Windows 9x/Windows Me 的驅動程式被載入到與核心同樣的位址空間，說明驅動程式可能有意或無意地覆寫作業系統的關鍵記憶體區。這將導致系統崩潰，當機及硬碟損壞。故障的作業系統驅動程式乃作業系統不穩定的其一原因。單核心或混合核心之流，如 Linux 及 Windows NT 者也易受失常的驅動程式擾亂核心運作。

驅動及應用程式開發者常常因缺乏為「新」系統編程的經驗而造成了許多被使用者誤認為系統錯誤的錯誤，即使錯誤的發生並不緣由於 Windows 或 DOS 本身之故。為此，微軟自 Windows 95 以後，不斷地重新設計 Windows 驅動程式架構。

#### CPU 及匯流排技術

Windows 9x 不支援超執行緒、系統記憶體保護、對稱多處理或多核處理器。

Windows 9x 不支援 SATA AHCI（Windows 2000 及 Windows XP 預設也不支援 SATA AHCI，需要安裝驅動程式，較為麻煩），或 USB 隨身碟（Windows Me 除外，Windows 98 需要安裝 USB 隨身碟的驅動程式），但出現為數眾多針對 Windows 98/Me 驅動程式的 SATA-I 控制器。對 Windows 98/Me 的硬體驅動程式支援自 2005 年逐漸減少，特別是主機板晶片組和顯示卡的驅動程式。

早期的 Windows 95 不支援 USB 和 AGP。Windows 95 OSR2 可安裝 USB 補丁和 AGP 補丁以支援 USB 和 AGP。

Windows 98 是第一款支援 ACPI 的 Windows。

### MS-DOS

Windows 95 遠遠比 Windows 3.1x 及其前的作品更加削弱 MS-DOS 在 Windows 中的影響。微軟稱，MS-DOS 在 Windows 95 中有兩個角色：一，為引導載入器；二，為 16 位元舊式裝置驅動層。

當 Windows 95 啟動時，MS-DOS 載入、處理 CONFIG.SYS、啟動 COMMAND.COM、執行 AUTOEXEC.BAT，最後執行 WIN.COM。WIN.COM 程式利用 MS-DOS 來載入虛擬機器管理器、讀取 SYSTEM.INI、載入虛擬裝置驅動程式、關閉任何執行的 EMM386 副本並切換到保護模式。一旦在保護模式下，虛擬裝置驅動程式（VxD）將傳送所有 MS-DOS 的狀態資訊到 32 位元檔案系統管理器，並關閉 MS-DOS。這些 VxD 允許 Windows 9x 直接與硬體資源互動，就像提供了底層功能，譬如 32 位元硬碟存取及記憶體管理。接下來的檔案系統操作將會轉送到 32 位元檔案系統管理器。

在 Windows Me 中，WIN.COM 不再在啟動過程中被執行了，而直接從 IO.SYS 執行 VMM32.VXD。MS-DOS（作為 16 位元舊式裝置驅動層）的第二角色是用來在 Windows 中執行 DOS 程式的向下相容工具。許多 MS-DOS 程式及裝置驅動器都以底層的方式與 DOS 互動，例如：修補低階別 BIOS 中斷，譬如 INT 13H（底層硬碟 I/O 中斷）。當一程式發出一 INT 21H 呼叫以存取 MS-DOS，這呼叫將先轉到 32 位元檔案系統管理器。管理器將試圖偵查這一類的修補。若查到此程式嘗試掛接到 DOS，管理器將跳轉到 16 位元程式碼以讓此掛接得以進行。一個被稱做 IFSMGR.SYS 的 16 位元驅動程式將事前被 CONFIG.SYS 載入以在其它驅動及應用程式之前被掛接到 MS-DOS；爾後從 16 位元程式碼跳轉到 32 位元程式碼，當此 DOS 程式執行完畢，以讓 32 位元檔案系統管理器繼續工作。據一 Windows 開發者 Raymond Chen，「此 MS-DOS 乃一精心圈套。任何 16 位元驅動及應用程式將修補或掛接到一個它們以為是真正 MS-DOS 的東東，但實乃一圈套爾。當 32 位元檔案系統管理器偵查到有人上鉤，它必讓此圈套呱呱大叫。（MS-DOS was just an extremely elaborate decoy. Any 16-bit drivers and programs would patch or hook what they thought was the real MS-DOS, but which was in reality just a decoy. If the 32-bit file system manager detected that somebody bought the decoy, it told the decoy to quack.）」

#### MS-DOS 虛擬機器制

在 Windows 9x 中，MS-DOS 應用程式執行在「虛擬 DOS 機」（Virtual DOS Machine）中。

#### MS-DOS 模式

Windows 95 及 Windows 98 也提供對 DOS 應用程式的回歸支援以能夠啟動進入原始「DOS 模式」（MS-DOS 可以在不啟動 Windows 引導，且不使用保護模式）。通過 Windows 9x 的記憶體管理器及其它的「後 DOS」改進，整體系統的效能及功能得到改善。這異於在基於 Windows NT 作業系統中所使的仿真手段。一些非常老舊的應用程式或硬體都需要「DOS 模式」。

使用命令列模式，在不進入 GUI 時，能夠修復特定的系統錯誤。例如，如果一病毒活躍於 GUI 模式中並鎖住自身的檔案，那麼它通常可在 DOS 模式中通過刪除病毒檔案被安全去除。

同樣的，損壞的登錄檔檔案、系統檔案或啟動檔案都可用命令列來恢復。在命令提示字元中鍵入 'WIN' <enter>可從 DOS 模式中啟動 Windows 95 及 Windows 98。但 Windows 2000 中的恢復控制台（Recovery Console）也扮演著類似的角色。

由於 DOS 沒有多工處理機制，基於 DOS 的 Windows 版本（如 9x）缺少檔案系統安全機制，譬如檔案權限。再者，若使用者使用 16 位元 DOS 驅動程式，Windows 可能變得不穩定。在 Windows 9x 系列中就頻繁發生硬碟錯誤。

### 使用者介面

使用者可通過命令列介面（CLI）或圖形化使用者介面（GUI）來控制一個基於 Windows 9x 的系統。對於桌面系統，預設模式通常為 GUI，而 MS-DOS Windows 則使用 CLI。

Windows 9x 的 GUI 執行在一個基於 DOS 的層。

不同於載入到核心空間的 Windows NT GDI，身為 Win32 及 Win16 子系統的 Windows 9x GDI 被載入到使用者空間。

Alpha 通道或透明特效，譬如清單的漸變效果，都不被 Windows 9x GDI 支援。

Windows Explorer 乃桌上型電腦的預設使用者介面，儘管出現了各式各樣的 Windows shell 更換軟體。

其它種類的 GUI 有 LiteStep, bbLean 及程式管理器。GUI 讓使用者更方便地控制個別應用程式的位置與外觀，及更好地與 Windows 系統互動。

## 參見

* Windows 9x 體系結構
* MS-DOS 7

## 參考資料