Pamięć konwencjonalna - Conventional memory

Obszary pamięci z rodziny IBM PC

W pamięć wysoka , konwencjonalne pamięci , zwany także pamięć baza , to pierwsze 640 kilobajtów pamięci na IBM PC lub kompatybilnych systemów. Jest to pamięć do odczytu i zapisu adresowana bezpośrednio przez procesor do użytku przez system operacyjny i aplikacje. Ponieważ ceny pamięci gwałtownie spadały, ta decyzja projektowa stała się ograniczeniem w wykorzystaniu dużych pojemności pamięci do czasu wprowadzenia systemów operacyjnych i procesorów, które uczyniły ją nieistotną.

Bariera 640 KB

Bloki pamięci IBM PC, PC/XT , 3270 PC i PCjr
0-blok Pierwsze 64 KB Zwykła pamięć użytkownika do 64 KB (obszar małej ilości pamięci)
1-blok 2. 64 KB Zwykła pamięć użytkownika do 128 KB
2-blokowy 3. 64 KB Zwykła pamięć użytkownika do 192 KB
3-blok 4. 64 KB Zwykła pamięć użytkownika do 256 KB
4-blok 5. 64 KB Zwykła pamięć użytkownika do 320 kB
5-blok 6. 64 KB Zwykła pamięć użytkownika do 384 KB
6-blok 7. 64 KB Zwykła pamięć użytkownika do 448 KB
7-blok 8. 64 KB Zwykła pamięć użytkownika do 512 KB
8-blok 9. 64 KB Zwykła pamięć użytkownika do 576 KB
9-blok 10. 64 KB Zwykła pamięć użytkownika do 640 KB
Blok A 11. 64 KB Rozszerzona pamięć wideo ( EGA )
B-blok 12. 64 KB Standardowa pamięć wideo ( MDA / CGA )
C-blok 13. 64 KB Rozszerzenie ROM (XT, EGA, 3270 PC)
Blok D 14. 64 KB inne zastosowanie (kartridże PCjr, LIM EMS )
E-blok 15. 64 KB inne zastosowanie (kartridże PCjr, LIM EMS)
F-blok 16. 64 KB System ROM-BIOS i ROM-BASIC

640 KB barierą jest ograniczenie architektoniczny kompatybilnych z IBM PC komputerów. Intel 8088 procesor, stosowany w oryginalnym IBM PC , był w stanie zająć 1 MB (2 20  bajtów), ponieważ chip oferowane 20 linii adresowych . W projekcie komputera pamięć poniżej 640 KB była przeznaczona dla pamięci o dostępie swobodnym na płycie głównej lub na płytach rozszerzeń i nazwano ją konwencjonalnym obszarem pamięci.Pierwszy segment pamięci (64 KB) konwencjonalnego obszaru pamięci nosi nazwę niższej pamięci lub obszaru małej ilości pamięci . Pozostałe 384 KB poza konwencjonalnym obszarem pamięci, zwanym górnym obszarem pamięci (UMA), zarezerwowano do użytku systemu i urządzeń opcjonalnych. UMA została użyta dla ROM BIOS , dodatkowej pamięci tylko do odczytu , rozszerzeń BIOS dla stałych dysków twardych i kart wideo, pamięci karty wideo oraz innych urządzeń wejścia i wyjścia mapowanych w pamięci . Projekt oryginalnego IBM PC umieścił mapę pamięci Color Graphics Adapter (CGA) w UMA.

Zapotrzebowanie na więcej pamięci RAM rosło szybciej niż zapotrzebowanie na sprzęt do wykorzystania zarezerwowanych adresów, co spowodowało, że pamięć RAM została ostatecznie zmapowana na te nieużywane górne obszary, aby wykorzystać całą dostępną przestrzeń adresowalną. To wprowadziło zarezerwowaną „dziurę” (lub kilka dziur) w zbiorze adresów zajmowanych przez sprzęt, który mógł być używany do dowolnych danych. Unikanie takiej dziury było trudne i brzydkie oraz nieobsługiwane przez DOS lub większość programów, które mogły na niej działać. Później przestrzeń między otworami byłaby wykorzystywana jako górne bloki pamięci (UMB).

