Autor Thema: Was ist schwerer Compilerbau oder OS dev?  (Gelesen 5522 mal)

Sannaj

  • Beiträge: 103
    • Profil anzeigen
Gespeichert
« am: 15. July 2011, 20:28 »
Ich hab mich in letzter Zeit gefragt, was eigentlich schwieriger ist, eine Compiler zu bauen, oder ein Betriebssystem zu entwickeln.

Mir persönlich kommt Compilerbau sogar noch schwieriger vor, was sagt ihr dazu?

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 15. July 2011, 21:44 »
Kommt völlig drauf an: Hello-World-Kernel ohne Programme oder performantes Mikrokernel-OS mit GUI und viel unterstützter Hardware? Parser für mathematische Ausdrücke in den Grundrechenarten oder ein vernünftig optimierender C-Compiler?
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

erik.vikinger

  • Beiträge: 1 277
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 16. July 2011, 09:59 »
Hallo,


also bei vergleichbarem Qualitätsniveau würde ich persönlich sagen das da kein großer Unterschied besteht.

Ein anständiger Compiler benötigt deutlich mehr als nur einen guten Quelltext-Parser und ein anständiges OS besteht auch aus deutlich mehr als nur den eigentlichen Kernel (wobei ich jetzt selbst bei einem Monolithen die Treiber mal als Zusatz betrachte). Ein Compiler muss den geparsten Quelltext in eine interne Darstellungsform umbauen und das ganze dann mit den unterschiedlichsten Algorithmen optimieren damit zum Schluss möglichst guter Object-Code raus kommt. Ein OS benötigt eine ganze Reihe an Services (egal ob im Kernel oder als User-Mode-Personality), reichlich Treiber um auf einer möglichst breiten Palette an Computern zu funktionieren, eine gute UI (egal ob graphisch oder per Konsole) und auch noch eine Menge an User-Land-Tools um mit dem System überhaupt was vernünftiges machen zu können (die GNU-Core-Utils sind allein schon ein dicker Brocken).

Mein eigenes Projekt besteht ja aus 3 Teilen: die Plattform selber (CPU / Chipsatz / Basis-Peripherie), eine gute Build-Tool-Chain (Assembler / Linker / Compiler-Back-End) und das OS-Projekt (Micro-Kernel / Personality / Treiber). Die Build-Tool-Chain würde ich dabei auf jeden Fall nicht als den kleinsten Brocken bezeichnen, auch wenn beim Compiler nur ein Back-End benötigt wird und kein kompletter Compiler, die hat mir bis jetzt am meisten Kopfzerbrechen bereitet was aber sicher auch daran liegt das ich von diesen Dingen am wenigsten Ahnung hab.


Grüße
Erik
Reality is that which, when you stop believing in it, doesn't go away.

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 16. July 2011, 12:31 »
Wenn du mich fragst: Compilerbau.
Vom Aufwand ist beides in etwa gleichwertig, aber Compilerbau ist sehr viel theoretischer und abstrakter.

Die LKML-FAQ sagt: "Linux is not a good computer science project. It is, however, good engineering."

In die Richtung gehen für mich fast alle Betriebssysteme: Mal was ausprobieren, mal gucken wie es geht - aber nicht theoretisch begründen.

erik.vikinger

  • Beiträge: 1 277
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 16. July 2011, 17:07 »
In die Richtung gehen für mich fast alle Betriebssysteme: Mal was ausprobieren, mal gucken wie es geht - aber nicht theoretisch begründen.
Ich mochte es ja noch nie in Schubladen gesteckt zu werden aber es erfüllt mich wirklich mit viel Freude das speziell diese Schublade mir erspart bleibt.

SCNR
Erik
Reality is that which, when you stop believing in it, doesn't go away.

Sannaj

  • Beiträge: 103
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 16. July 2011, 20:22 »
Naja, anderseits ist es ja bewiesen, das sich in der Computerindustrie das durchsetzt, was einfach mehr oder weniger funktioniert, als das was ausführlichst philosophiert wurde. Bespiele gibt's genug: DOS (und später Win) über verschiedene andere, Linux über GNU Hurd, x86 Erweiterungen über neuere Architekturen.

erik.vikinger

  • Beiträge: 1 277
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 17. July 2011, 12:05 »
oder Flat-Memory über Segmentierung  :-P
Reality is that which, when you stop believing in it, doesn't go away.

Sannaj

  • Beiträge: 103
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 17. July 2011, 17:12 »
Naja, das resultiert aus dem Paging, bei dem die Segmentierung eh nur stört, so ähnlich wie heute jeder lieber PM stadt RM benutzt.

erik.vikinger

  • Beiträge: 1 277
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 17. July 2011, 19:43 »
Hallo,


Naja, das resultiert aus dem Paging, bei dem die Segmentierung eh nur stört
Wieso stört die Segmentierung beim Paging? Das ist doch nur eine zusätzliche und sehr leistungsfähige Abstraktionsebene die man bei x86 ja noch nicht mal zwingend benutzen muss.

