
我讀到 DOS 是一個單任務作業系統。
但如果舊版的Windows(還包含Windows 95?)只是DOS的包裝,那麼Windows該如何能夠作為多任務作業系統運作呢?
答案1
視窗95
視窗95遠不僅僅是 MS-DOS 的“只是一個包裝”。引用陳雷蒙的話:
MS-DOS 在 Windows 95 中有兩個用途。
- 它充當引導程式。
- 它可作為 16 位元傳統裝置驅動程式層。
Windows 95 實際上掛鉤/覆蓋了幾乎所有的 MS-DOS,將其保留為相容層,同時自行完成所有繁重的工作。它還為 32 位元程式實現了搶佔式多工處理。
Windows 95 之前的版本
Windows 3.x 及更早版本大多是16 位元(Win32s 除外,這是一種橋接16 和32 的相容層,但我們在這裡忽略它),更依賴DOS,並且僅使用協作多任務處理- 這就是他們不會強制關閉正在運行的程式;它們等待正在運行的程式讓出控制權(基本上,透過告訴作業系統運行下一個正在等待的程式來說「我完成了」)。
多工處理是協作性的,就像舊版的 MacOS 一樣(儘管與多工 DOS 4.x 不同,後者支援搶佔式多工)。任務必須屈服於作業系統才能安排不同的任務。收益被內建到某些 API 呼叫中,尤其是訊息處理。只要任務及時處理訊息,一切都很好。如果一個任務停止處理訊息並忙於執行某些處理循環,則多工處理就不再存在。
至於早期的 Windows 程式如何讓出控制權:
Windows 3.1 使用協作式多工處理- 這表示正在執行的每個應用程式都被指示定期檢查訊息佇列,以查明是否有任何其他應用程式正在要求使用CPU,如果是,則將控制權交給該應用程式。然而,許多 Windows 3.1 應用程式很少或根本不檢查訊息佇列,並在所需的時間內獨佔 CPU 的控制權。像 Windows 95 這樣的搶佔式多任務系統將從正在運行的應用程式中奪走 CPU 控制權,並根據系統的需要將其分配給具有更高優先權的應用程式。
所有 DOS 都會看到這個單一應用程式(Windows 或其他)正在運行,它將傳遞控制權而不退出。理論上,無論如何,搶佔式多任務處理都可以在 DOS 之上實現,使用即時時鐘和硬體中斷來強制將控制權交給調度程序。作為托尼評論,這實際上是由一些運行在 DOS 之上的作業系統完成的。
386增強模式?
註:有一些評論386增強模式Windows 3.x 為 32 位,支援搶佔式多工處理。
這是一個有趣的案例。總結一下連結的部落格文章, 386 增強模式基本上是一個 32 位元虛擬機器管理程序,運行虛擬機。其中一台虛擬機器運行 Windows 3.x 標準模式,該模式可以執行上面列出的所有操作。
MS-DOS 也將在這些虛擬機中運行,並且顯然它們是搶佔式多任務處理 - 因此 386 增強模式管理程序將在虛擬機之間共享 CPU 時間片(其中一個運行普通 3.x,其他運行 MS -DOS),每個虛擬機器都會做自己的事情- 3.x 將協作執行多任務,而MS-DOS 將執行單一任務。
作業系統
DOS 本身在紙面上是單任務的,但它確實支持TSR程序,它將保留在後台,直到被硬體中斷觸發。遠非真正的多任務處理,但也不是完全的單任務處理。
所有這些都在談論比特性?我問的是多工處理!
嚴格來說,位數和多工處理並不相互依賴。應該可以以任何位數實現任何多任務模式。然而,從 16 位元處理器到 32 位元處理器的轉變也引入了其他硬體功能,這些功能可以使搶佔式多任務處理更容易實現。
此外,由於 32 位元程式是新的,因此當它們被強制切換時更容易讓它們工作 - 這可能會破壞一些舊的 16 位元程式。
當然,這都是猜測。如果您確實想知道為什麼 MS 沒有在 Windows 3.x 中實現搶佔式多工處理(儘管有 386 增強模式),您必須詢問在那裡工作的人。
另外,我想修正您的假設,即 Windows 95 只是 DOS 的包裝器;)
答案2
它持續運行一個程序,即 Windows。它在不同的程式之間分配 CPU 時間(和其他資源)。
考慮這個類比:
你的辦公室一次只能容納一個人(這個人被稱為 DOS 先生或夫人)。那個人當時只做一件事。例如,它打電話給一個人並開始與他/她進行 24/7 聊天。
現在你用秘書先生取代那個人。 (視窗)。它會打電話給某人並一直與之交談(仍然是一項任務)。然後過了一段時間,另一個人會說「我現在已經說得夠多了。去和其他人談談,稍後再給我回電」。
秘書先生會打電話給對方。與那個人聊天,直到那個人說同樣的話。然後它會呼叫下一個人,直到它位於要通話的人員清單的末尾。那時它將再次從頂部開始。
- 用技術術語來說,這稱為協作多工處理。它要求對方說他/她有足夠的CPU時間。如果一個人不這樣做,那麼一切都會崩潰。
- 現代系統更加智慧。包括搶佔式多工處理。想像秘書設定了鬧鐘並在 5 分鐘後打斷對方的電話。 “那是很好的簡。但我現在必須和喬談談。我稍後會給你回電。-點擊。”
如果增加多個處理器,情況會變得更加複雜。 :)
答案3
在現代作業系統中,作業系統控制所有硬體資源,運行的應用程式保存在沙箱中。不允許應用程式存取作業系統未分配給該應用程式的內存,並且它不能直接存取電腦中的硬體設備。如果需要硬體訪問,應用程式必須透過裝置驅動程式進行通訊。
作業系統可以強制執行此控制,因為它強制 CPU 進入保護模式。
另一方面,DOS 永遠不會進入保護模式,而是停留在實模式*。在實模式下,正在運行的應用程式可以執行它想要執行的任何操作,例如直接存取硬體。但在實模式下運行的應用程式也可以告訴 CPU 進入保護模式。
最後一部分允許像 Windows 95 這樣的應用程式啟動多執行緒環境,即使它們基本上是從 DOS 啟動的。
DOS(磁碟作業系統),據我所知,只不過是檔案管理系統。它提供了一個檔案系統、導航檔案系統的機制、一些工具以及啟動應用程式的可能性。它還允許某些應用程式駐留,例如滑鼠驅動程式和 EMM 模擬器。但它並沒有嘗試像現代作業系統那樣控制電腦中的硬體。
* 當 70 年代首次創建 DOS 時,CPU 中不存在保護模式。直到80年代中期的80286處理器,保護模式才成為CPU的一部分。
答案4
多工處理只不過是同時運行應用程式的幻覺。它被認為是在你的一端同時執行,但實際上進程 A、B 和 C 按以下順序共享 CPU 時間:A、B、C、A、B、C、A、B...它們只是打開並執行關閉得很快。實際上沒有兩個進程同時運行。
因此,透過暫停一個進程、短暫運行下一個進程、暫停該進程、跳回第一個進程,等等,完全可以讓 MS-DOS 實現多任務。
多工處理只是一個聰明的功能,當 CPU 開始變得足夠快以不斷輪換這些進程並使其對最終用戶來說看起來是同步的時,就開發出來了。
對於那些還記得的人來說,遊戲仍然在 DOS4GW 上運行,因為 Windows 太慢了。