Aby zachować kompatybilność ze starszymi systemami operacyjnymi i aplikacjami, bariera 640 KB pozostała częścią projektu komputera nawet po zastąpieniu 8086/8088 procesorem Intel 80286 , który mógł adresować do 16 MB pamięci w trybie chronionym . Bariera 1 MB również pozostawała tak długo, jak 286 działał w trybie rzeczywistym , ponieważ DOS wymagał trybu rzeczywistego, który używa segmentów i rejestrów offsetowych w sposób nakładający się, tak że adresy z więcej niż 20 bitami nie są możliwe. Jest nadal obecny w kompatybilnych komputerach IBM PC, jeśli działają w trybie rzeczywistym, takim jak używany przez DOS. Nawet najnowocześniejsze komputery Intela wciąż mają zarezerwowany obszar między 640 a 1024  KB . Jest to jednak niewidoczne dla programów (a nawet większości systemów operacyjnych) w nowszych systemach operacyjnych (takich jak Windows , Linux lub Mac OS X ), które używają pamięci wirtualnej , ponieważ nie mają one w ogóle świadomości adresów pamięci fizycznej. Zamiast tego działają w wirtualnej przestrzeni adresowej, która jest definiowana niezależnie od dostępnych adresów pamięci RAM.

Niektóre płyty główne są wyposażone w opcję „Memory Hole at 15 Megabytes” wymaganą w przypadku niektórych kart graficznych VGA, które wymagają wyłącznego dostępu do jednego konkretnego megabajta pamięci wideo. Późniejsze karty graficzne wykorzystujące magistralę AGP (przestrzeń pamięci PCI) mogą mieć 256 MB pamięci z rozmiarem szczeliny 1 GB .

Dodatkowa pamięć

Jedną z technik stosowanych na wczesnych komputerach IBM XT było zainstalowanie dodatkowej pamięci RAM w zakresie adresów pamięci wideo i przesunięcie limitu do początku adaptera Monochrome Display Adapter (MDA). Czasami do działania tego wymagane było oprogramowanie lub niestandardowy dekoder adresu . To przeniosło barierę do 704 KB (z MDA/HGC) lub 736 KB (z CGA).

Zarządzających pamięcią na 386 opartych systemach (takich jak QEMM lub MEMMAX (V), w DR-DOS ) mogą osiągnąć takie samo działanie dodawania pamięci tradycyjnego przy 640, KB i ruchu bariery 704 KB (do B000 segmentu rozpoczęcia MDA/HGC) lub 736 KB (do segmentu B800, początek CGA). W tej sytuacji można było użyć tylko CGA, ponieważ pamięć wideo Enhanced Graphics Adapter (EGA) sąsiadowała bezpośrednio z obszarem pamięci konwencjonalnej poniżej linii 640 KB; ten sam obszar pamięci nie mógł być używany zarówno dla bufora ramki karty graficznej, jak i programów przejściowych.

Moduły zarządzania pamięcią typu „piggy-back” firmy All Computers AllCard dla komputerów klasy XT i Chargecard dla komputerów klasy 286/386SX, a także dodatkowa karta MicroWay ECM (rozszerzona pamięć konwencjonalna) umożliwia mapowanie normalnej pamięci do A0000 -EFFFF ( hex ) zakres adresów, dający do 952 KB dla programów DOS. Programy takie jak Lotus 1-2-3 , które uzyskiwały bezpośredni dostęp do pamięci wideo, musiały zostać załatane, aby obsłużyć ten układ pamięci. Dlatego bariera 640 KB została usunięta kosztem kompatybilności sprzętowej.

Możliwe było również użycie przekierowania konsoli (albo przez określenie alternatywnego urządzenia konsoli, takiego jak AUX: podczas początkowego wywoływania COMMAND.COM lub późniejszego użycia CTTY ), aby skierować wyjście do i odbierać dane z głupiego terminala lub innego komputera z emulatorem terminala . Zakładając, że BIOS systemu nadal pozwalał na uruchomienie komputera (co często ma miejsce przynajmniej w przypadku BIOS-ów dla komputerów wbudowanych), karta graficzna może zostać wtedy całkowicie usunięta, a system może zapewnić łącznie 960 KB ciągłej pamięci DOS dla programów załadować.

Podobne użycie było możliwe na wielu komputerach kompatybilnych z DOS-em, ale nie IBM, z niefragmentowanym układem pamięci, na przykład Victor 9000 / Sirius 1 lub Apricot PC, który obsługiwał do 896 KB ciągłej pamięci DOS do użycia w jego niestandardowej wersji systemu MS-DOS.

