當前位置: 華文星空 > 心靈

假如當年微軟繼續開發DOS,今天的DOS會是怎樣?

2017-09-03心靈

MS-DOS的那個命令列,叫做User Interface(UI),對應的是http:// COMMAND.COM 這個檔實作的。

拿MS-DOS的後續版本Windows95做例子:使用者直接看到的桌面、檔案總管這些東西,只是由Explorer.EXE實作的一個Graphical User Interface(GUI)。

下圖是Windows95的架構圖:

使用者能直接接觸到圖形界面只是左上角的那一塊32bit shell,透過EXPLORER.EXE和SHELL.DLL實作;

Windows95的內核裏還有大量的東西,包括:

內核:KERNEL32.DLL ADVAPI32.DLL GDI32.DLL USER32.DLL ...

驅動:IO.SYS HIMEM.SYS SYSTEM.DRV VMM32.VXD IFSHLP.SYS IFSMGR.VXD IOS.VXD ...

登錄檔:SYSTEM.DAT USER.DAT

作為對比:對於MS-DOS來說(7.0以前,不含),真正的內核檔只有兩個:IO.SYS和MSDOS.SYS,從檔數量上就能看出來二者之間的差別非常大。

作業系統真正復雜的地方是在於內核的和驅動。使用者介面部份,不管是圖形還是命令列,都不是重點,有些嵌入式作業系統甚至連使用者介面都不存在。

繼續開發MS-DOS,先得說清楚是要繼續開發MS-DOS的什麽功能:

MS-DOS是一個 真實模式 下、 單任務 、基於 命令列 的作業系統。

真實模式:地址空間只有1M多。
單任務:沒有執行緒、行程的概念,任何情況下只有一個任務獨占CPU的全部資源。
命令列:系統預設不內建圖形界面,只有命令列的方式控制電腦。

如果要給MS-DOS續命,最大的瓶頸就是真實模式的1M記憶體上限和單任務。

現在主流的PC配置裏,記憶體的容量都上G了,真實模式1M的限制是非常坑人的。在真實模式下要存取大記憶體,如果透過HIMEM.SYS的話,一個控制代碼在某一個時刻只能存取KB級別的記憶體。為了存取1M的記憶體,不能直接存取,而是可能需要重設控制代碼1000多次,中間可能還要涉及1000多次的記憶體拷貝,效率極低,而且要是存取1G記憶體的話,所有控制代碼全申請完,可能640K的常規記憶體都放不下。

單任務問題雖然不想記憶體上限那麽嚴重,但相當於把很多硬體資源都浪費了,比如想一邊開著下載一邊玩遊戲同時還開著音樂,就不要想了。

FreeDOS至今仍然存在上述問題 ,所以FreeDOS可以用來懷舊,可以用來跑一些老軟體,但別想讓FreeDOS發揮出硬體的完整效能。

至於命令列的問題,本質上,這只是一個使用者介面(User Interface), Explorer.EXE, CMD, powershell, 甚至是bash shell, 都是UI,如果有人肯出錢,肯定有人能搞出來跟MS-DOS一樣的,基於Win10的命令列出來。

給MS-DOS續命的唯一出路, 就是保留命令列,內核的其它工作方式全換掉 ,那為啥微軟不這麽做呢?因為微軟要是不把界面改改,使用者肯定不會花更多的錢去升級系統。

看看微軟從Windows9x開始,每個版本界面都有很多變化,說到底,就是提醒使用者: 花錢買新的系統是值得的,因為界面不一樣 ,界面更好看。Windows95出來的時候,零售價是1995元,要是微軟敢把Win95做成跟DOS一樣的界面,在1996年的時候肯定沒人掏將近2000塊錢去買這麽一個系統,因為使用者根本不懂得記憶體上限、多工這些東西。

作業系統的最重要的部份是內核和驅動,UI只是一個殼子,但大多數使用者只看到了這個殼子。

參考連結:

Architecture of Windows 9x
FreeDOS - Wikipedia