Olvasás angol nyelven

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


Munkakészlet

A folyamat munkakészlete a folyamat virtuális címterében található lapok készlete, amelyek jelenleg fizikai memóriában találhatók. A munkakészlet csak lapozható memóriafoglalásokat tartalmaz; A nem lapozható memórialefoglalások, például Címablak-bővítmények (AWE) vagy nagyméretű laplefoglalások nem szerepelnek a munkakészletben.

Ha egy folyamat olyan lapozható memóriára hivatkozik, amely éppen nem szerepel a munkakészletében, laphiba fordul elő. A rendszeroldali hibakezelő megpróbálja feloldani az oldalhibát, és ha sikerül, a rendszer hozzáadja a lapot a munkakészlethez. (Az AWE vagy a nagy lapfoglalások elérése soha nem okoz laphibát, mert ezek a foglalások nem lapozhatók.)

A kemény laphibát úgy kell megoldani, hogy beolvassa a lap tartalmát a lap háttértárából, amely vagy a rendszer lapozófájlja, vagy a folyamat által létrehozott memórialeképezett fájl. A helyreállítható laphibák a háttértár elérése nélkül oldhatók meg. Gyenge laphiba akkor fordul elő, ha:

  • A lap egy másik folyamat munkakészletében található, így már a memóriában van.
  • A lap átmeneti állapotban van, mert vagy el lett távolítva a lapot használó összes folyamat munkakészletéből, és még nem lett újrahasznosítva, vagy egy memóriakezelő előtöltési művelet következtében már rezidens.
  • A folyamat első alkalommal hivatkozik egy lefoglalt virtuális lapra (más néven igény nélküli hiba).

A lapok a következő műveletek eredményeként távolíthatók el a folyamat munkakészletéből:

  • A folyamat csökkenti vagy kiüríti a munkakészletet a SetProcessWorkingSetSize, SetProcessWorkingSetSizeEx vagy EmptyWorkingSet függvény meghívásával.
  • A folyamat meghívja a VirtualUnlock függvényt egy nem zárolt memóriatartományban.
  • A folyamat a UnmapViewOfFile függvénnyel megszünteti egy fájl megfeleltetett nézetét.
  • A memóriakezelő levágja az oldalakat a munkakészletből, hogy több szabad memóriát hozzon létre.
  • A memóriakezelőnek el kell távolítania egy lapot a munkakészletből, hogy helyet biztosítson egy új lapnak (például mert a munkakészlet maximális mérete van).

Ha több folyamat is megoszt egy lapot, a lap eltávolítása az egyik folyamat munkakészletéből nem befolyásolja a többi folyamatot. Miután egy lapot eltávolítanak az összes azt használó folyamat munkakészletéből, a lap átmeneti lap lesz. Az átmeneti lapok a gyorsítótárban maradnak a RAM-ban, amíg egy folyamat újra nem hivatkozik a lapra, vagy más célra nem használják fel újra (például nullákkal megtöltve és egy másik folyamatnak adva). Ha az átmeneti lapot az utolsó lemezre írása óta módosították (vagyis ha a lap "piszkos"), akkor a lapot a háttértárba kell írni, mielőtt újra felhasználhatóvá válhat. A rendszer elkezdhet piszkos átmeneti lapokat a háttértárba írni, amint az ilyen lapok elérhetővé válnak.

Minden folyamat minimális és maximális munkakészlet-mérettel rendelkezik, amely befolyásolja a folyamat virtuális memória lapozási viselkedését. Egy adott folyamat munkakészletének aktuális méretének lekéréséhez használja a GetProcessMemoryInfo függvényt. A minimális és maximális munkakészlet-méretek beszerzéséhez vagy módosításához használja a GetProcessWorkingSetSizeEx és SetProcessWorkingSetSizeEx függvényeket.

A folyamatállapot-alkalmazás programozási felülete (PSAPI) számos függvényt biztosít, amelyek részletes információkat adnak vissza a folyamat munkakészletéről. A részletekért lásd: Munkakészlet információi.