Oprogramowanie sterownika DOS i TSR

Większość standardowych programów napisanych dla systemu DOS niekoniecznie wymagała 640 KB lub więcej pamięci. Zamiast tego, oprócz standardowego oprogramowania DOS, można używać oprogramowania sterownika i narzędzi określanych jako programy Terminate and Stay Resident (TSR). Te sterowniki i narzędzia zazwyczaj na stałe wykorzystywały część pamięci konwencjonalnej, zmniejszając całkowitą dostępną dla standardowych programów DOS.

Niektóre bardzo popularne sterowniki DOS i TSR wykorzystujące pamięć konwencjonalną obejmują:

  • ANSI.SYS - obsługa tekstu kolorowego i różnych rozdzielczości tekstu
  • ASPIxDOS.SYS, ASPIDISK.SYS, ASPICD.SYS - wszystkie muszą być załadowane, aby napędy Adaptec SCSI i CDROM działały
  • DOSKEY.EXE - pozwala na przywołanie poprzednio wpisanych poleceń DOS za pomocą strzałki w górę
  • LSL.EXE, E100BODI.EXE (lub inny sterownik sieciowy), IPXODI.EXE, NETX.EXE — wszystkie muszą być załadowane w celu uzyskania dostępu do serwera plików NetWare na literę dysku
  • MOUSE.EXE - obsługa myszy w programach DOS
  • MSCDEX.EXE — obsługa dostępu do napędu CDROM i litery dysku, używana w połączeniu z oddzielnym sterownikiem producenta. Potrzebne oprócz powyższych sterowników SCSI w celu uzyskania dostępu do urządzenia CDROM SCSI.
  • SBCONFIG.EXE — obsługa urządzenia audio Sound Blaster 16 ; inaczej nazwany sterownik był używany do różnych innych kart dźwiękowych, również zajmujących konwencjonalną pamięć.
  • SMARTDRV.EXE - zainstaluj pamięć podręczną dysku, aby przyspieszyć odczyt i zapis dysku; chociaż mógł przydzielić kilka megabajtów pamięci powyżej 640 KB na buforowanie dysku, nadal potrzebował niewielkiej części pamięci konwencjonalnej.

Jak widać powyżej, wielu z tych sterowników i TSR można uznać za praktycznie niezbędne do pełnego działania systemu. Jednak w wielu przypadkach użytkownik komputera musiał dokonać wyboru, czy będzie mógł uruchomić niektóre standardowe programy DOS, czy też załadować wszystkie swoje ulubione sterowniki i programy TSR. Załadowanie całej listy pokazanej powyżej jest prawdopodobnie niepraktyczne lub niemożliwe, jeśli użytkownik chce również uruchomić standardowy program DOS.

W niektórych przypadkach sterowniki lub TSR musiałyby zostać wyładowane z pamięci, aby uruchomić określone programy, a następnie ponownie załadowane po uruchomieniu programu. W przypadku sterowników, których nie można było usunąć, późniejsze wersje systemu DOS zawierały funkcję menu startowego, która umożliwia użytkownikowi komputera wybieranie różnych grup sterowników i TSR do załadowania przed uruchomieniem niektórych standardowych programów systemu DOS o dużym wykorzystaniu pamięci.

Górne bloki pamięci i wysokie ładowanie

Ponieważ aplikacje DOS stawały się coraz większe i bardziej złożone pod koniec lat 80. i na początku lat 90., powszechną praktyką stało się zwalnianie konwencjonalnej pamięci poprzez przenoszenie sterowników urządzeń i programów TSR do bloków pamięci górnej (UMB) w obszarze pamięci górnej (UMA) podczas rozruchu , aby zmaksymalizować konwencjonalną pamięć dostępną dla aplikacji. Miało to tę zaletę, że nie wymagało zmian sprzętowych i zachowało kompatybilność aplikacji.

Ta funkcja została po raz pierwszy dostarczona przez produkty innych firm, takie jak QEMM , zanim została wbudowana w DR DOS 5.0 w 1990 r., a następnie w MS-DOS 5.0 w 1991 r. Większość użytkowników korzystała z dołączonego sterownika EMM386 dostarczonego w MS-DOS 5, ale produkty innych firm z firm takich jak QEMM również okazały się popularne.