so ähnlich wie heute jeder lieber PM stadt RM benutzt.
Dieser Vergleich hinkt etwas, die starre Segmentierung des Real-Mode hat nichts mit dem zu tun was die flexible Segmentierung des PM zu bieten hat. Im Real-Mode dient die Segmentierung dazu einer reinen 16 Bit-CPU 20 Bit Adressen zu ermöglichen (um mehr als 64 kByte Speicher adressieren zu können), im Protected-Mode geht es um Speicherschutz (mit Zugriffsrechten usw.) und um flexibles fortschrittliches Management des linearen Adressraums (also Dinge die man bei Flat-Memory-OSen mit Hilfe des Paging mehr schlecht als recht nachbaut, siehe http://forum.lowlevel.eu/index.php?topic=2768.0).


Grüße
Erik
Reality is that which, when you stop believing in it, doesn't go away.

TheThing

  • Beiträge: 105
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 19. July 2011, 05:07 »
Also ich denke, es ist beides in etwa gleich schwer. Entscheidend ist dabei aber auch das persönliche Interesse bzw. die Begabung für das eine oder andere. Momentan scheint man mit OS-Dev jedoch besser bedient was Quellen anbelangt (lowlevel, osdev.org, osdever.net usw.), als ich mich mal etwas nach dem Thema Compiler umgesehen habe, konnte ich nicht allzu viel finden.
Ich finde auch, dass man bei einem OS schneller einen Einblick bekommt, wenn man den Source eines "großen" OS durchsieht. Mich etwas im Linux-Kernel umzusehen fiel mir deutlich leichter als den Code des FreeBASIC-Compilers zu kapieren.
Letztendlich sehe ich aber keine wirkliche Relevanz hinter der Frage. Entscheidend, ob man sich mit dem einen oder anderen beschäftigt, sollte vor allem das persönliche Interesse sein. Wobei ich allerdings davon abrate, sich mit beidem zur gleichen Zeit zu beschäftigen ;)
« Letzte Änderung: 20. July 2011, 02:09 von TheThing »

Sannaj

  • Beiträge: 103
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 20. July 2011, 17:13 »
Was ich persönlich denke, ist, das die Arbeit an einem Betriebssystem zwar anspruchsvoll, aber eigentlich nicht unglaublich abstrakt und schwer ist. Das Problem liegt er im Umfang. Man muss sich einfach mit unglaublich vielen unterschiedlichen Dingen beschäftigen muss, damit das System etwas drauf hat.

Compilerbau ist etwas anderes. Ein Compiler besteht aus mehren übereinandergelegten Automaten. Die nacheinander den Quelltext oder Stücke davon bearbeiten und an den nächsten weitergeben. Ich persönlich habe bereits die scheinbar einfache Aufgabe, eine Compiler der 5 Funktionen + einen Datentyp vordefinierter Variablen beherrscht als schon ziemlich schwierig empfunden (mittlerweile nehme ich für so was Lua). Andererseits ist die Arbeit überschaubarer.

Also ich denke, es ist beides in etwa gleich schwer. Entscheidend ist dabei aber auch das persönliche Interesse bzw. die Begabung für das eine oder andere. Momentan scheint man mit OS-Dev jedoch besser bedient was Quellen anbelangt (lowlevel, osdev.org, osdever.net usw.), als ich mich mal etwas nach dem Thema Compiler umgesehen habe, konnte ich nicht allzu viel finden.
Da muss ich dir recht geben, warum weiß ich auch nicht. Vermutlich gibt es mehr Hobbyprogrammier, die ein OS programmieren wollen (ich denk mal das "Ich will so sein wie Linus Torwals" spielt bei manchen 'ne Rolle.)

Ich finde auch, dass man bei einem OS schneller einen Einblick bekommt, wenn man den Source eines "großen" OS durchsieht. Mich etwas im Linux-Kernel umzusehen fiel mir deutlich leichter als den Code des FreeBASIC-Compilers zu kapieren.
Naja, ich denk mal Linux wird ja von sehr vielen Leuten bearbeitet, und muss deshalb auch logisch aufgebaut werden, während FreeBasic erst mal nur von ein paar Leuten entwickelt wurde, die sich erst mal wenig um die Quellcode-Verzeichnis-Struktur gekümmert haben.

Letztendlich sehe ich aber keine wirkliche Relevanz hinter der Frage. Entscheidend, ob man sich mit dem einen oder anderen beschäftigt, sollte vor allem das persönliche Interesse sein. Wobei ich allerdings davon abrate, sich mit beidem zur gleichen Zeit zu beschäftigen ;)
Da hast du recht. Deshalb hab ich mein OS-Projekt beerdigt. (War eh nix außer eine kprintf() Function in FB.)

 

Einloggen