當(dāng)前位置:
首頁 >
DOS环境下支持的最大内存是多少?
發(fā)布時(shí)間:2025/5/22
38
豆豆
生活随笔
收集整理的這篇文章主要介紹了
DOS环境下支持的最大内存是多少?
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
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)
- 基本內(nèi)存 占據(jù)0~640KB地址空間。
- 保留內(nèi)存 占據(jù)640KB~1024KB地址空間。分配給顯示緩沖存儲(chǔ)器、各適配卡上的ROM和系統(tǒng)ROM BIOS,剩余空間可作上位內(nèi)存UMB。UMB的物理存儲(chǔ)器取自物理擴(kuò)展存儲(chǔ)器。此范圍的物理RAM可作為Shadow RAM使用。
- 上位內(nèi)存(UMB) 利用保留內(nèi)存中未分配使用的地址空間建立,其物理存儲(chǔ)器由物理擴(kuò)展存儲(chǔ)器取得。UMB由EMS管理,其大小可由EMS驅(qū)動(dòng)程序設(shè)定。
- 高端內(nèi)存(HMA) 擴(kuò)展內(nèi)存中的第一個(gè)64KB區(qū)域(1024KB~1088KB)。由HIMEM.SYS建立和管理。
- XMS內(nèi)存 符合XMS規(guī)范管理的擴(kuò)展內(nèi)存區(qū)。其驅(qū)動(dòng)程序?yàn)镠IMEM.SYS。
- EMS內(nèi)存 符合EMS規(guī)范管理的擴(kuò)充內(nèi)存區(qū)。其驅(qū)動(dòng)程序?yàn)镋MM386.EXE等。
?
1. DOS的640K內(nèi)存問題
?
1980年,IBM決定進(jìn)入個(gè)人電腦市場(chǎng),他選擇了INTEL 16位的8086/8088芯片作為PC機(jī)的CPU。8086/8088有20位地址線,能讀寫1M(即1024K)的內(nèi)存。微軟和IBM在設(shè)計(jì)DOS操作系統(tǒng)時(shí),決定把這1024K內(nèi)存分成兩部分,其中640K留給DOS系統(tǒng)和DOS程序使用,其余384K內(nèi)存留作其他用途,如用作顯示RAM,主板BIOS等。這640K內(nèi)存也被稱為常規(guī)內(nèi)存或基本內(nèi)存,早期的DOS和DOS程序就只能在這個(gè)范圍內(nèi)活動(dòng),這就是日后所謂的640K內(nèi)存限制。在當(dāng)時(shí),這是個(gè)很超前的設(shè)計(jì),因?yàn)楫?dāng)時(shí)PC機(jī)所瞄準(zhǔn)的對(duì)手——采用摩托羅拉8位6502芯片為CPU的APPLE II 只能支持64K內(nèi)存。所以當(dāng)時(shí)比爾.蓋茨說:“640K內(nèi)存肯定夠用的了。”
然而當(dāng)越來越多軟件硬件加入到PC陣營(yíng)時(shí),640K內(nèi)存就開始變得捉襟見肘。DOS本身要占去50多K的內(nèi)存,然后是各種設(shè)備的驅(qū)動(dòng)程序(鼠標(biāo)、聲卡、光驅(qū)、游戲手柄等外設(shè)的驅(qū)動(dòng)程序以及DOS本身的ANSI.SYS及虛擬盤驅(qū)動(dòng)程序RAMDIRVE等),還有其他TSR(內(nèi)存駐留)程序如各種反病毒監(jiān)察軟件。這些程序不僅都要爭(zhēng)奪640K內(nèi)存空間,而且還會(huì)“賴著不走”。留給其他DOS應(yīng)用程序的空間大大減少。
此外DOS下的應(yīng)用軟件功能越來越強(qiáng),需要越來越多的內(nèi)存。電子表格軟件LOTUS 1-2-3一出世便至少需要256K的內(nèi)存;而對(duì)于外掛漢字系統(tǒng),256K內(nèi)存僅夠16點(diǎn)陣顯示字庫;文字處理軟件WPS本身至少也需要180K內(nèi)存;數(shù)據(jù)庫軟件FOXBASE則需要400K左右的內(nèi)存,WINDOWS就更別提了。PC體系當(dāng)初引以自豪的640K超前設(shè)計(jì),很快便變成了巨大的障礙。
?
2. 擴(kuò)充內(nèi)存EMS(Expanded Memory Specification)或LIM內(nèi)存
1986年,PC機(jī)上最受歡迎的軟件——電子表格LOTUS 1-2-3發(fā)售新的2.0版,很快便售出數(shù)十萬份。然而在許多用戶的PC機(jī)(當(dāng)時(shí)286機(jī)不普及,386剛出來,最多的還是使用8088CPU的PC機(jī))上,它無法獲得足夠的運(yùn)行內(nèi)存。焦頭爛額的LOTUS只好向INTEL求援,Microsoft也隨后參與一起制定了給PC機(jī)擴(kuò)充內(nèi)存方案:LIM規(guī)格出臺(tái),即LOTUS、INTEL和Microsoft聯(lián)合訂制,最終版是LIM4.0版。這是一種自帶存儲(chǔ)芯片的擴(kuò)充內(nèi)存控制板,插在PC機(jī)的擴(kuò)展槽上,通過它可為PC機(jī)提供多達(dá)32M的調(diào)頁式擴(kuò)充內(nèi)存,簡(jiǎn)稱擴(kuò)充內(nèi)存(EMS)。只能訪問1M內(nèi)存的8086/8088又怎么突然能夠額外得到32M的內(nèi)存呢?當(dāng)然,CPU并不能直接訪問EMS內(nèi)存,使用EMS的程序也不知道這些內(nèi)存到底在那里,它只知道系統(tǒng)中有一些能存儲(chǔ)信息的“頁”。8086/8088不是能訪問1024K內(nèi)存么,在那384K的保留空間里還有一些空余的空間的,擴(kuò)充內(nèi)存控制板就使用了384K保留內(nèi)存中的64K空余內(nèi)存,這64K內(nèi)存被分成4個(gè)頁,每頁16K,這部分頁稱為“頁框架”,EMS內(nèi)存也分成一個(gè)個(gè)16K的頁,總數(shù)可達(dá)2000個(gè)。使用EMS的程序最多允許同時(shí)訪問4個(gè)頁,當(dāng)程序要訪問到某個(gè)頁時(shí),內(nèi)存控制板就把相應(yīng)EMS頁的內(nèi)容復(fù)制到頁框架中讓程序讀寫,讀寫完后把頁框架中頁的內(nèi)容復(fù)制回相應(yīng)的EMS內(nèi)存頁,再把別的EMS頁內(nèi)容復(fù)制到頁框架中讓程序讀寫。所以LIM內(nèi)存被稱為“調(diào)頁式擴(kuò)充內(nèi)存”。有點(diǎn)像是內(nèi)存頁的即時(shí)熱切換。也許你覺得這樣做會(huì)很麻煩,也確實(shí)麻煩,但卻總比沒有好。
?
3. 擴(kuò)展內(nèi)存XMS(Extended Memory Specification)
INTEL的后續(xù)產(chǎn)品80286仍是16位芯片,但其地址線增加到24位,可以訪問16M內(nèi)存,其1M以上的內(nèi)存便稱為擴(kuò)展內(nèi)存(XMS),為了能兼容以前的DOS程序,80286擁有兩種工作模式:一種是實(shí)模式(real mode),在實(shí)模式下,286就象8086/8088一樣工作,只能使用1M內(nèi)存,這時(shí)DOS程序在一個(gè)“更快的”8086中運(yùn)行;另一種是保護(hù)模式(protected mode),在保護(hù)模式下,80286可以使用多達(dá)16M的內(nèi)存,遺憾的是,在保護(hù)模式下需要實(shí)模式的DOS程序就不能夠運(yùn)行了。再后來80386是32位的芯片,地址線增加到32位,可以訪問4G的內(nèi)存。與286不同的是,當(dāng)80386運(yùn)行在保護(hù)模式的時(shí)候,它還提供一種虛擬86(V86)模式,提供相當(dāng)8086的功能,需要實(shí)模式的DOS程序這時(shí)仍會(huì)發(fā)現(xiàn)自己在一個(gè)“8086”CPU中運(yùn)行。這還使得DOS的多任務(wù)成為了可能。因此MS-DOS5.0及以后版本干脆就在386的保護(hù)模式下運(yùn)行,新的DOS程序如FOXPRO也在保護(hù)模式下工作,而由80386提供的V86模式支持以前需要實(shí)模式的DOS程序。
從MS-DOS5.0開始,我們得到了一個(gè)HIMEM.SYS去統(tǒng)一管理XMS內(nèi)存。
?
4. 高位內(nèi)存HMA(High memory area)
人們驚喜地發(fā)現(xiàn),當(dāng)286及以后CPU的第21根地址線(a20)啟動(dòng)后,緊挨著前1024K內(nèi)存的第一個(gè)64K區(qū)段也可以被實(shí)模式的DOS 程序(通過第20根地址線a19)直接訪問,即實(shí)模式DOS程序可訪問多達(dá)1088K內(nèi)存。只是這64K內(nèi)存不能拆分開,只可以由一個(gè)DOS程序獨(dú)占,所以一般用來存放DOS的命令解釋器http://COMMAND.COM(在config.sys中通過dos=high命令指定)的常駐內(nèi)存部分。于是把這64K內(nèi)存從原來的XMS中劃分出來,稱為高位內(nèi)存(HMA),將http://COMMAND.COM放入HMA后,DOS占用的常規(guī)內(nèi)存可減少50多K。
?
5. 上位內(nèi)存UMB(Upper Memory Blocks)和保留內(nèi)存
前面不是說過,DOS初期劃分了384K的保留內(nèi)存么。其實(shí)這部分內(nèi)存基本上未被真正占用過,主板BIOS用自己的儲(chǔ)存芯片,顯卡上也有自己的顯存……但是,為了兼容以往的DOS程序,系統(tǒng)還是要把一部分BIOS和顯存等映射進(jìn)來,這部分空間不能被其他DOS程序使用。但即便如此,整個(gè)保留內(nèi)存還有將近一半的空余空間,對(duì)于實(shí)模式的DOS程序而言,這可是最后一塊可開墾的區(qū)域了。雖然8086和286理論上也有保留內(nèi)存區(qū),但實(shí)際上只有386或以上的計(jì)算機(jī)才能支持UMB。
MS-DOS5.0提供了一個(gè)Emm386.exe,可把保留內(nèi)存中的空余空間收集起來組成UMB,并在config.sys中提供devicehigh命令把光驅(qū)、聲卡等驅(qū)動(dòng)程序裝入U(xiǎn)MB,還在命令行提供loadhigh(LH)命令把鼠標(biāo)驅(qū)動(dòng)等TSR程序裝入U(xiǎn)MB,從而省出更多的常規(guī)內(nèi)存。現(xiàn)在有一些新型的DOS軟件如SMARTDRV和UCDOS,CCDOS97也可以自動(dòng)把自己存進(jìn)UMB。
保留區(qū)還有其他一些潛力可挖,比如現(xiàn)在大家都用VGA了,那么保留區(qū)里劃分給單顯(HGA)使用的16K內(nèi)存,現(xiàn)在完全可以拿出來充進(jìn)UMB,EMM386.EXE提供了一個(gè)I(nclude)參數(shù),可以把指定區(qū)域的保留內(nèi)存劃進(jìn)UMB。BIOS中有一段代碼是用于啟動(dòng)時(shí)計(jì)算機(jī)自檢和加載DOS的,當(dāng)計(jì)算機(jī)啟動(dòng)后,這部分代碼占用的空間也可以騰出來。
?
6. 用XMS模擬EMS
既然80386在保護(hù)模式下能有廣大的XMS,又能夠運(yùn)行實(shí)模式DOS程序。為什么不把XMS的一部分模擬成EMS,讓需要EMS的DOS程序也沾點(diǎn)光呢?這不就不需要用戶去另買什么擴(kuò)充板了么?確實(shí)這樣做到了,EMM386.EXE 有一個(gè)RAM參數(shù),它把保留內(nèi)存中的64K空余內(nèi)存劃出來成為頁框架,然后把EMS的“頁”全部放到XMS中去,這樣需要EMS的DOS程序就能夠得到EMS了,而且對(duì)于使用EMS的程序來說和以前并沒有什么不同,在XMS中模擬出來的EMS比真正的EMS還要快。不過這也是使得許多人搞不清XMS和EMS區(qū)別的原因。
如果用戶確實(shí)不需要EMS(畢竟新的DOS程序都不使用EMS而轉(zhuǎn)用XMS),可以加載EMM386.EXE時(shí)加NOEMS參數(shù),這樣系統(tǒng)就不提供EMS,也就不需要頁框架,可以多64K的UMB可用。
?
7. WINDOWS對(duì)應(yīng)的內(nèi)存管理
WINDOWS 1.x/2.x/3.x 總的來說,它支持三種模式,實(shí)模式對(duì)應(yīng)DOS的8086實(shí)模式;標(biāo)準(zhǔn)模式對(duì)應(yīng)286的16位保護(hù)模式;增強(qiáng)模式對(duì)應(yīng)于386的32位保護(hù)模式,其中標(biāo)準(zhǔn)模式和增強(qiáng)模式需要HIMEM.SYS的支持,即支持XMS。WINDOWS95/98/ME 都使用386的32位保護(hù)模式,但是不再需要用戶在CONFIG.SYS中指定加載HIMEM.SYS,它們?cè)趩?dòng)時(shí)會(huì)自動(dòng)加載HIMEM.SYS。WINME的系統(tǒng)文件IO.SYS甚至把HIMEM.SYS也包含了進(jìn)去。
WINDOWSNT/2000/XP/2003 它們工作在386的32位保護(hù)模式,但它們?cè)贠S/2的基礎(chǔ)上發(fā)展而來,不再以DOS為支持系統(tǒng),以上的內(nèi)存模式對(duì)它們不適用。
?
總結(jié)
以上是生活随笔為你收集整理的DOS环境下支持的最大内存是多少?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux系统查看分区文件系统类型
- 下一篇: Qt-Creator编译pthread多