Avatar von 7eggert
  • 7eggert, Bodo Eggert

mehr als 1000 Beiträge seit 21.03.2002

Re: Userspace-Helferlein - auch für Fuse nutzbar?

MetaCircularEvaluator schrieb am 17.08.2018 04:05:

7eggert schrieb am 16.08.2018 17:26:

MetaCircularEvaluator schrieb am 15.08.2018 04:20:

7eggert schrieb am 13.08.2018 20:46:

Da ich bereits Kernel-Module bearbeitet habe kann ich sagen: Nö.

Es gibt fest definiert Schnittstellen IM Kernel? Habe ich was verpasst? Wann hat Linus hierzu seine Meinung geändert?

Die Schnittstelle ist fest, bis sie Jemand ändert und dann im ganzen Kernel alle Nutzer anpaßt.

Sprich: Es gibt kein stabiles API…

Anpassungen an einer Stelle ziehen Anpassungen überall anders nach sich. Das ist genau das was man mit einer definierten public API verhindern will!

Wenn Du eine neue Speicherverwaltung mit neuer API einbindest, mußt Du den Rest daran anpassen. Wasser ist naß.

Andere Systeme bleiben dann halt auf einem alten Stand stehen oder müssen irgendwann ganz viel kaputtmachen.

Das oben beschriebene nennt man hingegen "Spagetti Code".

Ich sag doch, wenn die Begriffe unklar sind ...

Und überhaupt: Wie kann ein Kernel Modul ohne die Kernel Infrastruktur arbeiten? Hat man etwa Infrastruktur Services in Komponenten ausgelagert, die man auch so laufen lassen könnte?

Wie kann ein Nutzer-Programm ohne Kernel-Infrastruktur arbeiten?

Man ruft das Benötigte auf.

Ah so. Man kann also einfach so von außen Kernel Interna aufrufen. Ja, ne, ist klar.

Das wäre ja noch gruseliger als alles was ich mir vorstellen kann.

Das macht jeder Syscall. Der einzige Unterschied ist aus Programmierer-Sicht, daß es zusätzlichen Wrapper-Code gibt, um alte Syscalls auf neue abzubilden. Zusätzlichen, selten benutzten, kaum gewarteten Code.

Das trifft aber garantiert sowieso nicht zu… Die sind ja nicht vollkommen gaga, und machen ALLES von außen erreichbar.

Kernel Module brauchen die interne Kernel Infra um zu funktionieren. Die ist aus dem Userspace nicht erreichbar! Nur die "public API" a.k.a. Syscalls sind es.

Nein, Du mußt nicht wild Irgendwas aufen, nur weil Du es theoretisch könntest. Außer Du hat eine Störung, und dann bleibt Dein Code draußen.

Linux ist ein Monolith. Damit per Definition eine "Code Spaghetti".

Wenn schon die Begriffe unklar sind …

Gut, dann erkläre ich mal den Begriff: Eine "Code Spaghetti" hat man, wenn alles mit allem Interagiert. Das hat nichts damit zu tun wie der Code AUSSIEHT. Man kann z.B. auch wundervoll übelsten Spaghetti Code fabrizieren, indem man alles "schön modular OOP" programmiert (das ist sogar meist der Standard!)

Gerade das findet ja nicht statt, sondern man hat seine Abstraktionsschichten und nutzt diese. Genau deshalb kann man Linux auf allen möglichen Plattformen laufen lassen, von Raspi bis Cray. Wer italienisch kocht, guckt sich den Staging-Bereich von Außen an.

Natürlich ändert sich die ABI von Pi zu Cray, was die Speicherallokation angeht - automatisch per Compiler. Manchmal ändert sich auch die API, wenn gestern die Cray noch nicht unterstützt wurde.

Bewerten
- +
Anzeige