Pamięć konwencjonalna

Z Wikipedii, wolnej encyklopedii

Pamięć konwencjonalna (ang. conventional memory, base memory) – obszar pierwszych 640 KB pamięci operacyjnej w komputerach klasy IBM PC. Jest to główny rodzaj pamięci, który może zostać wykorzystany do uruchamiania programów w trybie rzeczywistym procesorów rodziny x86.

Procesory Intel 8086 i 8088 używane w komputerach IBM PC posiadały magistralę adresową o szerokości 20 bitów, co pozwalało im na bezpośrednie zaadresowanie 1 MB (220) pamięci. W rzeczywistości jednak ograniczenie było niższe – pierwotnie planowano, że jedynie pierwsze 640 kB będzie mogła zajmować pamięć RAM, a pozostałe 384 kB były zarezerwowane dla innych urządzeń (w tym obszarze był na przykład ulokowany frame buffer karty graficznej i ROM BIOS). W praktyce początkowo większość tego obszaru była niewykorzystana, ale zarezerwowana na potrzeby użycia w przyszłych urządzeniach. Szybko okazało się jednak, że zapotrzebowanie na RAM rośnie znacznie szybciej, niż potrzeba użycia zarezerwowanych adresów, co spowodowało, że część pamięci została zmapowana pod nieużywanymi „wyższymi” adresami, nazywanymi pamięcią UMB (ang. Upper Memory Blocks), aby maksymalnie wykorzystać całą przestrzeń adresową.

Pomimo że kolejne procesory Intela posiadały coraz to szersze magistrale i mogły z łatwością zaadresować wyższe adresy pamięci UMB, podział ten został zachowany ze względu na wsteczną kompatybilność. Z czasem pojawiły się odpowiednie techniki na podłączenie większej ilości pamięci tak, aby różne jej bloki były „widoczne” w obszarze UMB – były to tzw. pamięci rozszerzone EMS i XMS (odpowiednio Expanded Memory Specification i Extended Memory Specification). Podłączano w ten sposób nawet kilkanaście megabajtów pamięci, jednak dostęp do nich był utrudniony i dosyć skomplikowany, przez co nie wszystkie programy potrafiły z nich korzystać. W późniejszym czasie, gdy pojawiły się procesory Intel 80386, stworzono również sterownik EMM386.EXE, który pozwalał na emulację pamięci EMS w pamięci XMS, czyli w pamięci dostępnej tylko w trybie chronionym procesora – procesor 80286 mimo posiadania trybu chronionego nie pozwalał na taką emulację, gdyż po przejściu do trybu chronionego nie mógł już programowo wrócić do trybu rzeczywistego; musiał być zastosowany twardy restart.

Podział na pamięć konwencjonalną i rozszerzoną mógł zostać zniesiony dopiero z czasem pojawienia się procesorów 80386, które obsługiwały tzw. tryb wirtualny 8086. Faktycznie jednak zostało to wykorzystane dopiero wiele lat później w 1993 r., gdy pojawił się 32-bitowy system operacyjny Windows NT 3.1 wraz z NT Virtual DOS Machine, ale nawet wtedy część starszych aplikacji działających w trybie rzeczywistym wymagała do działania odpowiednio dużej ilości wolnej pamięci konwencjonalnej.

Zobacz też[edytuj | edytuj kod]