【基本資料】

書名:PC 記憶體管理與多工
出版:旗標 1992.0
7
ISBN:957-717-
??????
頁數:
12 章,576
定價:NT$ 450.0


【自序】


學而不思則罔   思而不學則殆

1991.10.12 我遠離台北的塵囂,來到汐止山上野營。在滿天星斗下,熊熊的營火旁構思這本書的風貌。

一直想把關於記憶體的問題做一個整理。之所以獨鐘於這個主題是因為這方面的資料一般人很不容易得到,畢竟技術層次是比較深一些。但是資料少卻不表示需求少,事實上 PC 軟體界對記憶體知識與技術的渴求日益殷切。

在完成「虛擬記憶體:觀念、設計與實作」一書後,許多熱心的朋友希望我能夠繼續發表 XMS 技術資料,市場的反應也是如此。撰寫「虛擬記憶體」一書的同時,另兩本書的大綱也漸漸形成,一本是「EMS/XMS 程式技術手冊」,完整介紹這兩大規格的每一項功能;另一本就是此書,是對 CPU 模式、記憶體管理及作業系統廣泛深入地討論。為什麼把記憶體和 CPU 扯在一塊兒呢 ? 主要希望藉著對記憶體的了解更進一步地探討 CPU 的多工能力,因為這二者是息息相關的,同時也是發展高性能軟體的基礎。

本書著重在 CPU 的定址能力、作業系統對行程 (process) 的管理、以及目前PC 環境下各種記憶體的技術與應用 (包括 EMS/XMS);對於 CPU 保護模式之程式發展亦著墨甚多,如 DOS Extender、VCPI、DPMI、Windows 3 ...等等。所有主題都偏重在軟體層面上,是和程式人員息息相關的知識,並不牽涉硬體。

本書牽涉頗廣,實則環環相扣,一以貫之。

侯俊傑 (J. J. Hou) 1992/04/28

 

【前言】

記憶體之於電腦的重要性,我想 --- 您可以說它就是電腦的「腦」。腦容量的大小取決於電腦中央處理器 CPU 的能力。從 Intel 16 位元的 8086 一直到 32 位元的 80386 與 i486,CPU 定址能力也從 1 Mega 成長到 4 Giga。

雖然 CPU 的實際定址能力有長足進步,應用程式能夠存取的空間卻受到作業系統的影響。用戶群最廣的 DOS 係使用 CPU 真實模式,所以定址能力只達 1MB;OS/2 是保護模式作業系統,就可以充份發揮 CPU 保護模式的硬體特色;Windows 是以 DOS 為根基,悄悄進入保護模式的一種作業「環境」,它的定址能力也跨過 1MB 的門檻。記憶體方面的知識不一定對應用程式撰寫有「直接」影響,但對於軟體研發人員的電腦整體概念實在是非常重要。

本書介紹的 EMS/XMS 附有完整而實用的介面函數 (API) 程式庫以及測試程式,協助讀者在 DOS 環境下突破 1MB 限制,存取擴展記憶體及延伸記憶體;這或許是本書對實際程式設計工作最「直接」的幫助,可能也是目前在 DOS 環境下工作的大部份程式人員所殷切需要的;其它主題如 CPU 保護模式定址方式、DOS 對行程的控制、DOS Extender、VCPI、DPMI、... 可以充實讀者在高級技術方面的更多知識並了解電腦軟體界的最新驅勢。第 12 章介紹給讀者關於 Windows 的系統觀念及程式設計方法,重點也擺在關於記憶體管理、多工通訊 (IPC) 方面。

本書適合給對電腦架構以及程式設計已經有基礎的人閱讀,我假設讀者已經具備 C 語言的寫作能力 (以及一點點的組合語言能力),並且對 DOS 有基本的了解。絕大部份程式以 C 語言撰寫是為了易讀性的緣故,這些基本介面函數的 I/O 規格都十分單純,如果考慮要更高的執行速度,可以輕易以組合語言改寫。書內的 C 程式有的使用 Microsoft C 編譯,有的使用 Borland C++ 編譯,倒不是某些程式有什麼特殊限制,而是因為這些程式都只是範例,純以方便為主。

