Ich z.B. sage
PC Speaker Standard Beep - INT 0x54
EAX: 0001
PC Speaker Custom Beep - INT 0x54
EAX: 0002
EBX: Frequenz
Soundkarte öffnen - INT 0x56
EAX: 0001
Sounddaten schreiben - INT 0x56
EAX: 0002
EBX: Pointer auf den Puffer
usw.
das meine ich mit einem schlechtem System. Zwar kann man dahinter dann Treiber hängen, aber eine neue API hinzufügen, wird auch Ãnderungen (oder zumindstens unter mitbenutzung) von Bereichen passieren müssen (IDT und so was).
Wenn man einen Microkernel hat wird man sicher irgendwo IPC benutzen müssen - wie sonst will man vernünftig die Prozessgrenzen überwinden. Aber das sind nur die Primitiven (die auch an anderen Stellen von Programmen direkt benutzt werden, besonders die zur Synchronisatzion).
Die richtige Abstraktion baut man sich dann daraus auf (z.B. Corba, DCOM mit IPC statt TCP/IP).