日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DOS环境下支持的最大内存是多少?

發布時間:2025/5/22 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DOS环境下支持的最大内存是多少? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

DOS 6.22 can address 640 KB (not MBytes!) of conventional memory and use upto 64 MB of extended memory via DPMI and DOS Extender or himem.sys.

(來源:https://www.zhihu.com/question/20070475)

  • 基本內存 占據0~640KB地址空間。
  • 保留內存 占據640KB~1024KB地址空間。分配給顯示緩沖存儲器、各適配卡上的ROM和系統ROM BIOS,剩余空間可作上位內存UMB。UMB的物理存儲器取自物理擴展存儲器。此范圍的物理RAM可作為Shadow RAM使用。
  • 上位內存(UMB) 利用保留內存中未分配使用的地址空間建立,其物理存儲器由物理擴展存儲器取得。UMB由EMS管理,其大小可由EMS驅動程序設定。
  • 高端內存(HMA) 擴展內存中的第一個64KB區域(1024KB~1088KB)。由HIMEM.SYS建立和管理。
  • XMS內存 符合XMS規范管理的擴展內存區。其驅動程序為HIMEM.SYS。
  • EMS內存 符合EMS規范管理的擴充內存區。其驅動程序為EMM386.EXE等。

?

1. DOS的640K內存問題

?

1980年,IBM決定進入個人電腦市場,他選擇了INTEL 16位的8086/8088芯片作為PC機的CPU。8086/8088有20位地址線,能讀寫1M(即1024K)的內存。微軟和IBM在設計DOS操作系統時,決定把這1024K內存分成兩部分,其中640K留給DOS系統和DOS程序使用,其余384K內存留作其他用途,如用作顯示RAM,主板BIOS等。這640K內存也被稱為常規內存或基本內存,早期的DOS和DOS程序就只能在這個范圍內活動,這就是日后所謂的640K內存限制。
在當時,這是個很超前的設計,因為當時PC機所瞄準的對手——采用摩托羅拉8位6502芯片為CPU的APPLE II 只能支持64K內存。所以當時比爾.蓋茨說:“640K內存肯定夠用的了?!?br /> 然而當越來越多軟件硬件加入到PC陣營時,640K內存就開始變得捉襟見肘。DOS本身要占去50多K的內存,然后是各種設備的驅動程序(鼠標、聲卡、光驅、游戲手柄等外設的驅動程序以及DOS本身的ANSI.SYS及虛擬盤驅動程序RAMDIRVE等),還有其他TSR(內存駐留)程序如各種反病毒監察軟件。這些程序不僅都要爭奪640K內存空間,而且還會“賴著不走”。留給其他DOS應用程序的空間大大減少。
此外DOS下的應用軟件功能越來越強,需要越來越多的內存。電子表格軟件LOTUS 1-2-3一出世便至少需要256K的內存;而對于外掛漢字系統,256K內存僅夠16點陣顯示字庫;文字處理軟件WPS本身至少也需要180K內存;數據庫軟件FOXBASE則需要400K左右的內存,WINDOWS就更別提了。PC體系當初引以自豪的640K超前設計,很快便變成了巨大的障礙。

?

2. 擴充內存EMS(Expanded Memory Specification)或LIM內存

1986年,PC機上最受歡迎的軟件——電子表格LOTUS 1-2-3發售新的2.0版,很快便售出數十萬份。然而在許多用戶的PC機(當時286機不普及,386剛出來,最多的還是使用8088CPU的PC機)上,它無法獲得足夠的運行內存。焦頭爛額的LOTUS只好向INTEL求援,Microsoft也隨后參與一起制定了給PC機擴充內存方案:LIM規格出臺,即LOTUS、INTEL和Microsoft聯合訂制,最終版是LIM4.0版。這是一種自帶存儲芯片的擴充內存控制板,插在PC機的擴展槽上,通過它可為PC機提供多達32M的調頁式擴充內存,簡稱擴充內存(EMS)。
只能訪問1M內存的8086/8088又怎么突然能夠額外得到32M的內存呢?當然,CPU并不能直接訪問EMS內存,使用EMS的程序也不知道這些內存到底在那里,它只知道系統中有一些能存儲信息的“頁”。8086/8088不是能訪問1024K內存么,在那384K的保留空間里還有一些空余的空間的,擴充內存控制板就使用了384K保留內存中的64K空余內存,這64K內存被分成4個頁,每頁16K,這部分頁稱為“頁框架”,EMS內存也分成一個個16K的頁,總數可達2000個。使用EMS的程序最多允許同時訪問4個頁,當程序要訪問到某個頁時,內存控制板就把相應EMS頁的內容復制到頁框架中讓程序讀寫,讀寫完后把頁框架中頁的內容復制回相應的EMS內存頁,再把別的EMS頁內容復制到頁框架中讓程序讀寫。所以LIM內存被稱為“調頁式擴充內存”。有點像是內存頁的即時熱切換。也許你覺得這樣做會很麻煩,也確實麻煩,但卻總比沒有好。


?

3. 擴展內存XMS(Extended Memory Specification)

INTEL的后續產品80286仍是16位芯片,但其地址線增加到24位,可以訪問16M內存,其1M以上的內存便稱為擴展內存(XMS),為了能兼容以前的DOS程序,80286擁有兩種工作模式:一種是實模式(real mode),在實模式下,286就象8086/8088一樣工作,只能使用1M內存,這時DOS程序在一個“更快的”8086中運行;另一種是保護模式(protected mode),在保護模式下,80286可以使用多達16M的內存,遺憾的是,在保護模式下需要實模式的DOS程序就不能夠運行了。
再后來80386是32位的芯片,地址線增加到32位,可以訪問4G的內存。與286不同的是,當80386運行在保護模式的時候,它還提供一種虛擬86(V86)模式,提供相當8086的功能,需要實模式的DOS程序這時仍會發現自己在一個“8086”CPU中運行。這還使得DOS的多任務成為了可能。因此MS-DOS5.0及以后版本干脆就在386的保護模式下運行,新的DOS程序如FOXPRO也在保護模式下工作,而由80386提供的V86模式支持以前需要實模式的DOS程序。
從MS-DOS5.0開始,我們得到了一個HIMEM.SYS去統一管理XMS內存。


?

4. 高位內存HMA(High memory area)

人們驚喜地發現,當286及以后CPU的第21根地址線(a20)啟動后,緊挨著前1024K內存的第一個64K區段也可以被實模式的DOS 程序(通過第20根地址線a19)直接訪問,即實模式DOS程序可訪問多達1088K內存。只是這64K內存不能拆分開,只可以由一個DOS程序獨占,所以一般用來存放DOS的命令解釋器http://COMMAND.COM(在config.sys中通過dos=high命令指定)的常駐內存部分。于是把這64K內存從原來的XMS中劃分出來,稱為高位內存(HMA),將http://COMMAND.COM放入HMA后,DOS占用的常規內存可減少50多K。


?

5. 上位內存UMB(Upper Memory Blocks)和保留內存

前面不是說過,DOS初期劃分了384K的保留內存么。其實這部分內存基本上未被真正占用過,主板BIOS用自己的儲存芯片,顯卡上也有自己的顯存……但是,為了兼容以往的DOS程序,系統還是要把一部分BIOS和顯存等映射進來,這部分空間不能被其他DOS程序使用。但即便如此,整個保留內存還有將近一半的空余空間,對于實模式的DOS程序而言,這可是最后一塊可開墾的區域了。
雖然8086和286理論上也有保留內存區,但實際上只有386或以上的計算機才能支持UMB。
MS-DOS5.0提供了一個Emm386.exe,可把保留內存中的空余空間收集起來組成UMB,并在config.sys中提供devicehigh命令把光驅、聲卡等驅動程序裝入UMB,還在命令行提供loadhigh(LH)命令把鼠標驅動等TSR程序裝入UMB,從而省出更多的常規內存。現在有一些新型的DOS軟件如SMARTDRV和UCDOS,CCDOS97也可以自動把自己存進UMB。
保留區還有其他一些潛力可挖,比如現在大家都用VGA了,那么保留區里劃分給單顯(HGA)使用的16K內存,現在完全可以拿出來充進UMB,EMM386.EXE提供了一個I(nclude)參數,可以把指定區域的保留內存劃進UMB。BIOS中有一段代碼是用于啟動時計算機自檢和加載DOS的,當計算機啟動后,這部分代碼占用的空間也可以騰出來。


?

6. 用XMS模擬EMS

既然80386在保護模式下能有廣大的XMS,又能夠運行實模式DOS程序。為什么不把XMS的一部分模擬成EMS,讓需要EMS的DOS程序也沾點光呢?這不就不需要用戶去另買什么擴充板了么?
確實這樣做到了,EMM386.EXE 有一個RAM參數,它把保留內存中的64K空余內存劃出來成為頁框架,然后把EMS的“頁”全部放到XMS中去,這樣需要EMS的DOS程序就能夠得到EMS了,而且對于使用EMS的程序來說和以前并沒有什么不同,在XMS中模擬出來的EMS比真正的EMS還要快。不過這也是使得許多人搞不清XMS和EMS區別的原因。
如果用戶確實不需要EMS(畢竟新的DOS程序都不使用EMS而轉用XMS),可以加載EMM386.EXE時加NOEMS參數,這樣系統就不提供EMS,也就不需要頁框架,可以多64K的UMB可用。




?

7. WINDOWS對應的內存管理

WINDOWS 1.x/2.x/3.x 總的來說,它支持三種模式,實模式對應DOS的8086實模式;標準模式對應286的16位保護模式;增強模式對應于386的32位保護模式,其中標準模式和增強模式需要HIMEM.SYS的支持,即支持XMS。
WINDOWS95/98/ME 都使用386的32位保護模式,但是不再需要用戶在CONFIG.SYS中指定加載HIMEM.SYS,它們在啟動時會自動加載HIMEM.SYS。WINME的系統文件IO.SYS甚至把HIMEM.SYS也包含了進去。
WINDOWSNT/2000/XP/2003 它們工作在386的32位保護模式,但它們在OS/2的基礎上發展而來,不再以DOS為支持系統,以上的內存模式對它們不適用。

?

總結

以上是生活随笔為你收集整理的DOS环境下支持的最大内存是多少?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。