Dat hele verhaal van fragmentatie en linux. Fragmentatie heb je alleen in de kernel. Drivers draaien binnen de kernel (omdat dat nou eenmaal niet anders kan omdat ze
allemaal directe i/o moeten kunnen doen) en dus hebben die "last" van fragmentatie.
Fragmentatie
En ongetransleerd geheugen = fragmentatie.
Ja, maar, het garanderen van aaneengesloten stukken fysiek geheugen is altijd een zwak punt van Linux geweest. Een bekend voorbeeld is de kernelstack: Die was vroeger 8KB groot en vereiste twee aaneengesloten geheugenpagina's. Maar dat was een bedreiging voor de stabiliteit van het systeem, zodra er geen twee pagina's aaneengesloten meer waren, was het afgelopen.
Oorspronkelijk probeerde men met slimme algoritmes die situatie te voorkomen, maar dat heeft men op een bepaald moment opgegeven en men is overgestapt op stack van 4KB, waarbij men overal in de kernel wijzigingen heeft gemaakt om het stackgebruik te beperken. Dat heeft ook zo zijn nadelen, ik ben een paar maanden geleden een hoop tijd kwijt geraakt aan een supercomputer waarbij stackoverflows in de infinibanddrivers optraden.... de eerste reflex van fabrikanten is altijd ontkennen of vingertje wijzen... Deze fabrikant koos voor het laatste, ik mocht de driver zelf debuggen. Na debuggen bleek een workaround mogelijk met moduleparameters bepaalde arrays in de driver te verkleinen. Tja.. is het dan een driverbug of niet? Ik vond van wel.
Maar goed, dat fragmentatieprobleem is wel iets specifieks voor Linux. Je hebt gelijk dat bij ongetransleerd geheugen het fragmentatiespook loert, maar daar kun je op anticiperen door te weigeren geheugen uit te geven als die uitgave je in de toekomst in problemen brengt. Er is bij Linux op een bepaald moment besloten dat niet meer te doen, maar dat betekent niet dat andere systemen dezelfde keuzes maken.