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.