6. Zażądzanie pamięcią
6.1. Od strony technicznej
W komputerach osobistych wykożystujemy zasadniczo dwa typy pamięci:
- pamięć typu RAM (ang. Random Access Memory),
- pamięć typu ROM (ang. Read Only Memory).
Pamięć RAM charakteryzuje się tym, że można ją swobodnie zapisywać i odczytywać. Jedyną wadą jest fakt, że po wyłączeniu zasilania cała zawartość tej pamięci ulega bezpowrotnemu zniszczenmiu. Dlatego też obok niej funkcjonuje pamięć ROM, którą można tylko czytać, a w której są zapisane programy niezbędne do uruchomienia komputera (między innymi Bios).
Pamięć jako całość jest złożona z komórek pamięci, które mogą przyjmować tylko dwie wartości: 0 i 1. Z technicznego puntku widzenia są przerzutniki typu D, o dwóch wejściach: S (Set) - ustawiającego (nadającego wartość jeden) i R (Reset) - zerującego (nadającego wartość 0) oraz dwóch wyjściach: Q i not Q, czyli zanegowanym wyjściu Q. Oznacza to, że na jednym wyjściu mamy 1, to na drugim 0 i odwrotnie. Pamięć jako fizyczny układ scalony nie występuje jednak w postaci pojedyńczych komórek pamięci, występuje w postaci tak zwanych modułów. Moduł pamięci można opisać za pomocą trzech wielkości: pojemność, organizacja i czas dostępu.
Pojemność jest to liczba bitów informacji, jaką można zapisać do danego modułu pamięci - jednostką podstawową jest bajt.
Organizacja mówi o sposobie przydziału bitów na słowa, czas dostępu zaś o tym, jak długo będzie trwało wystawienie zawartości komórki na wyjściu po ustaleniu się adresu na szynie adresowej. Standardowo przyjeł się, że szyna adresowa ma linie oznaczone jako: A0, A1 i tym podobnie. Ilość zależna od typu procesora, zaś szyna danych ma linie oznaczone jako D0, D1, ... i dalej też zależy od typu komputera. Warto zaznaczyć, że procesory 280286 w górę mają możliwość obsłużenia pamięci o wielkości od 16MB do 4GB. Jest tylko "Ale". Procesor musi być w trybie pracy chronionej (Protected), a to już nie leży w zakresie możliwości systemu Dos. są możliwe jednak chwyty, jak przełączenie w tryb Real tylko w niezbędnych momentach, a potem powrót do trybu Protected. Przykładem może być Windows w wersji 3.0 i 3.1.
6.2. Dawno, dawno temu
Na samym początku ery IBM PC istniał procesor 8086 wyposażony w 20 nużek adresowych. Można więc wyliczyć, że maksymalnie można zaadresować 1MB pamięci:
11111111111111111111b = FFFFFh = 1048575d = 1024kB = 1MB
Jednak twórcy tego systemu nei przewidywali aż tak dużego zapotrzebowania naa pamięć, więc podzielili na sztywno 640kB pamięci, resztę zaś przeznaczyli na pamięć Video, Bios, ROM i pamięć dodatkowych sterowników.
6.3. Klasyczny podział pamięci
Ten model pamięci został przygotowany przez twórców komputera IBM PC i systemu operacyjnego MS DOs. Jest ono używany w komputerach klasy XT i AT.
0000:0000 - tablica wektorów przerwań. Każdy wektor zajmuje 4 bajty, i tak dla przykładu: 0000:0000 - wektor przerwania 0; 0000:0004 - wektor przerwania 1; 0000:0008 - wektor przerwania 2 i tym podobnie
0040:0000 - w tym miejscu zaczyna się obszar zmiennych Bios
0050:0000 - zmienne Dos. Wcześniej opisane
xxxx:0000 - część oprogramowania systemowego zgromadzona w pliku IO.SYS
xxxx:0000 - procedury obsługi przerwań wczytywane ze zbioru MSDOS.SYS
xxxx:0000 - bufory Dos'u, miejsce na dane, zmienne oraz programy użądzeń zewnętrznych
xxxx:0000 - rezydentna część programu COMMAND.COM. W naszym komputerze znajdowała się pod adresem 1BA3:0000 i zajmowała niespełna 4kB (3376 - wersja 3.30 systemu). Część ta zawiera procedury obsługi przerwania 2Eh i innych
xxxx:0000 - w tym miejscu zaczyna się pamięć dla programó rezydentnych. W naszym komputerze jest to program NC.EXE (czyli Norto Commander V 3.0) i jego początek ma miejsce w 1CA8:0000
xxxx:0000 - przenośna część COMMAND.COM, która może być zamazana przez inny program, lecz później musi być znowu załadowana z dysku. Dzięki tej częśći można wczytywać polecenia (jest to interpretator poleceń)
xxxx:0000 - tutaj zaczyna się pamięć aktualnie wykonywanego programu. Trwa ona nieprzerwanie (prawie), aż do obszaru pamięci video. Tak to wygląda w teorii. W praktyce cała wolna pamięć wygląda jak ser szwajcarski - pełno dziów, w których można umieścić program, ale co za tym idzie - brak ciągłej przestrzeni. Jednak problem ten nie musi niepokoić programisty - wszystko zrobi za niego system operacyjny
xxxx:0000 - rezydentna część programu COMMAND.COM. W naszym komputerze znajdowała się pod adresem 223C:0000 i zajmowała niespełna 4kB (3,376 - wersja 3.30 systemu). Część ta zawiera procedury obsługi przerwań 22h, 23h i 24h
koniec 640kB
a000:0000 - początek pamięci video dla karty EGA
b000:0000 - początek pamięci video dla karty MDA i Hercules
B800:0000 - początek pamięci video dla karty CGA (także Hercules strona 2). Genaralnie pamięć obrazu dla trybów teksotych zorganizowana jest następująco: bajt znaku 1, bajt atrybutu znaku 1, bajt znaku 2, bajt atrybutu znaku 2 i tym podobnie. Obraz rozumiany jest liniowo, to znaczy znak o współżędnych XY ma numer w pamięci obrazu następujący: nuemr:=Y*ilość kolumn + X. Standartowo ilość kolumn jest równa 80. Dla trybów graficznych 1 bajt opisuje 1 punkt, zwyjątkiem karty Hercules, gdzie z powodu istnienia tylko dwóch kolorów (czarny i biały) jeden bajt opisuje 8 punktów.
C800:0000 - rozszerzenie Bios'u zawierające różne sterowniki
F600:0000 - interpretator języka Basic
FE00:0000 - Rom Bios
F000:FFF5 - data wyprodukowania Bios'u
F000:FFFE - identefikator typu PC
koniec 1 MB
Tak wyglądał model pamięci we wczesnych latach osiemdziesiątych. WWWarto zauważyć, że w bloku ponad 640kB poza pamięcią obrazu nie ma nic szczególnie istotnego.
6.4. Shadowrom
Niektórzy producenci sprzętu, nie wiedząc co zrobić z nadmiarową, a zarazem niewyikorzystaną przez DOs pamięcią, przepisywali zawartość ROM (między innymi Bios) do pamięci RAM, tworząc właśnie ShadofRom. Było to korzystne ze względu na czas dostępu do tego typu pamięci - zazwyczaj kródszy niż dostęp do typowej pamięci ROM.
6.5. UMB
Po zaladowaniu ShadofRom, pamięci video w pamięci pomiędzy 640kB a 1MB (czyli tak zwanej pamięci górnej - Upper Memory) powstały dzióry. DO ich obsługi stworzono właśnie UMB (Upper Memory Block - blok pamięci górnej). Doskonale tam się mieszczą programy TSR, które mogą być przerzucane z pamięci konw3encjonalnej właśnie w te rejony. Obsługa UMB została zagwarantowana przez system operacyjny Dos dopiero w wersji 5.0, natomiast niezależne programy, czyniły dto owiele wcześniej (QRAM firmy Quarterdeck).
6.6. HMA
Procesor 80286 ma pewien niewielki błąd (zaletę?). Otóż linia adresowa ma nóżki A0 - A19 i w tym nie ma nic dziwnego. Ale oprócz tego istnieje jeszcze jedna dodatkowa nóżka - A20, która pozwala zaadresować 64kB pamięci więcej. Stąd pierwsze 64kB pamięci za granicą jednego MB zostało nazwane pamięcią wysoką, lub wyższą - HMA (High Memory Area). Pamięć ta teoretycznie rzecz biorąc powinna być tak samo łatwo dostępna jak choćby UMB, ale tak nie jest. Można tam załadować tylko jeden program (za pomocą Drivera HIMEM.SYS).
Z ekonomicznegopunktu widzenia warto umieścić tam jak największy program (ale mniejszy od 64kB), Dos 5.0 zajmuje 45kB.
Niektórzy producenci płyt głównych, dla pełnej zgodności z proccesorem 8086, zapewnili w konfiguracji możliwość sprzętowego, ciągłego zerowania lini A20. Wtedy oczywiście nici z HMA, chyba że uda się nam taki stan odblokować. Z informacji, jakie posiadamy wynika, że stan zablokowania uzyskuje się przez zapis odpowiedniej wartości do sterownika klawiatury.
6.7. Pamięć EXPANDED
Gdy zauważono, że 1MB pamięci to o wiele zamało, zaczęto instalować kartę pamięci rozszerzonej. Firmy stworzyły standard zwany LIM (ang. Lotus Intel Microsoft) EMS (ang. Expanded Memory Specyfication). Stworzono też sterownik do tego typu pamięci - LIM EMS 3.0. Później powstał ulepszony standard EEMS (ang. Extended Expanded Memory Specyfication), a następnie powstała wersja 4.0 LIM EMS.
Sterownik EMS przejmuje 64kB pamięci w obszarze ponad 1mB. Ten obszar jest nazywany ramką strony i zazwyczaj definiowany przez producentów początkowo w tym samym miejscu. Ramka strony dzieli się na cztery strony, każda po 16kB. Jeżeli będziemy teraz ramkę strony przesuwać po załej fizycznie dostępnej pamięci, to otrzymamy dostęp, choć nieco utrudniony, do wszystkich komórek pamięci. Pamięć ta jest doskonała do przechowywania nakładek, indeksów, danych, tablic i tym podobnie, ale niestety nie jest przydatna do przechowywania kodu programów.
Pamięć Expanded ma tę zaletę, że może być stosowana na komputerach z procesorami 8086, 8088 i 80286 czyli 8 i 16-bitowych.
6.8. Pamięć Extended i Xms
Pamięcią Extended nazywamy pamięć roźciągającą się za barierą 1MB. Pamięć ta możę być obsłużona jedynie przez procesory mające tryb pracy chronionej (Protected). Dla ujednolicenia sposobu korzystania z tej pamięci stworzono specjalny standard, zwany XMS (ang. eXtended Memory Specyfication). Dostęp do niego jest możliwy za pomocą Drivera HIMEM.SYS zawartego w Dos'ie 5.0. Wywołanie jego funkcji jest dość specyficzne. Otóż tylko sprawdzenie stanu zainstalowania jest możliwe do zrobienia przez standardowe przerwanie. Do korzystania z funkcji konieczne jest pobranie adresu procedury, która obsługuje te funkcje. Najprościej jest to zrobić za pomocą Asemblera:
MOV AH, 43h|;wywołanie funkcji przerwania 2Fh
MOV AL, 10h|;która zwraca adres procedury
INT 2Fh|;obsługi XMS
MOV WORD PTR[XMSfunkcje], BX|;ustalenie wskaźnika pamięci XMS
MOV WORD PTR[XMSfunkcje]+2, ES|;z pary rejestrów ES:BX
Wywołanie konkretnej funkcji może mieć wtedy postać następującą:
MOV AH, numer_funkcji
CALL DWORD PTR[XMSfunkcje]
6.9. Bloki pamięci
Każdy proces w systemie MS-Dos funcjonuje w pewnych obszarach pamięci, anzywanych blokami i przydzielancych przez system operacyjny. Każdy blok pamięci ma ściśle określoną strukturę - opisywaną, przez wspomniane już bloki MCB (Memory Control Block). MCB ma wygląd następujący:
00h - 1B - sygnatura bloku: 4Dh (M) - nie jest to ostatni blok; 5Ah (Z) - jest to ostatni blok
01h - 2B - wskaźnik na PSP procesu, który zażądza tym blokiem pamięci. Jeżli 0 - blok nie ma właściciela
03h - 2B - długość bloku w blokach 16-bajtowych
05h - 11B - zarezerwowane
10h - ? - tutaj zaczyna się blok pamięci, jego adres jest zwracany przez funkcję 43h przerwania 21h
Uwaga!!! W wersji Dos 5.0 i późniejszych systemu nagłówek ten może mieć postać następującą:
00h - 1B - sygnatura bloku: 4Dh (M) nie jest ostatni blok; 5Ah (Z) - jest to ostatni blok
01h - 2B - wskaźnik na PSP procesu, który zażądza tym blokiem pamięci. Jeżli 0 - blok nie ma właściela
03h - 2B - długość bloku w blokacch 16-bajtowych
!05h - 3B - zarezerwowane
!08h - 8B - nazwa (bez rozszerzenia) pliku programu, który jest właścicielem bloku, przy czym: "SC" oznacza blok kodu systemu; "SD" oznacza blok danych systemowych; "" oznacza brak właściciela
10h - ? - tutaj zaczyna się blok pamięci, jego adrs jest zwracany przez funkcję 48h przerwania 21h
Wielkość bloku pamięci obsługiwanego przez MCB musi być wielokrotnością 16 bjtów.
Adres następnego MCB (jeżeli bieżący typu "M"): (adres początku bieżącego MCB + rozmiar bieżącego MCCB + 10h):0000
Adres pierwszego MCB możemy uzyskać przez odczyt listy list za pomocą funkcji 52h przerwania 21h (przesunięcie -2h).
6.10. Blok danych systemowych (SD)
W Dos'ie w wersji 4.01, 5.0 i wyższych pierwszy blok pamięci zawiera systemowe struktury danych powstające w czasie interpretaci pliku konfigurującego CONFIG.SYS. Struktury te mają postać jakby podbloków, których nagłówki mają następującą postać:
00h - 1B - znacznik typu podbloku: 44h "D" DEFICES= programy obsługi użądzeń; 46h "F" FILES= tablica SFT; 58h "X" FCBS= tablica FCB; 42h "B" BUFFERS= bufory; 4Ch "L" LASTDRIVE= obszar CDS; 53h "S" STACKS= polecenie STACK
01h - 2B - adres bloku pisywanego przez ten nagłówek
03h - 2B - długość podbloku (w jednostkach 16-bajtowych)
05h - 3B - zarezerwowane
08h - 8B - w przypadku typu "D" - nazwa pliku obsługi użądzenia
6.11. Przydzielanie i zwalnianie pamięci
Gdy proces (program) żąda przydzielenia bloku pamięci (za pomocą funckjii 48h przerwania 21h) system Dos szuka dostateczenie wielkiego bloku pamięci. Gdy go znajdzie, odpowiednio modyfikuje jego blok MCB - wpisując odpowiedni adres PSP i nazwę pliku żądającego przydział pamięci. Podczas przydzielania pamięci następuje pożądkowanie pamięci - bloki leżące obok siebie są łączone.
Gdy proces zwraca blok pamięci systemowi (za pomocą funkcji 49h przerwania 21h) DOs wpisuje do nagłówka (bloku MCB): wartość 0 do pola o przesunięciu = 2 i wypełnia znakami # 0 pole o przesunięciu 8. Modyfikowanie przydzielonego bloku pamięci (za pomocą funkcji 4Ah przerwania 21h) polega na wyodrębnieniu z aktualnie zajmowanego bloku pamięci - bloku pustego (bez właściciela), tudzież przyłącza somsiedni, wolny blok pamięci.
Wyszukiwarka
Podobne podstrony:
Wykład 9 Zarządzanie pamięcią06 Zarządzanie wiedząidb198 Systemy Operacyjne 21 12 2010 Zarządzanie Pamięcią Operacyjnąsołtys,systemy operacyjne, zarządzanie pamięcią05 Zarządzanie pamięcią2006 08 Zarządzanie pamięcią w systemach operacyjnych [Inzynieria Oprogramowania]14 Zarządzanie pamięcią3 18 Zarządzanie pamięcią (2)więcej podobnych podstron