Dat is idd de manier van Windows, OS X en BSD, bij Linux zijn de drivers in de kernel meegebakken.
Sorry, maar dat klopt gewoon niet. Het gaat bij al die OSsen op een vergelijkbare manier.
Windows:
Kent zowel user-space als kernel-space drivers. Voorzover ik de situatie begrijp is het grootste deel van de drivers
kernelspace, met name de grafische drivers (al hebben ze aan dat laatste iets veranderd in Vista, maar ik weet niet exact wat). Userspace drivers bestaan vooral voor USB devices en dergelijke. Zie onder andere
Wikipedia en
deze Microsoft User-Mode Driver Framework FAQ voor meer informatie.
Mac OS X:
Mac OS X gebruikt XNU, een op Mach gebaseerde microkernel, waar ze vervolgens alles min of meer gewoon in proppen, het idee van microkernels aardig voorbijgaand. Zie onder andere
deze en
deze Apple developer pages:
A driver is an I/O Kit object that manages a specific piece of hardware. Drivers are written as kernel extensions and are usually installed in the Extensions folder (at /System/Library/Extensions.)
En:
Mac OS X provides a kernel extension mechanism as a means of allowing dynamic loading of code into the kernel, without the need to recompile or relink. [...] Because KEXTs run in supervisor mode in the kernel’s address space, ...
FreeBSD/NetBSD/OpenBSD:
Die doen het exact hetzelfde als GNU/Linux. (Of andersom, afhankelijk van je historische opvattingen; de voorlopers van deze drie OSsen stammen van voor de Linux kernel). Zie onder.
GNU/Linux:
Drivers draaien hoofdzakelijk kernelspace, met een aantal (ook bij veel andere OSsen voorkomende) uitzonderingen zoals printers, scanners, en verschillende USB apparatuur. Opvallende uitzondering is dat grafische drivers voor het grootste gedeelte userspace zijn in GNU/Linux, zowel 2D (Xorg EXA/XAA drivers) als 3D (libgl-mesa-dri).
Wat meer uitleg over GNU/Linux kernel/userspace drivers is te vinden in
deze post van mij bij ditzelfde nieuws-item.
Erfenis uit de jaren '70
Linux, de kernel, is uit 1991

- niemand zou anno nu nog zo'n OS ontwerpen
De praktijk wijst anders uit. De meeste drivers op alle "gangbare" OSsen (goed, afhankelijk van je definitie van gangbaar) zijn nog steeds kernelspace.
Microkernels zijn een leuk concept, en ze hebben interessante voordelen (robuustheid en upgradebaarheid bijvoorbeeld) vanwege vergaandere isolatie en compartimentalisatie, maar performance blijft vaak een groot probleem.
Als de filesystem layer 'synchroon' iets wil afleveren aan de harddisk driver, dan heb je in een microkernel vier context switches: filesystem -> scheduler -> harddisk driver -> scheduler -> filesystem. In een macrokernel nul. Dit hoeft niet altijd een probleem te zijn, maar het is het in de praktijk vaak wel, vooral bij general-purpose OSsen (embedded ligt de zaak soms anders).
(offtopic: dit zijn veel te veel Engelse woorden voor een Nederlandse tekst

)
[Reactie gewijzigd door deadinspace op 23 juli 2024 10:47]