Grundsätzlich stimme ich mit rpj. Code muss im User-Space sein, es sei denn, es ist WIRKLICH notwendig.
Aber, um Ihre Frage zu betonen, welche Bedingung?
Einige Leute behaupten, dass der Treiber im Kernel sein muss, was nicht wahr ist. Einige Treiber sind nicht Timing-empfindlich, in der Tat sind viele Treiber so.
Zum Beispiel der Framer, RTC-Timer, i2c-Geräte, etc. Diese Treiber können leicht in den Benutzerbereich verschoben werden. Es gibt sogar einige Dateisysteme, die im User-Space geschrieben sind.
Sie sollten zum Kernel-Space, wo der Overhead, z. Benutzer-Kernel-Swap, wird inakzeptabel für Ihren Code ordnungsgemäß funktionieren.
Aber es gibt viele Möglichkeiten, damit umzugehen. Zum Beispiel bietet das/dev/mem eine gute Möglichkeit, auf Ihren physischen Speicher zuzugreifen, genau wie Sie es aus dem Kernel-Bereich tun.
Wenn Leute über RTOS sprechen, bin ich normalerweise skeptisch. Heutzutage ist der Prozessor so leistungsfähig, dass der Echtzeitaspekt in den meisten Fällen vernachlässigbar wird.
Aber sogar, sagen wir, Sie haben mit SONET zu tun, und Sie müssen einen Schutz innerhalb von 50ms (tatsächlich noch weniger, da die 50ms Einschränkungen für den gesamten Ring gilt) tun, können Sie immer noch die Umschaltung sehr tun schnell, wenn Ihre Hardware dies unterstützt.
Viele Framer in diesen Tagen können Ihnen eine Hardware-Unterstützung geben, die die Menge der Schreibvorgänge reduziert, die Sie tun müssen. Ihr Job reagiert im Grunde so schnell wie möglich auf den Interrupt. Und Linux ist überhaupt nicht schlecht. Die Interrupt-Latenz, die ich bekam, war weniger als 1 ms, selbst wenn ich viele andere Interrupts laufen habe (zB IDE, Ethernet, etc.).
Und wenn das immer noch nicht genug ist, dann ist vielleicht Ihr Hardware-Design falsch. Einige Dinge sind besser auf der Hardware. Und wenn ich Hardware sagte, meine ich ASIC, FPGA, Netzwerkprozessor oder andere fortgeschrittene Logik.
Ganz zu schweigen von Sicherheitsproblemen (ist Ihr Code 100% hacking-proof? Der kleinste Bug könnte eine riesige Hintertür werden!), Kollateralschaden (ein subtiler Bug kann viel mehr als Ihre App betreffen) usw. –