Zarządzanie pamięcią
Poniżej przedstawiono informacje o różnych rodzajach wykorzystywanej w komputerze pamięci. Pamięć można dostosować, optymalizować oraz rozwiązywać problemy z konfliktami pamięci, które mogą spowodować awarie systemu. Omówiono następujące tematy:
rodzaje pamięci,
narzędzia zarządzania pamięcią: dostosowanie i optymalizacja pamięci,
różne rodzaje pamięci,
konflikty pamięci: ogólne błędy ochrony,
adresowanie pamięci w trybie rzeczywistym i w trybie chronionym.
Rodzaje pamięci
System operacyjny działający w komputerze wykorzystuje pamięć fizyczną i pamięć wirtualną. Pamięć fizyczna, zwana RAM, jest również określana jako pamięć systemowa. Pamięć systemową w działającym systemie można podzielić na cztery kategorie; pamięć konwencjonalną, wyższą, górną i rozszerzoną.
Taki logiczny podział pamięci został oryginalnie stworzony, ponieważ MS-DOS i wczesne mikroprocesory IBM PC miały maksymalny rozmiar pamięci 1 MB. Pamięć ta była podzielona na dwie części. Pierwsze 640 kB było przeznaczone dla użytkownika i systemu operacyjnego, a następne (pamięć wyższa) 384 kB było przeznaczone dla BIOS-u i programów narzędziowych. Ponieważ system Windows 9x jest zbudowany na bazie MS-DOS-a, obsługuje on różne rodzaje specyfikacji pamięci fizycznej wywodzące się z IBM PC i jego wielu następców. W tym podrozdziale omówiono specyfikacje pamięci fizycznej, a w następnym omówiono pamięć wirtualną. Rysunek 4.13 ilustruje przydział (alokację) pamięci fizycznej.
Pamięć konwencjonalna
Pamięć konwencjonalna obejmuje wszystkie adresy pamięci pomiędzy 0 i 640 kB. Jest zwana również pamięcią podstawową. Jest to obszar, w którym normalnie działają programy MS-DOS. W starszych komputerach z systemem DOS jest to jedyny obszar pamięci dostępny do uruchomienia systemu operacyjnego, aplikacji, programów rezydent-nych i sterowników urządzeń. Programy rezydentne obejmują programy typu TSR (ang. tenninate-and-stay-resident - zakończ i pozostaw w pamięci), takie jak sterowniki myszy lub napędu CD-ROM. Rysunek 4.14 ilustruje przydział pamięci konwencjonalnej.
Rysunek 4.13. Przydział pamięci fizycznej
Rysunek 4.14. Przydział pamięci konwencjonalnej
Pamięć wyższa, czyli pamięć rozszerzona
Znana również jako pamięć zarezerwowana, pamięć wyższa obejmuje adresy z zakresu 640 kB i 1024 kB (1 MB). Pamięć ta znajduje się za pamięcią podstawową, ma rozmiar 384 kB i jest dostępna w formie bloków pamięci wyższej UMB (Upper Memory Błock). Programy działające w tym zakresie pamięci to BIOS systemowy, BIOS PnP, BIOS karty graficznej i pamięć wideo. W zależności od systemu, od 96 kB do 160 kB przestrzeni pamięci nie jest używane przez sprzęt; adresy te są dostępne tylko wtedy, gdy występuje właściwy menedżer pamięci, taki jak EMM386.EXE, zainstalowany podczas procesu rozruchu. Rysunek 4.15 przedstawia przydział pamięci wyższej i pamięci rozszerzonej.
Pamięć rozszerzona jest kolejnym obszarem pamięci podobnym do pamięci wyższej. Pamięć ta jest również określana jako EMS (Expanded Memory Specification). Dostęp do niej odbywa się poprzez strony o wielkości 16 kB, zawarte w ramkach 64 kB. Strony te są ustanowione w niewykorzystanych blokach UMB. Podstawowym sterownikiem umożliwiającym korzystanie z pamięci EMS jest program EMM386.EXE. Program ten uwalnia pamięć konwencjonalną pozwalając, aby niewykorzystane obszary pamięci zarezerwowanej były używane przez sterowniki DOS i programy rezydentne.
Rysunek 4.15. Przydział pamięci wyższej/ rozszerzonej
Pamięć rozszerzona
Mikroprocesory 80286 i ich tryb pracy chronionej pozwalały na dostęp do fizycznej pamięci powyżej ograniczenia 1 MB dla mikroprocesorów 8088 i 8086. Pamięć powyżej tego adresu jest ogólnie określana jako pamięć rozszerzona. Jest ona również określana jako pamięć XMS (Extended Memory Specification). XMS jest podstawowym obszarem pamięci używanym przez Windows 9x. Obszar tej pamięci jest kontrolowany przez sterownik XMS o nazwie HIMEM.SYS, ładowany przez system Windows 9x. Udostępnia on ten rodzaj pamięci dla systemu Windows 9x oraz innych kompatybilnych z MS-DOS programów. Na rysunku 4.16 przedstawiono przydział pamięci rozszerzonej.
Pamięć górna
Po wczytaniu sterownika XMS i udostępnieniu pamięci rozszerzalnej systemowi operacyjnemu, pierwsze 64 kB tej pamięci nazywane jest obszarem pamięci górnej HMA (High Memory Area). HIMEM.SYS zazwyczaj aktywuje opcję DOS=HIGH, która umożliwia załadowanie jądra MS-DOS używanego przez Windows 9x do pamięci HMA. DOS używa pamięci HMA, co uwalnia pamięć konwencjonalną dla aplikacji.
Rysunek 4.17. Przydział pamięci górnej
Narzędzia zarządzania pamięcią: dostosowanie i optymalizacja pamięci systemowej
Do zarządzania i optymalizacji pamięci wykorzystuje się kilka narzędzi. Opis tych narzędzi oraz sposób, w jaki są używane, wyjaśniony jest w tym podrozdziale.
EMM386.EXE
Menedżer pamięci EMM386.EXE emuluje pamięć rozszerzoną i udostępnia pamięć wyższą do wykorzystania przez system operacyjny. Menedżer pamięci może być użyty w następujący sposób:
• Aby wczytać narzędzia TSR do pamięci wyższej, należy w pliku CONFIG.SYS dołączyć poniższy wiersz:
DEVICE=c:\WINDOWS\EMM386.EXE NOEMS
Opcja NOEMS mówi systemowi operacyjnemu, aby nie konwertował pamięci rozszerzonej na pamięć rozszerzalną. Jest to pokazane na rysunku 4.18.
Rysunek 4.18. Ładowanie programów TSR do bloków UMB
Aby udostępnić obszar UMB dla programów TSR, plik IO.SYS dodaje następujący zapis do konfiguracji pamięci:
DOS=UMB
• Aby wczytać aplikacje MS-DOS, które potrzebują dostępu do pamięci EMS, należy dodać następujący wiersz w pliku CONFIG.SYS:
DEVICE=C:\WINDOWS\EMM386.EXE RAM
Zapis ten, przedstawiony na rysunku 4.9, konwertuje obszar pamięci XMS na wspólną pulę pamięci XMS/EMS dostępną zarówno dla aplikacji Windows, jak i DOS. Zauważ również, że dodany został zapis DOS=UMB przez IO.SYS, aby nieużywane bloki UMB dostępne były dla programów TSR.
Rysunek 4.19. Ładowanie aplikacji MS-DOS z dostępem do pamięci EMS
HIMEM.SYS
Wczytaj sterownik HIMEM.SYS, aby skonwertować pamięć rozpoczynającą się od 1 MB, która jest dostępna jako pamięć XMS albo pamięć rozszerzona. Sterownik ten jest wczytywany z pliku CONFIG.SYS. Składnia tego polecenia jest następująca:
DEVICE=C:\DOS\HIMEM.SYS
DOS=HIGH
Opcja DOS=HIGH, dodawana do pliku CONFIG.SYS, mówi systemowi operacyjnemu, aby przesunął swoją część (jądro MS-DOS) do obszaru pamięci górnej. Opcja DOS=HIGH jest często łączona z opcją DOS=UMB, mówiącą systemowi, aby utworzył blok pamięci wyższej. Polecenie to używa poniższej składni:
DOS=HIGH, UMB
DEVICEHIGH/LOADHIGH
Opcja DEVICEHIGH (używana w pliku CONFIG.SYS) oraz opcja LOADHIGH (używana w pliku AUTOEXEC.BAT) umożliwiają korzystanie z utworzonych w pamięci wyższej bloków zaraz po tym, jak zostaną wczytane pliki HIMEM.SYS oraz EMM386.EXE. Aby wczytać sterownik myszy do pamięci wyższej, użyj poniższej składni:
DEVICEHIGH=C:\DOS\MOUSE.SYS
Inne narzędzia pamięci systemowej obejmują np. program MemMaker, włączony do systemu MS-DOS 6.0, aby uprościć zadanie umieszczenia programów TSR w pamięci wyższej. Użyj tego narzędzia, aby utworzyć potrzebne wpisy w plikach CONFIG.SYS i AUTOEXEC.BAT.
Pozostałe rodzaje pamięci
Dysk RAM oraz pamięć wirtualna to dwa pozostałe, ważne rodzaje pamięci. Utworzenie dysku RAM i korzystanie z pamięci wirtualnej może podnieść ogólną wydajność systemu, ale zmniejsza dostępną przestrzeń fizyczną.
Pamięć wirtualna: plik wymiany oraz plik stronicowania
Pamięć wirtualna to pamięć, która nie jest tym, czym wydaje się być. Przestrzeń na twardym dysku jest w tym wypadku używana, tak jakby była pamięcią RAM. Połączenie pamięci wirtualnej i fizycznej daje złudzenie, że dostępne jest więcej pamięci niż w rzeczywistości jest zainstalowane. Pamięć wirtualna jest podstawą wielozadaniowości w Windows 9x. Bez pamięci wirtualnej trudno byłoby używać wielu współczesnych wersji oprogramowania. Windows 3.x i 9x implementują pamięć wirtualną w plikach zwanych plikami wymiany. Oprogramowanie zwane menedżerem pamięci albo jednostką zarządzania pamięcią (MMU - Memory Management Unit) tworzy pamięć wirtualną przez wymianę plików pomiędzy pamięcią RAM a twardym dyskiem (patrz rysunek 4.20). Technika ta tworzy większą ilość pamięci całkowitej, dostępnej do wykorzystania przez programy.
Uwaga
Ponieważ twardy dysk jest wolniejszy od pamięci RAM, występuje całkowity spadek wydajności systemu z powodu wykonywania operacji z pamięcią wirtualną. Pamięć ta jest najwolniejszym rodzajem pamięci.
Większość systemów operacyjnych od czasu Windows 3.x używa jakiejś formy działań na pamięci wirtualnej. Dotyczy to Windows 9x, NT, 2000 i XP, a także UNIX-a i Linuksa. Wiele starszych systemów operacyjnych korzystało ze stałego pliku wymiany z rozszerzeniem PAR. Obecne systemy operacyjne używają tymczasowego pliku wymiany o rozszerzeniu SWP. Stały plik wymiany jest zawsze obecny i posiada stały rozmiar.
Tymczasowy plik wymiany ma zmienny rozmiar i jest tworzony, gdy system Windows
jest uruchamiany. Kontrola operacji na pamięci wirtualnej w systemie Windows 95, 98 i Me jest ustanowiona w menu Start, Ustawienia, Panel sterowania, poprzez wybranie
ikony System i karty Wydajność, jak na rysunku 4.21.
Rysunek 4.20. Pamięć wirtualna
Rysunek 4.21. Karta Wydajność Systemu w Panelu Sterowania
Po kliknicciu przycisku „pamięć wirtualna" zostanie otwarte okno „Opcje pamięci wirtualnej". Ustawieniem domyślnym jest „Pozwól systemowi Windows zarządzać ustawieniami pamięci wirtualnej (zalecane) ", jak na rysunku 4.22.
Ostrzeżenie
Lepiej pozwolić systemowi Windows zarządzać pamięcią wirtualną, ponieważ błędne ustawienia mogą szkodliwie wpłynąć na wydajność systemu.
Plik wymiany w Windows 95 jest nazwany WIN386.SWP. Plik ten jest automatycznie przypisywany, a jego rozmiar jest zmienny. Plik wymiany lub plik stronicowania Windows 2000 nosi nazwę PAGEFILE.SYS. Jest on tworzony podczas instalacji systemu Windows jest instalowany. Jego domyślny rozmiar jest półtora razy większy od dostępnej pamięci RAM zainstalowanej w systemie.
Rysunek 4.22. Kontrolowanie pamięci wirtualnej w systemie Windows
Dyski RAM
Wyznaczenie części pamięci RAM do emulowania napędu powoduje utworzenie tzw. dysku RAM. Na przykład na maszynie, która posiada dysk twardy podzielony na dwie partycje C i D, można utworzyć dysk RAM o wielkości 4MB (4096 kB), oznaczony jako napęd E, za pomocą następującego polecenia:
DEVICE=C:\DOS\RAMDRIVE.SYS 4096
Polecenie to zapisuje się w pliku CONFIG.SYS. Dysk RAM staje się następnym dostępnym napędem i może mieć dowolny rozmiar, ograniczony przez zainstalowaną w systemie pamięć RAM. Ponieważ dane są przechowywane wyłącznie w pamięci RAM są one tracone podczas każdego restartu systemu. Wypływa stąd wniosek, aby nie przechowywać plików danych na dysku RAM.
Konflikty pamięci: ogólne błędy ochrony
Konflikt pamięci może być spowodowany przez kilka czynników. Powodem mogą być dwa menedżery pamięci, działające równocześnie, np. menedżery producentów zewnętrznych i z MS-DOS. Narzędzia diagnostyczne, takie jak Microsoft Diagnostics (MSD), mogą zdiagnozować tego typu problemy.
Konflikty pamięci mogą prowadzić do ogólnych błędów ochrony (ang. General Pro-tection Fault, GPF). Rysunek 4.23 przedstawia przykład błędu GPF, zwanego również „błękitnym ekranem śmierci" (ang. blue screen ofdeath). Oznajmia on, że zdarzył się błąd i przedstawia listę opcji dostępnych użytkownikowi. Najczęściej najlepszym wyborem jest ponowne uruchomienie systemu.
Rysunek 4.23. Ogólny błąd ochrony
Błędy GPF zostały wprowadzone w 16 bitowym systemie Windows 3.x, wykorzystywanym przez aplikacje 16 bitowe. Do błędu ochrony dochodzi najczęściej, gdy aplikacja próbuje naruszyć integralność systemu w jeden z poniższych sposobów:
Próbuje użyć adresu lub przestrzeni pamięci, która jest zarezerwowana przez inną
aplikację.
Próbuje pracować z uszkodzonym sterownikiem
Próbuje uzyskać bezpośredni dostęp do sprzętu.
Rysunek 4.24. Przykładowy komunikat ogólnego błędu ochrony
Pozostałe sytuacje konfliktowe występują, gdy wiele programów rezydentnych, takich jak TSR, próbuje uzyskać w tym samym momencie dostęp do tego samego adresu lub przestrzeni adresowej w pamięci wyższej. GPF najczęściej przejawia się zawieszeniem systemu lub programu. Rysunek 4.24 pokazuje komunikat błędu generowany, gdy powstanie błąd ochrony. Narzędzia diagnostyczne mogą dostarczyć diagnozy tych konfliktów. Po określeniu konfliktowej aplikacji problem może zostać rozwiązany przez ponowne przypisanie różnych obszarów pamięci za pomocą różnych narzędzi zarządzania i optymalizacji pamięci, opisanych wcześniej w tym rozdziale.
1