En plattallokator är en minnesallokeringsalgoritm som används i operativsystemkärnor (och ibland i andra system som kräver högpresterande minneshantering) för att effektivt hantera minne för kärnobjekt. Till skillnad från enklare tilldelare som Buddy System eller en enkel fri lista syftar det till att minimera både intern och extern fragmentering och förbättra prestanda genom att caching ofta använda datastrukturer.
Så här fungerar det:
1. caches: Plattallokatorn delar upp minnet i cachar. Varje cache är tillägnad en specifik typ av kärnobjekt (t.ex. inoder, uttag, nätverksbuffertar). Detta är nyckeln till dess effektivitet.
2. plattor: Inom varje cache delas minnet vidare i plattor. En platta är ett sammanhängande block av minne som är tillräckligt stort för att hålla flera instanser av objekttypen som är associerad med den cachen. Storleken på en platta väljs för att matcha storleken på objektet plus eventuell stoppning (för justering).
3. Objektskapande: När ett nytt objekt av en viss typ behövs kontrollerar tilldelaren först cachen som är associerad med den objekttypen.
4. Gratis listor: Inom varje platta finns det en fri lista som innehåller pekare till tillgängliga objekt. När ett objekt begärs kontrollerar tilldelningen först denna gratislista. Om ett fritt objekt hittas är det helt enkelt hämtat från listan, vilket minimerar tilldelningen.
5. plattallokering: Om den fria listan i en platta är tom kan tilldelaren ta en helt ny platta från systemets allmänna minnespool.
6. platthantering: Plattor kan vara i ett av flera stater:
* full: Alla objekt i plattan används.
* partiell: Vissa föremål används och andra är gratis.
* tom: Alla objekt är gratis.
7. platta Återanvändning och dealLocation: När ett objekt inte längre behövs, återförs det till plattans fria lista, vilket gör det omedelbart tillgängligt för återanvändning. Tomma plattor återförs ofta till systemets minnespool för att spara minne.
8. Minimering av fragmentering: Genom att ägna plattor till specifika objekttyper och återanvändning av plattor, reducerar plattallokatorn dramatiskt inre fragmentering (bortkastat utrymme inom tilldelade block) och extern fragmentering (bortkastat utrymme mellan tilldelade block). Eftersom objektstorlekar är kända i förväg finns det inget behov av att söka och dela.
Fördelar med plattansallokator:
* hastighet: Mycket snabb allokering och återförsäljning på grund av gratis listanvändning och minimal sökningstid.
* reducerad fragmentering: Använd effektivt minne genom att undvika fragmentering.
* cache -effektivitet: Minskar cachemissarna genom att hålla relaterade föremål tillsammans i plattor.
* skalbarhet: Hanterar ett stort antal objektallokeringar och återförsäljningar effektivt.
Nackdelar med plattansallokator:
* Memory Overhead: Varje cache och platta har en del omkostnader när det gäller hanteringsstrukturer (gratislistor, metadata).
* Komplexitet: Mer komplex att implementera än enklare tilldelare.
* Inledande installationskostnad: Att skapa och initialisera cachar och plattor förbrukar lite tid initialt.
Sammanfattningsvis är plattallokatorn en sofistikerad minneshanteringsteknik som är särskilt väl lämpad för behoven hos operativsystemkärnor där prestanda och effektiv minnesanvändning är kritiska, särskilt för ofta tilldelade och överlåtade små objekt. Det ger en bra balans mellan hastighet och minneseffektivitet genom att undvika fragmenteringsproblemen med enklare metoder.