本書若能帶給讀者任何實質意義的幫助,是我莫大的快樂。

侯俊傑 (J. J. Hou) 1992/04/28

 

【本書架構】

記憶體是電腦系統中最重要的資源,甚至有一派論者主張 CPU 不是電腦的中心,記憶體才是 ! (這令人想起哥白尼的學說。) 記憶體的定址必需由 CPU 完成,而CPU 的多工能力必需倚賴記憶體管理程式 (memory manager) 的協助。所以 CPU 和記憶體這兩大主題正是探索到電腦最深處的靈魂所在。

本書前半部份屬於 CPU 真實模式 (real mode) 的範疇,後半部份屬於 CPU 保護模式 (protected mode) 的範疇。談到記憶體,不能不談談 CPU 定址,也不能不談到 CPU 的保護模式;談到 DOS 的 640KB 限制,就不能不介紹 DOS 生命的延續「DOS Extender」以及 VCPI/DPMI;另外我把 DOS 和 Windows 對記憶體與行程 (process) 的管理策略也放進來,因為程式員能夠多麼方便地使用記憶體完全視作業系統而定。

許多東西的應用要看從哪一個層次而定,比方說擴展記憶體和延伸記憶體,如果您是 DOS 環境下的應用程式發展者,您必需了解它們的程式介面函數 (API function),才能夠使用它們;如果您是利用 DOS Extender 的方式來發展程式,這兩種記憶體對您而言是透明化的。然而雖然我們不必了解 DOS 亦可以用 C 語言寫程式,如果了解 DOS 是不是更得心應手一些 ?! 同樣的道理許多觀念是讓我們對所使用的軟硬體知其然亦知其所以然。

---- 第一篇 * 真實模式 ----

第一章「總論」是本書各主題的摘要介紹,算是一個入門,為讀者做暖身。對於比較深入的主題像 CPU 保護模式、DOS Extender、VCPI 規格、DPMI 規格等等感到陌生的讀者一定要由此章看起。

第二章「CPU 真實模式---DOS 作業系統」介紹 PC 的真實模式定址以及記憶體配置。DOS 5.0 問世後幾個耳熟能詳的記憶體名詞如 HMA、UMB 也在本章介紹。對大部份讀者而言這可能是比較輕鬆而且熟悉的一章。

第三章「DOS 的記憶體管理」介紹 DOS 及 C 語言提供的與記憶體相關的函數。我舉出一些實例說明這些功能呼叫 (在 DOS 底下稱為功能呼叫,在 C 語言則是函數)。C 編譯器採用國內最常見的 Borland C++ 以及Microsoft C。這一章並且探討兩個截至目前為止尚未公開的 DOS 內部資料結構 : 記憶體控制區段 (MCB) 和系統檔案表格 (SFT)。

第四章「DOS 的行程管理」介紹 DOS 對於行程 (process) 所提供的少量管理功能。雖然 DOS 並不是一個多工作業系統 (至少目前還不是),但它仍有行程的觀念,命令解譯器 COMMAND.COM 就是第一個並且也是一直存在的一個行程,所有其它執行起來的程式都是 COMMAND.COM 的子行程。

第五章「擴展記憶體及其規格 EMS」介紹擴展記憶體規格及程式方法,並附有一個實用的程式庫。由於 EMS 規格問世較早,影響至為深遠,VCPI 就與它有很深的關聯。尤其 386 機器硬體本身就支援記憶體分頁 (paging)、映射 (mapping) 的能力,使得完全以軟體完成 EMS 功能 (不藉助硬體卡) 而達到令人滿意的效率成為一件可能的事 (此種軟體稱為 EMS Emulator),所以 EMS 不僅僅供給 DOS 程式貯存大量資料,它也對 CPU 多工作業極有貢獻。