Na starcie, sterowniki mogły być ładowane wysoko przy użyciu dyrektywy " DEVICEHIGH =", podczas gdy TSR mogły być ładowane wysoko przy użyciu dyrektyw " LOADHIGH " , " LH " lub " HILOAD ". Jeśli operacja nie powiodła się, sterownik lub TSR automatycznie ładowałby się do zwykłej pamięci konwencjonalnej.

CONFIG.SYS , ładowanie ANSI.SYS do UMB, brak włączonej obsługi EMS:

DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE NOEMS
DEVICEHIGH=C:\DOS\ANSI.SYS

AUTOEXEC.BAT , ładowanie MOUSE, DOSKEY i SMARTDRV do UMBs, jeśli to możliwe:

LH C:\DOS\MOUSE.EXE
LH C:\DOS\DOSKEY.EXE
LH C:\DOS\SMARTDRV.EXE

Zdolność DOS w wersji 5.0 i późniejszych do przeniesienia własnego kodu rdzenia systemu do obszaru wysokiej pamięci (HMA) za pomocą polecenia DOS =HIGH dała kolejny impuls do zwolnienia pamięci.

Optymalizacja sterownika/TSR

Karty rozszerzeń sprzętowych mogły wykorzystywać dowolny z górnych obszarów pamięci do adresowania ROM, więc górne bloki pamięci miały zmienną wielkość i znajdowały się w różnych lokalizacjach dla każdego komputera, w zależności od zainstalowanego sprzętu. Niektóre okna pamięci górnej mogą być duże, a inne małe. Ładowanie sterowników i TSR na wysokim poziomie spowoduje wybranie bloku i próbę dopasowania do niego programu, dopóki blok nie zostanie znaleziony w miejscu, w którym się zmieści, lub przejdzie do konwencjonalnej pamięci.

Niezwykłym aspektem sterowników i TSR jest to, że używają różnych ilości pamięci konwencjonalnej i/lub górnej, w zależności od kolejności ich ładowania. Można to wykorzystać, gdyby programy były wielokrotnie ładowane w różnej kolejności i sprawdzały, ile pamięci jest wolnej po każdej permutacji. Na przykład, jeśli istnieje 50 KB UMB i 10 KB UMB, a programy wymagające 8 KB i 45 KB zostały załadowane, 8 KB może przejść do 50 KB UMB, uniemożliwiając załadowanie drugiego. Późniejsze wersje DOS pozwalały na użycie określonego adresu obciążenia dla sterownika lub TSR, aby ściślej dopasować sterowniki/TSR.

W systemie MS-DOS 6.0 firma Microsoft wprowadziła MEMMAKER, który zautomatyzował ten proces dopasowywania bloków, dopasowując funkcjonalność oferowaną przez menedżerów pamięci innych firm . Ta automatyczna optymalizacja często nadal nie zapewniała takiego samego rezultatu, jak robienie tego ręcznie, w sensie zapewnienia największej wolnej pamięci konwencjonalnej.

Również w niektórych przypadkach firmy zewnętrzne pisały specjalne wielofunkcyjne sterowniki, które łączyły możliwości kilku standardowych sterowników DOS i TSR w jeden bardzo kompaktowy program, który używał zaledwie kilku kilobajtów pamięci. Na przykład funkcje sterownika myszy, sterownika CD-ROM, obsługi ANSI, przywoływania poleceń DOSKEY i buforowania na dysku zostałyby połączone w jednym programie, zużywając zaledwie 1-2 kilobajty konwencjonalnej pamięci na normalny dostęp do sterownika/przerwania, oraz przechowywanie reszty kodu programu wielofunkcyjnego w pamięci EMS lub XMS.

Przedłużacze DOS

Bariera została pokonana dopiero wraz z pojawieniem się ekstenderów DOS , które pozwalały aplikacjom DOS działać w 16-bitowym lub 32-bitowym trybie chronionym , ale nie były one zbyt szeroko stosowane poza grami komputerowymi . Dzięki 32-bitowemu ekstenderowi DOS gra może korzystać z 32-bitowej płaskiej przestrzeni adresowej i pełnego 32-bitowego zestawu instrukcji bez prefiksów 66h/67h zastępujących operandy/adresy. 32-bitowe rozszerzenia DOS wymagały obsługi kompilatora (kompilatory 32-bitowe), podczas gdy XMS i EMS działały ze starym kompilatorem przeznaczonym do 16-bitowych aplikacji DOS działających w trybie rzeczywistym. Dwie najczęstsze specyfikacje dla ekstenderów DOS to VCPI - a później DPMI - zgodne z Windows 3.x.

