Ich spielte mit ioctl
und diese Frage fiel mir auf.Warum ist die Anzahl der Systemaufrufe sehr begrenzt?
Hintergrund
- Mir wurde gesagt, dass die primäre Motivation für Systemaufrufe ist, dass die Anzahl der Interrupt-Handler sehr eingeschränkt erlaubt ist. So viele Betriebssysteme implementieren die Abstraktion von Systemaufrufen (a.k.a. traps), die nur eine Unterbrechungsnummer (
0x80
im Falle von Linux) belegen, aber zusätzliche Argumente akzeptieren, um unterschiedliche Funktionen auf Anforderung zu liefern. - this thread schlägt vor, dass die Anzahl der Systemaufrufe tatsächlich auch sehr begrenzt ist, so dass die gleiche Argumentation erneut angewendet wird, um
ioctl
zu erfinden.
Daher meine Frage. Warum bieten Betriebssysteme nicht einfach genug Systemaufrufe und werden ioctl
los? (Oder ist es einfach, eine hierarchische Struktur zu erstellen, um bessere Skalierbarkeit zu bieten?)
Ich denke, Ihre Antwort macht mehr Sinn als die oben genannten Post. Nur um zu bestätigen, Systemaufrufe sind wie eine anpassbare Handler für das Betriebssystem mit der CPU zu interagieren, während "ioctl" innerhalb des Betriebssystems ist ein anpassbarer Handler für die Interaktion zwischen User-Space-Anwendungen und dem Kernel? – wlnirvana
System-Call-Handler werden vom OS-Kernel als Kommunikationsmechanismus zwischen usermode und kernelmode definiert (die CPU kann durch spezielle Anweisungen helfen, die den Wechsel zwischen Benutzer- und Kernel-Modus einfacher und kostengünstiger machen). Sie sind mehr oder weniger fest im Betriebssystemkernel codiert als eine feste Reihe von Routinen, die einzelne Systemaufrufe implementieren). Anforderungen, die im Auftrag von ioctl generiert werden, und einige andere Systemaufrufe werden normalerweise an einen Treiber gesendet, der für das ioctl-Ziel verantwortlich ist, so dass das ioctl vom Entwickler (in einer dokumentierten Weise) (teilweise) angepasst werden kann. –