-
Benutzerraum
Autor: Linuxschaden 29.06.15 - 13:40
m(
Hier hat jemand etwas geschrieben, von dem er keine Ahnung hatte.
Ich habe zwar keinen Bildungsauftrag, aber ich gebe es hier mal trotzdem an: die beiden Räume, von denen hier gesprochen wird, sind "Userspace" und "Kernelspace". Sind schon jeher so genannt worden, und referenzieren mit "Space" auf den Adressraum, in dem sie stehen. Äquivalent gibt es dazu einen "Usermode" und einen "Kernelmode" - Kernel-Code (nicht Kernelmode :)) kann über reservierte Pages im Adressraum eines Prozesses auf Userspace-Adressen zugreifen (was er auch machen kann, wenn z.B. auf x32-Machinen der Lowmem/Highmem-Split deaktiviert ist, aber dann dauern Syscalls länger, weil der Kernel bei Wechsel von User- in Kernelmode Pages austauschen muss, und bei der Rückkehr genau das gleiche, nur umgekehrt). Userspace-Code darf das nicht, und wenn er versucht, außerhalb der Gatter auf Kernel-Adressen zuzugreifen, gibt es einen Segfault.
"Benutzerraum" habe ich in diesem Kontext noch nie gehört. Wie würde denn Kernelspace ins Deutsche übersetzt werden - "Kernraum"? :)
Bei der Gelegenheit - wusstest ihr, dass Pagefault und Segfault nicht das gleiche sind? Pagefaults werden von der Hardware (MMU, oder emulierten MMU) an den Kernel gesendet, wenn Pages für einen Prozess nicht zugewiesen worden sind, dieser aber dennoch darauf zugreifen will. Und es gibt Fälle, wo der Prozess das auch darf - z.B. wenn der Kernel faul ist und Dateien, die in den Arbeitsspeicher gemappt wurden, nicht sofort mappt. Dann sendet die MMU einen Pagefault. Wenn der Kernel merkt, dass der Prozess dies darf, mappt er die Page halt ein, behandelt den Pagefault, und tut so, als sei nichts gewesen. Und wenn nicht, sendet der Kernel einen Segfault, der das Programm beendet (meistens).
Ähm, zurück zum Thema.
Linus hat seinerzeit einen Profiler über den Kdbus-Code laufen lassen und dabei festgestellt, dass die meiste Zeit in Userspace-Code verbracht wird. Oft greift man nämlich gar nicht auf die Gatter selbst zu, weil das blöd ist (man muss mit Syscall-Nummern arbeiten und dann einen Software-Interupt auslösen, und die Nummern unterscheiden sich auch noch von Architektur zu Architektur). Deswegen verwendet man in der Regel Laufzeitbibliotheken (unter Linux ist die glibc die so meist verwendete), die nicht nur diese Wrapper zur Verfügung stellen, sondern auch andere Symbole definiert und exportiert, die von diversen Standards (C89, C99, POSIX, ...) definiert werden. Die Wrapper laufen im Userspace - und sind da langsam. Das ist der Grund, warum Linus Kdbus erst mal zurückgewiesen hat (dies und die Tatsache, dass er wohl direkt Probleme beim Installieren der Sources hatte).
EDIT: Linux zu Linus - komm schon, so schwer is dat gar nich ...
1 mal bearbeitet, zuletzt am 29.06.15 13:42 durch Linuxschaden. -
Re: Benutzerraum
Autor: kernkraftzwerg 29.06.15 - 17:39
Linuxschaden schrieb:
--------------------------------------------------------------------------------
> "Benutzerraum" habe ich in diesem Kontext noch nie gehört. Wie würde denn
> Kernelspace ins Deutsche übersetzt werden - "Kernraum"? :)
Meistens übersetzt man "Kernel" nicht, also ist das der "Kernel-Raum". Das verwenden aber nur ältere Programmierer, die noch "Rechner" zu ihrem Computer sagen. Ich, z.B. ;-) -
Re: Benutzerraum
Autor: pythoneer 29.06.15 - 23:14
kernkraftzwerg schrieb:
--------------------------------------------------------------------------------
> Meistens übersetzt man "Kernel" nicht, also ist das der "Kernel-Raum". Das
> verwenden aber nur ältere Programmierer, die noch "Rechner" zu ihrem
> Computer sagen. Ich, z.B. ;-)
Ist "Kernel-Raum" echt ein geläufiger Begriff für dich, ja? Ich bin immer fasziniert wenn man einen so bekannte Begriffe "neu-interpretiert" noch mal auf deutsch hört. Zumindest Texte zum Thema lese ich ja meist auf Englisch. API's und Dokumentationen sind es ja halt meist und Fachliteratur auch. Da war mein Professor damals an der Uni auch so ein richtiger Kulturschock als er mit "Reihungen" (Arrays) und "Kellerspeicher" (Stack) daher kam ;)



