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