Najbardziej godnym uwagi Extenderem DOS zgodnym z DPMI może być DOS/4GW , dostarczany z Watcom . Było to bardzo powszechne w grach dla DOS-a. Taka gra składałaby się albo z 32-bitowego jądra DOS/4GW, albo z kodu pośredniczącego, który ładował jądro DOS/4GW znajdujące się w ścieżce lub w tym samym katalogu i 32-bitowym "liniowym plikiem wykonywalnym". Dostępne są narzędzia, które mogą usunąć DOS/4GW z takiego programu i pozwolić użytkownikowi poeksperymentować z dowolnym z kilku, być może ulepszonych, klonów DOS/4GW.

Przed rozszerzeniami DOS, jeśli użytkownik zainstalował dodatkową pamięć i chciał jej używać w systemie DOS, musiał najpierw zainstalować i skonfigurować sterowniki do obsługi specyfikacji pamięci rozszerzonej (EMS) lub specyfikacji pamięci rozszerzonej (XMS) i uruchomić programy obsługujące jedną z te specyfikacje.

EMS był specyfikacją dostępną na wszystkich komputerach PC, w tym na tych opartych na Intel 8086 i Intel 8088 , która umożliwiała dodatkowemu sprzętowi stronicowanie małych fragmentów pamięci ( przełączanie banków ) przestrzeni adresowej „w trybie rzeczywistym” (0x0400– 0xFFFF). Umożliwiło to 16-bitowym programom DOS pracującym w trybie rzeczywistym dostęp do kilku megabajtów pamięci RAM przez dziurę w rzeczywistej pamięci, zwykle (0xE000–0xEFFF). Program musiałby wówczas jawnie zażądać dostępu do strony przed jej użyciem. Te lokalizacje pamięci mogą być następnie używane dowolnie, dopóki nie zostaną zastąpione inną stroną. Jest to bardzo podobne do nowoczesnej stronicowanej pamięci wirtualnej . Jednak w systemie pamięci wirtualnej system operacyjny obsługuje wszystkie operacje stronicowania , podczas gdy stronicowanie było jawne w przypadku EMS.

XMS dostarczył podstawowy protokół, który umożliwiał 16-bitowym programom DOS ładowanie fragmentów pamięci rozszerzonej 80286 lub 80386 w małej ilości pamięci (adres 0x0400-0xFFFF). Typowy sterownik XMS musiał przełączyć się w tryb chroniony, aby załadować tę pamięć. Problem z tym podejściem polega na tym, że w 286 trybie chronionym nie można było wykonywać bezpośrednich wywołań DOS. Obejściem tego problemu było zaimplementowanie mechanizmu wywołań zwrotnych, wymagającego zresetowania 286. W 286 był to poważny problem. Intel 80386 , która wprowadziła „ wirtualny tryb 8086 ”, pozwolił jądro gość emulować 8086 i uruchomić system operacyjny hosta bez konieczności rzeczywiście zmusić tyłu procesora do „prawdziwej pracy”. HIMEM.SYS 2.03 i nowsze wykorzystywały tryb nierzeczywisty w procesorach 80386 i wyższych, podczas gdy HIMEM.SYS 2.06 i nowsze wykorzystywały LOADALL do zmiany nieudokumentowanych rejestrów wewnętrznych w 80286, znacznie poprawiając opóźnienie przerwań poprzez unikanie powtarzających się przełączania trybu rzeczywistego/chronionego.

Windows instaluje własną wersję HIMEM.SYS w systemie DOS 3.3 i nowszym. Windows HIMEM.SYS uruchamia 32-bitowego dostawcę usług XMS (n).0 w trybie chronionym dla Windows Virtual Machine Manager, który następnie udostępnia usługi XMS (n-1.0 dla urządzeń DOS i 16-bitowej maszyny Windows (np. DOS). 7 HIMEM.SYS to XMS 3.0, ale uruchomienie polecenia 'MEM' w oknie Windows 95 DOS pokazuje informacje XMS 2.0).

Zobacz też

Bibliografia

Dalsza lektura