第六章「延伸記憶體及其規格 XMS」介紹延伸記憶體規格及程式方法,並附有一個實用的程式庫。由於某些原因(文中詳述),XMS 的介面程式庫將以組合語言完成。延伸記憶體是 PC 上亟待開發的空間,做系統的人必需熟悉它,寫應用程式的人也應該了解它。除了漸漸成為工業標準的 XMS ,另外兩種存取延伸記憶體的方法也在最後一節提出介紹,這些方法目前仍廣為許多軟體採用。

第七章「虛擬記憶體管理程式 (設計方法論)」是以大架構著眼,用系統分析方式將我個人的實際設計經驗提供給讀者參考。虛擬記憶體管理系統的設計方法很多,複雜的演算法 "或許" 效果較佳,但不一定成正比。本章只提供一個十分單純直截的設計理念,作一套 DOS 環境下簡易實用的虛擬記憶體管理系統。

---- 第二篇 * 保護模式 ----

第八章「CPU 保護模式」介紹 CPU 的保護模式定址方式。雖然我們撰寫程式不太會直接與本章有關,但本章內容是以下各章節的基石。如果想對 PC 軟體界最新的趨勢與動向有所了解,這是十分重要的基礎。

第九章 介紹「DOS Extender」這個延續 DOS 生命的作法。DOS Extender 的出現使我們不必引頸鵠望保護模式作業系統的誕生 (不但誕生而且要好用、相容),也使得千萬計的 PC 終端使用者,無數計的應用軟體以及其背後的程式設計者能夠在他們熟悉的環境中進行他們每天的工作。從這裡您也可以了解為什麼如 Lotus123 或 AutoCAD 386 等軟體在 DOS 環境下卻能夠不受記憶體限制而發展出那麼強大的功能。

為了使用 386 CPU 保護模式並配合 386 DOS Extender,我將為大家介紹一些 32 位元 C 編譯器,可以將程式編譯成 386 保護模式機器指令。這些32 位元編譯器在國內尚屬少見,我想讀者也不太容易擁有;但我們仍然畫餅充饑一下,看看如何利用這些工具製作 386 程式。如果您不能夠擁有這些工具來實作程式,至少也可以從範例中知道整個過程。至於搭配 Microsoft C、Borland C++ 的 286 DOS Extender 應該對大多數軟體人員而言是比較實惠的產品,我也列出大量的範例程式,供讀者了解 DOS Extender 帶來的好處。

第十章「VCPI」介紹如何讓各個進入 CPU 保護模式之高效能軟體 (如 DOS Extender、EMS Emulator) 在缺乏真正保護模式作業系統的情況下仍能夠和平共處。奧妙處就在於這些程式不要如脫疆野馬,應該遵循一定的規範。有名的多工環境 DESQView 就是架構在 VCPI 介面上。

第十一章「DPMI」是 VCPI 的更新一代產品,也是為了讓進入 CPU 保護模式的高效能軟體能夠共存共容。赫赫有名的 Windows 3 就是建築在 DPMI 介面上。DPMI 擁有 VCPI 無法完成的優點,可能會成為新的工業標準 (尤其在Microsoft 力推之下)。

第十二章「Windows 3 作業環境」為各位介紹 Windows 三種執行模式下的記憶體策略,以及其多工性質。並以一個簡單的例子介紹 Windows 程式設計。除此之外,對動態聯結程式庫 (DLL)、動態資料交換 (DDE) 也著墨甚多。

文中許多名詞將援用原文,只在第一次出現之處或是該名詞的中譯詞已廣為接受並公認者,才採用中文。附錄 A 收錄有本書出現的重要名詞及摘要說明。

各章節中的程式有的是示範性質,有的是頗具價值的程式庫,可以立刻被您的應用程式呼叫引用。每一個程式都有其維護檔案 (make file)。所有檔案均附於書後磁片。

f307.jpg (10769 bytes)