[ Pobierz całość w formacie PDF ]
.EXE) oraz prywatne biblioteki DLL w prywatny zakres adresów.Umieszczaj¹c je w zakresie prywatnym, Windows 98 mo¿e wybraæ sposób traktowania prywatnych danych wykonywalnych.W celu efektywnego u¿ycia prywatnych bibliotek DLL i prywatnych plików EXE, Windows 98 mo¿e na przyk³ad odwzorowaæ pojedynczy zestaw stron fizycznych na przestrzeñ adresow¹ kilku procesów.Windows NT tak¿e dokonuje rozró¿nienia pomiêdzy stronami wspólnymi i prywatnymi, jednak w sposób nieco subtelniejszy ni¿ ró¿ne zakresy adresów w Windows 98.Ró¿nica polega na wype³nianiu przez Windows NT tablic stron procesora.Prywatne strony w Windows NT korzystaj¹ po prostu z opisanego na pocz¹tku rozdzia³u schematu adresowania stronicowanej pamiêci procesora Intel-86.Ka¿dy proces posiada w³asn¹ kartotekê stron oraz w³asne tablice stron, zaœ prze³¹czenie kontekstu odbywa siê poprzez aktualizacjê rejestru CR3 dla nowej przestrzeni adresowej.Subtelniejsze rozró¿nianie stron wspólnych i prywatnych w Windows NT polega na tym, ¿e w momencie odwo³ania do wspólnej strony generowany jest wyj¹tek odwo³ania do strony.W wielu systemach operacyjnych taki wyj¹tek oznacza, ¿e strona albo znajduje siê w pliku stronicowania, albo ¿e wyst¹pi³ b³¹d adresowania pamiêci - na przyk³ad u¿ycie wskaŸnika o wartoœci NULL.Windows NT rozpoznaje te dwa tradycyjne zastosowania wspomnianego wyj¹tku, lecz oprócz tego wykorzystuje go tak¿e w inny sposób, udostêpniaj¹c wspólne strony procesowi.Gdy wyst¹pi wyj¹tek odwo³ania do strony w przypadku wspólnej strony, Windows NT odpowiada na niego tak, ¿e wspólne strony w magiczny sposób pojawiaj¹ siê w przestrzeni adresowej procesu.Taka strona powoduj¹ca wyj¹tek przy dostêpie jest specjalnie zakodowana w tablicy stron, w formacie nazywanym prototypow¹ pozycj¹ tablicy stron.Prototypowa pozycja tablicy stron zawiera odwo³anie do zestawu systemowych tablic stron - dodatkowego poziomu tablic stron nie wymaganego dla stron prywatnych - wskazuj¹cego po³o¿enie wspólnej strony.Tak jak w Windows 98, decyzja o udostêpnieniu strony lub uczynieniu jej prywatn¹ musi wiêc poprzedzaæ przydzielenie strony do przestrzeni adresowej procesu.Ró¿nice pomiêdzy Windows 98 a Windows NT opisujemy w tym miejscu tylko po to, by u³atwiæ Ci dog³êbne zrozumienie sposobu dzia³ania obu systemów.W ¿adnym wypadku nie powinieneœ pisaæ kodu, który na przyk³ad sprawdza, czy dana pamiêæ w Windows 98 jest wspólna przez sprawdzenie czy wartoœæ wskaŸnika nale¿y do przedzia³u pomiêdzy 2GB a 3GB.(Ta charakterystyka implementacji mo¿e zmieniæ siê w przysz³ych wersjach Windows.Aby sprawdziæ czy strona jest wspólna, wywo³aj funkcjê VirtualQuery ()).Nie powinieneœ tak¿e martwiæ siê tym, ¿e Windows NT dzia³a nieco wolniej z powodu narzutu zwi¹zanego z obs³ug¹ wyj¹tku przy odwo³aniu do wspólnej strony; czas procesora zwi¹zany z obs³ug¹ wyj¹tku strony dla wspólnych stron jest du¿o krótszy ni¿ czas wymagany do narysowania pojedynczej linii na krawêdzi okna!Wystêpuje tak¿e pewien element wspólny dla wszystkich dzielonych stron.W takiej czy innej postaci dzielenie stron pomiêdzy procesy w Win32 opiera siê na obs³udze plików odwzorowanych w pamiêci.Plik odwzorowany w pamiêci u¿ywa pamiêci wspólnej w celu zapewnienia wspólnego obrazu zawartych w pliku danych dla dwóch lub wiêcej procesów.To, co nie jest tak oczywiste w zwi¹zku z operacjami na plikach odwzorowanych w pamiêci to fakt, ¿e takie operacje umo¿liwiaj¹ wspólne korzystanie z pamiêci.Odwracaj¹c definicjê Schulmana, dzielenie pamiêci pomiêdzy procesy Win32 polega na u¿yciu czêœci wirtualnego pliku stronicowania systemu operacyjnego jako pliku odwzorowanego w pamiêci.Choæ nacisk zosta³ po³o¿ony na wspólne korzystanie z pamiêci, jednak zawarte w niej dane mog¹ w pewnym momencie znaleŸæ siê w pliku na dysku.Jednak zamiast znaleŸæ siê w jakimœ szczególnym, nazwanym pliku, znajd¹ siê one w systemowym pliku stronicowania.W nastêpnych sekcjach opiszemy sposoby udostêpniania pamiêci pomiêdzy procesy, zaczynaj¹c od plików odwzorowanych w pamiêci, gdy¿ w³aœnie one stanowi¹ punkt wyjœcia dla innych typów udostêpniania.Nastêpnie przyjrzymy siê udostêpnianiu stron pamiêci, które nie wystêpuj¹ w konkretnie nazwanych plikach odwzorowanych w pamiêci.Na koniec przejdziemy do obu rodzajów wspólnych stron: alokowanych dynamicznie oraz alokowanych statycznie.Pliki odwzorowane w pamiêciPliki odwzorowane w pamiêci s¹ jednym z elementów Win32 API u³atwiaj¹cym przenoszenie danych pomiêdzy plikiem na dysku a zakresem adresów w pamiêci.Gdy plik zostaje odwzorowany w obszar pamiêci, odczyt bajtów z tej odwzorowanej pamiêci daje te same rezultaty co odczyt bajtów z pliku, z t¹ ró¿nic¹, ¿e buforowaniem danych zajmuje siê mened¿er pamiêci wirtualnej.Zapis bajtów do tej odwzorowanej pamiêci daje te same rezultaty co zapis bajtów do pliku, z t¹ ró¿nic¹, ¿e tak¿e w tym przypadku buforowaniem danych zajmuje siê mened¿er pamiêci wirtualnej.Pliki odwzorowane w pamiêci s¹ wysoce efektywne.Mened¿er pamiêci wirtualnej nie wykonuje ¿adnej pracy, która nie jest potrzebna.Gdy najpierw tworzony jest widok pliku odwzorowanego w pamiêci, rezerwowany jest zakres adresów, jednak nie nastêpuje odczyt ¿adnych danych.Pierwszy raz z ide¹ rezerwowania adresów zetkn¹³eœ siê przy dyskusji na temat rezerwowania prywatnych adresów zakresów funkcj¹ VirtuaiAlloc ().W przypadku pliku odwzorowanego w pamiêci, odwo³anie do miejsca w pamiêci zarezerwowanego dla stron odwzorowanych w pamiêci powoduje wygenerowanie wyj¹tku strony, na który mened¿er pamiêci wirtualnej odpowiada odczytaniem stron z pliku i ponownym wykonaniem instrukcji powoduj¹cej wyj¹tek
[ Pobierz całość w formacie PDF ]