Statikus elosztását memória a verem

Sok műveletek felhasználói térben memória kiosztás, különösen néhány példát fentebb hajthatók végre a verem, mert eleve ismert mérete memóriát területen. A felhasználó számára rendelkezésre álló hely a luxust, hogy egy nagyon nagy és dinamikusan növekvő halom feladatokat, de a kernel módban nem luxus - kernelveremben kicsi és fix méretű. Amikor a folyamat kap egy kis és fix méretű verem, tárolási költségek csökkennek, és a kernel nem szükséges elvégezni további feladatai memória kezelése.

A verem mérete függ a hardver platform, valamint a konfigurációs paramétereket, amelyeket meghatározott fordításkor. Történelmileg kernelveremben mérete megegyezik a két memória oldalak minden folyamat. Ez megfelel

8K 32 bites hardver platformok és 16 KB a 64 bites hardver platformokon.

Az első változat egy sor atommagok 2,6, a lehetőségét, hogy a konfiguráció, amely a kernel verem mérete egyenlő egy memória oldalt. Telepítésekor egy ilyen konfiguráció, a folyamat kap egy köteg mérete egyenlő egy memória oldal csak a 4 Kbyte egy 32-bites hardver platformokat és 8K - 64 bites. Ez úgy történik, két ok miatt. Először is, ez csökkenti a memória lapköltsége minden folyamat. Másodszor, és ami a legfontosabb, a növekvő rendelkezésre állás (uptime) egyre nehezebbé válik, hogy vizsgálja meg a két, fizikailag összefüggő memória oldalakon. Fizikai memória egyre töredezett, és a terhelés a virtuális memória rendszer létrehozása az új folyamatok egyre jelentősebb.

Van egy másik nehézség (velünk marad, és akkor mindent megtudhat a kernel stack). Az egész sorozata beágyazott függvény hívások A kernel módban kell rakni a verem. Történelmileg megszakításkezelõkben használja a verem a folyamat, amelynek végrehajtása törtek. Ez azt jelenti, hogy a legrosszabb esetben

8K stack kell által együttesen használt a beágyazott függvény hívások és még egy pár kampó. Mindez hatékony és egyszerű, de ró további használatára vonatkozó korlátozásokat a kernel verem. Amikor a verem méretét csökkentették egy oldal memória, szakítsa rakodók már nem illik oda.

A probléma megoldására valósult még egy lehetőséget - halom megszakításkezelõkben. Stacks szakítsa jelentik az egyik köteg minden processzor használt kezelésére megszakítások. Ezzel a konfigurációval, a megszakítás rakodók már nem használja azokat halom kernel folyamatokat, hogy ezek a processzorok megszakad. Ehelyett használja a saját stack. Ez megköveteli csak egy oldalt a memória a processzor.

Összefoglalni. Kernelveremben vesz egy vagy két oldal a memória, a konfigurációtól függően, amely végzik megépítése előtt a kernel. Következésképpen, a méret a kernel verem terjedhet 4-16 Kbyte. Történelmileg megszakításkezelõkben megosztani egy köteget a megszakított folyamat. Amikor a kernel stack mérete egy oldalas memória megszakításkezelõkben ruháztak saját stack. Mindenesetre, a korlátlan használatát rekurzió és úgy működik, mint ALLOCA () nyilvánvalóan nem elfogadható.

Fair play a verem

Mindenesetre funkció csökkentéséhez szükséges verem használat minimális. Bár nincsenek merev szabályok, mégis meg kell őriznie a legnagyobb összeg az összes helyi változót (más néven: automatikus változók, vagy változók osztják a stack) nem több, mint néhány száz byte. Veszély statikusan kiosztani nagy tárgyakat a stack, mint például a nagy tömbök szerkezetek. Ellenkező esetben a stack memória kiosztás fog zajlani, ugyanúgy, mint a felhasználói térben. Veremtúlcsordulás átlátható és általában problémákhoz vezet. Mivel a kernel nem végez semmilyen ellenőrzést stack, a verem adatai egyszerűen felülírja bármi túl van a verem. Elsősorban az érintett thread_info szerkezetét. amely található a legvégén a folyamat verem (emlékszik 3. fejezet). Kívül a magköteget összes adat elveszhet. A legjobb esetben, a stack túlcsordulás következik be a készülék meghibásodása. A legrosszabb esetben, adatvesztés is előfordulhat.

Ezzel kapcsolatban izolálása nagy mennyiségű memóriát kell használni az egyik a memória dinamikus rendszerek, amelyeket figyelembe vettek részt ebben a fejezetben.

Kapcsolódó cikkek