Wie funktioniert eigentlich Linux?

Es gibt da ja oft Missverständnisse und selbst Leute die schon länger Linux nutzen, wundern sich über manche Dinge und da dachte ich mir, wieso nicht eigentlich ne kleine Reihe die erklärt, was genau ist Linux eigentlich und wie funktioniert es.

Natürlich ohne krass ins Detail zu gehen sondern eher so in dem Sinne, auch wenn man es nicht nutzt, ist das vielleicht interessant zu wissen, under anderem auch weil es mit der Geschichte von UNIX©, Windows©®™ und somit der Geschichte der Betriebssysteme eng verzahnt ist.

Ich nutze Linux seit 2003 (damals noch in Dualboot mit Windows), seit 2005 dann Linux-only unterwegs und seit 2007 mache ich das beruflich. Meine offizielle Job Bezeichnung lautet „Senior GNU/Linux Systemadministrator und Anwendungsentwickler“ und somit bin ich auch für die Ausbildung von Azubis zuständig in dem Bereich. Ich hoffe also euch keinen Quatsch zu erzählen, kanns aber nicht versprechen.

Und das wichtigste, fragt gerne wenn irgendwas unklar ist oder ihr irgendwas wissen wollt. Das ist auch einer der Haupt Gründe das direkt hier als Thread zu machen, dass es kein starres „Erzählen“ wird.

Teil 1: Was ist Linux überhaupt?

Ein Kernel. Jetzt denken sich manche vielleicht „Super, danke für garnichts“, denn was genau ist ein Kernel und was ist der Unterschied zu einem Betriebssystem?

Erstmal das Problem: Jede Hardware hat eine Schnittstelle, ein Interface wie man sie anspricht. Das Problem ist, diese Interfaces sind hässlich (man nennt die tatsächlich ugly interface) weil die oft extrem hardware spezifisch sind unglaublich Komplex. Einer der wichtigsten und vielleicht sogar die Hauptaufgabe eines Kernels ist diese ugly interfaces alle zu kennen/können/verstehen und dem Programmierer, der Anwendungen/Spiele & Co. Entwickeln weil, ein (ja, das heißt wirklich so) beautiful interface anzubieten.

Wenn dein Spiel auf Dateien zugreifen soll, willst du nicht den Code für jeden einzelnen Festplatten Controller in dein Spiel einbauen :smiley: dann wäre 90% der Spielengine nur „Festplatten Ansprechen“ oder so. Das heißt die komplette, direkte, Kommunikation mit der Hardware lagerst du an den Kernel aus, der dir wunderschöne Interfaces gibt mit denen du dem Kernel sagen kannst, was du tun möchtest.

Du sagst zum Beispiel, öffne eine Datei (fopen()) und der Kernel macht dann ganz viel Schindluder im Hintergrund der dafür sorgt, dass dein System mit deiner Hardware am Ende eine Datei öffnet u.s.w.

Damit ein Kernel das ugly Interface einer Hardware kennt/verstehen kann, sind sogenannte Treiber notwendig. Treiber enthalten also schlicht die Information, was diese Hardware kann und wie sie anzusprechen ist. Daher bestehen Kernel auch zum Großteil auch aus Treiber. Der Linux Kernel besteht z.b. zu 10% aus AMD Grafik Treibern :smiley: (Da diese OpenSource sind, sind diese direkt im Linux Kernel integriert).

Hardware ↔ Ugly Interface ↔ Kernel ↔ Beautiful Interface ↔ Anwendung

Daneben kümmert sich der Kernel aber auch um die Verwaltung der Anwendungen, die auf ihm laufen. Ein extrem wichtiger Teil eines Kernels ist der sogenannte Scheduler, der bestimmt welches Programm wann und wie lange die CPU (oder andere Ressourcen) nutzen darf. Der Kernel hat natürlich auch alle Treiber für Dateisysteme u.s.w…

Dadurch dass der Kernel über der Hardware liegt, ist das auch ein essentieller Unterschied zu Betriebssystemen wie DOS (Und somit Windows von 1.0 bis ME), denn du kommst (i.d.r.) nicht an die Hardware ran, ohne den Kernel zu fragen.

Möchtest du RAM haben, musst du den Kernel fragen und sagen wie viel du haben willst, und der gibt dir Speicherbereiche die du nutzen darfst in deinem Programm/Spiel/Whatever. Greifst du auf RAM Bereiche zu auf die der Kernel dir keine Erlaubnis gegeben hat, crashed das Programm mit einem sogenannten Segmentation Fault (SEGFAULT), Speicherzugriffsfehler.

Zusammengefasst, der Kernel legt sich um die Hardware und bietet saubere, schöne Interfaces an, mit der Anwendungen auf die Hardware zuzugreifen können und schützt die Hardware auch vor den Anwendungen und schützt die Anwendungen gegenseitig voneinander.

Und Linux ist nur das, Linux ist nur ein Kernel. Im nächsten Teil kommt dann das Betriebssystem ins Spiel, denn ein Kernel alleine ist erstmal nur für Anwendungsentwickler Sinnvoll, ein Anwender hat damit, wie ihr vielleicht bemerkt habt, relativ wenig Kontakt.

11 „Gefällt mir“