Megosztás a következőn keresztül:


Virtuális címterek

A processzorok virtuális címeket használnak olvasáskor vagy íráskor a memóriahelyekre. Ezen műveletek során a processzor fizikai címre fordítja le a virtuális címet.

A memória virtuális címekkel való elérésének számos előnye van:

  • A programok a virtuális címek egybefüggő tartományával férhetnek hozzá a fizikai memóriában lévő nagy, nem egyértelmű memóriapufferhez.

  • A programok virtuális címek tartományával hozzáférhetnek a rendelkezésre álló fizikai memóriánál nagyobb memóriapufferhez. Ha a fizikai memória alacsony, a memóriakezelő egy lemezfájlba menti a fizikai memória lapjait (általában 4 kilobájtos méretet). A rendszer szükség szerint áthelyezi az adat- vagy kódlapokat a fizikai memória és a lemez között.

  • A különböző folyamatok által használt virtuális címek elkülönítve vannak. Az egyik folyamat kódja nem módosíthatja a másik folyamat vagy az operációs rendszer által használt fizikai memóriát.

A folyamat számára elérhető virtuális címek tartományát a folyamat virtuális címtérnevezik. Minden felhasználói módú folyamat saját privát virtuális címtérrel rendelkezik.

  • A 32 bites folyamat általában a 2 gigabájtos tartományon belüli virtuális címteret a 0x00000000 és a 0x7FFFFFFF között rendelkezik.

  • A 64 bites Windows 64 bites folyamatának virtuális címtere a 128 terabájtos tartományon belül található, 0x000'000000000 és 0x7FFF'FFFFFFFF között.

A virtuális címek tartományát néha virtuális memóriatartományának is nevezik. További információ: memória- és címtérkorlátok.

Az alábbi ábra a virtuális címterek néhány fő funkcióját szemlélteti.

két 64 bites folyamat virtuális címtereit, Notepad.exe és MyApp.exeábrázoló diagram.

Az ábrán két 64 bites folyamat virtuális címterei láthatók: Notepad.exe és MyApp.exe. Minden folyamatnak saját virtuális címtere van, a 0x000'00000000-től az 0x7FF'FFFFFF-ig. Minden árnyékolt blokk egy oldalnyi (4 kilobájt méretű) virtuális vagy fizikai memóriát jelöl. A Jegyzettömb folyamat három összefüggő virtuális címet használ, 0x7F7'93950000-től kezdve. A virtuális címek e három egybefüggő oldala azonban a fizikai memóriában nem egybefüggő oldalakra van leképezve. Emellett mindkét folyamat a 0x7F7'93950000-től kezdődően egy virtuális memóriaoldalt használ, de ezek a virtuális lapok a fizikai memória különböző lapjaira vannak leképezve.

Felhasználói tér és rendszertér

Az olyan folyamatok, mint Notepad.exe és MyApp.exe felhasználói módban futnak. Az alapvető operációsrendszer-összetevők és számos illesztőprogram a kiemeltebb kernel módban fut. További információ a processzor módról: Felhasználói mód és kernel mód.

Minden felhasználói módú folyamat saját privát virtuális címtérrel rendelkezik, de a kernel módban futó összes kód egyetlen virtuális címteret oszt meg rendszertér. A felhasználói módú folyamatok virtuális címterét nevezik.

A 32 bites Windows rendszerben a teljes rendelkezésre álló virtuális címtér 2^32 bájt (4 gigabájt). Általában az alsó 2 gigabájtot használják a felhasználói térhez, a felső 2 gigabájtot pedig a rendszertérhez.

Diagram, amely a 32 bites Windowsban elérhető teljes virtuális címtér felhasználói térbe és rendszertérbe való felosztását szemlélteti.

A 32 bites Windowsban megadhatja (indításkor), hogy több mint 2 gigabájt áll rendelkezésre a felhasználói tér számára. Ez azonban azt jelenti, hogy kevesebb virtuális cím érhető el a rendszertér számára. A felhasználói terület méretét akár 3 gigabájtra is növelheti, így a rendszertér csak 1 gigabájtot hagy. A felhasználói terület méretének növeléséhez használja BCDEdit /set increaseuserva.

A 64 bites Windowsban a virtuális címtér elméleti mérete 2^64 bájt (16 exabájt), de a 16 exabájtos tartománynak csak egy kis részét használja a rendszer.

A felhasználói módban futó kód hozzáfér a felhasználói térhez, a rendszertérhez azonban nem. Ez a korlátozás megakadályozza, hogy a felhasználói módú kód beolvassa vagy módosítsa a védett operációs rendszer adatstruktúráját. A kernel módban futó kód hozzáférhet a felhasználói térhez és a rendszertérhez is. Vagyis a kernel módban futó kód hozzáférhet a rendszertérhez és az aktuális felhasználói módú folyamat virtuális címteréhez.

A kernel módban futó illesztőprogramoknak óvatosnak kell lenniük, amikor közvetlenül olvasnak vagy írnak a felhasználói térben lévő címekre. Az alábbi forgatókönyv bemutatja, hogy miért.

  1. A felhasználói módú programok kérést kezdeményeznek bizonyos adatok eszközről való beolvasására. A program egy puffer kezdőcímét adja meg az adatok fogadásához.

  2. A kernel módban futó eszközillesztő rutin elindítja az olvasási műveletet, és visszaadja az irányítást a hívójának.

  3. Később az eszköz megszakítja az éppen futó szálat, és jelzi, hogy az olvasási művelet befejeződött. A kernel módú illesztőprogram-rutinok kezelik a megszakítást ezen az tetszőleges szálon, amely egy tetszőleges folyamathoz tartozik.

  4. Ezen a ponton az illesztőprogram nem írhat adatokat az 1. lépésben megadott felhasználói módú program kezdőcímére. Ez a cím a kérést kezdeményező folyamat virtuális címterében található, ami valószínűleg nem ugyanaz, mint az aktuális folyamat.

Lapozott memóriakészlet és nem lapozott memóriakészlet

A felhasználói térben minden fizikai memórialap igény szerint kicserélhető egy lemezfájlba. A rendszerterületen egyes fizikai oldalak átlapozhatók, míg mások nem. A rendszertér két régióval rendelkezik a memória dinamikus elosztásához: lapozott készlet és nem lapozott készlet.

A lapozott készletben lefoglalt memória szükség szerint kimenthető egy lemezfájlba. A nem lapozott készletben lefoglalt memória soha nem osztható ki lemezfájlba.

diagram, amely a lapozott készlet memóriafoglalásának különbségét mutatja.

eszközcsomópontok és eszközveremek

Felhasználói mód és kernel mód