Know-how, előadás, bevezetés
Régió halom
A heap egy fenntartott terület, amelynek egy vagy több oldala van, ami sok apró adathordozó tárolására ajánlott. A VirtualAlloc függvénnyel ellentétben a memóriaelosztási szabályok nem szükségesek.
A memóriába való átvitel a halomba, valamint a szabad és forgalmas memóriát a halomban egy speciális rakáskezelő kezeli. Ez a tevékenység nem dokumentált.
Az 1 MB-os szabványos folyamatcsomag (ez az érték módosítható) a folyamat létrehozásakor fenntartva. Általában a heap dinamikusan megváltoztatja a méretét (a zászló megnőhető). A szabványos folyamatgyűjtemény nem csak alkalmazások, hanem néhány Win32 funkció. A szabványos halom használatához a GetProcessHeap függvény segítségével kell kezelni.
Kívánt esetben a folyamat további heapeket hozhat létre a HeapCreate funkció segítségével (HeapDestroy inverz művelet). Az alkalmazás a HeapAlloc funkció segítségével memóriát oszt meg a heapen. de szabaddá teszi a HeapFree használatával.
Mivel a tömböket az összes folyamati szál felhasználhatja, a szinkronizálás (a SERIALIZE zászló) alapértelmezés szerint megszervezett, amely azonban nem ajánlott, a teljesítmény javítása érdekében törölhető. A fonalhoz való hozzáférés szinkronizálásának feladata megoldható úgy is, hogy minden egyes szálat létrehozunk.
A memóriaelosztási program futtatása a szabványos halomba
A fenti programban a memória-tömb a folyamat standard tömbjében van elosztva. Ezután egy szöveges karakterláncot írnak be, amely ezután megjelenik a képernyőn. Ha van olyan helyzet, amely meghaladja a hozzárendelt memóriát, ami könnyen szimulálható, növeli a Shift paraméter értékét. - végrehajtási hiba lép fel.
Önálló edzésként a teljesítményszámlálók segítségével javasolhatja a memória halomba átvitt hangerő felépítését. A folyamat virtuális memóriájának nagysága növekedni fog, ha megnövekszik a halom kezdeti mérete (1 MB) és ha további tömbök keletkeznek.
Flow stack régió. Oldalak megtekintése
Amikor létrehoz egy szálat a veremhez, egy 1 MB-os tartomány van fenntartva (alapértelmezés szerint), és 2 oldalnyi memória kerül át (ezek a paraméterek módosíthatók). Az alsó oldal egy őrző. Amint a felső lap kitöltött és az alsó oldalt elérte, a rendszer észrevette, és a régiót áthelyezi egy másik oldalra, most már egy megfigyelő. Ilyen taktikának köszönhetően a stack területére átvitt legalacsonyabb oldal mindig megfigyelő marad, és feladata, hogy jelezze a rendszernek, hogy növelni kell a veremre átvitt memória mennyiségét.
A watchdogokhoz való hozzáférést szimuláló program futtatása
A fenti programban a memória átkerül a régióba, és a PAGE_GUARD zászló van beállítva az oldalára. Ezenkívül a strukturált kivételkezelést használják. Ha kísérletet tesznek arra, hogy egy szöveges karakterláncot írjanak az ellenőrzőnek (a próbablokkban), kivételes helyzet áll fenn a 0x80000001 kivételnek. Amikor megpróbálsz írni erre az oldalra (kivéve a blokkot), ez a helyzet többé nem fordul elő.
Olyan program írása, összeállítása és futtatása, amely a köteg növekedését szimulálja az ellenőrző mechanizmus segítségével
Önálló gyakorlatként ajánlott olyan programot írni, amelyben az őrlap mindig az átruházott memória töredékének határán van. Az őrlap elérése esetén meg kell növelni a folyamathoz továbbított memória mennyiségét, és az őrlapot áthelyezni.
A fájl helye a memóriában
A memóriában kivetített fájlok technikáját (lásd a 9.4. Ábrát) aktívan használja a legfrissebb operációs rendszer. Lehetővé teszi a felhasználó számára, hogy olyan feladatok megoldásával, mint a fájladatokkal való munka, másolási műveletekkel és mozgó bájtokkal a memóriában, vagy a memóriaterületekhez való hozzáférés megosztásával. Ezt a mechanizmust maga az operációs rendszer is aktívan használja, például a végrehajtható fájlok memóriába, dinamikus könyvtárakba töltéséhez, és a szabványos I / O műveletek gyorsítótárban történő megjelenítéséhez.
A fájl megjelenítéséhez használja a CreateFileMapping funkciót. és mutasson egy mutatót a megjelenített területre - a MapViewOfFile funkció. Mindkét művelet sikeres végrehajtása lehetővé teszi az alkalmazói program számára, hogy ezzel a területtel működjön, mint ahogyan a leképezett memória bármely más töredékén, különösen annak tartalmának megváltoztatásakor. Ebben az összefüggésben felmerül a probléma a régió tartalmának és a lemezen lévő fájlok levelezésének (koherenciájának). Az operációs rendszer megpróbál koherenciát biztosítani, de a felhasználó bármikor visszaállíthatja a memória tartalmát a FlushViewOfFile függvény használatával.
Fájl megjelenítése a memóriában
A fenti program bemutatja a fájl létrehozásának, a memóriából való kivetítésének, a tartalom tartalmának megváltoztatásának és a lemezen való megjelenítésnek a szakaszát.
Írás, összeállítás és egy program futtatása, amely bemutatja a fájlok memóriában való kivetítésének különböző aspektusait
Az előző program alapján javasoljuk, hogy írjon egy programot a fájl memóriába történő megjelenítéséhez, a FlushViewOfFile függvény használatával egy köztes fájlt letölthet a lemezre. Vegye figyelembe a fájl létezésének és méretének különböző lehetőségeit a kijelző előtt és után.
A megosztott memória-hozzáférési feladat megoldását az alábbiakban adjuk meg.