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.

következtetés

Kapcsolódó cikkek