Status Update?

Low-Level-Programmierung und Experimenteller Kernel; Ansprechpartner: Dirty Oerti
Antworten
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Status Update?

Beitrag von Xin » Di Apr 27, 2010 3:58 pm

Wie sieht's hier eigentlich aus? Lange nichts mehr von gehört... ich plane meinem Compiler Executables beizubringen, vielleicht trifft man sich mit seien Projekten ja mal...
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Status Update?

Beitrag von Dirty Oerti » Mi Apr 28, 2010 9:46 pm

Tag :)

Ja, nicht nur lange nichts mehr davon gehört sondern auch lange nichts mehr daran gearbeitet. Zumindest bis etwa Februar diesen Jahres. Da hatte ich die Facharbeit weg (die wollte ich hochstellen, muss aber noch warten bis so ein Wettbewerb rum ist, rechtliches Zeugs halt) und hab mich dann spontan mal wieder ran gesetzt.
Dabei hab ich das komplette Design überdacht, mir überlegt wo die Fehler des alten lagen, wo Probleme aufgetreten sind, warum die Probleme aufgetreten sind, was im alten Design schlecht war und noch vieles mehr.

Dann hab ich mir das Buch geschnappt, dass ich (ja immer noch, wenn du es brauchst dann schreib mir^^) von dir ausgeliehen hab und hab mir die entsprechenden Kapitel (wohl zum inzwischen 3-4 mal) durchgelesen.

Das hab ich dann zusammengeführt ein neues, meiner Ansicht nach besseres Grunddesign an dem ich seit Ende Februar immer mal wieder ein Stückchen (wie es die Schule und das nahende - 1 Woche entfernte - Abitur halt zulassen) arbeite.

Irgenwann im März - am 5.3. sehe ich gerade - bin ich dann auf die Idee gekommen, mein Projekt doch einfach mal auf Sourceforge zu stellen. War zu der Zeit nämlich an einem anderen Projekt mitbeteiligt (Cinecutie - eine doch schon ganz nette Weiterentwicklung des berühmten Cinelerra - jetzt anscheinend leider wieder eingeschlafen) das sich auch auf Sourceforge platziert hatte.
Ich bin auch auf die Idee gekommen, doch mal nachzusehen, ob es denn Leute gibt, die Interesse haben, sich am Projekt zu beteiligen und hab ein entsprechendes Schreiben verfasst.
Daraufhin haben sich etwa 5-6 Leute gemeldet, von denen alle sehr gute Kenntnisse aufweisen (da fühlte ich mich ganz schlecht, so als "kleiner Schüler aus Bayern" ^^) und alle recht interessiert an einer (freien) Mitarbeit waren.
Von diesen beiden sind auch noch 2 aktiv, einem verdanke ich ein verbessertes Build- und vorallem Testsystem und dazu noch eine schicke Coding Convention, der andere ist noch eher in der Phase sich in das Projekt einzuarbeiten, löchert mich aber mit Fragen und bringt mich so dazu, meinen Code endlich mal zu dokumentieren (man beachte die Doxygen-Frage von mir im Softwarebrett ;) ).

Das Projekt befindet sich also in einem ganz gutem Zustand, wie ich finde.

Jetzt zum technischen Teil:

Die wirkliche Umsetzung ist natürlich noch nicht sehr weit fortgeschritten, ich bin aber dahinter.
Die letzten Tage habe ich nochmal allen Code die Speicherverwaltung betreffend überarbeitet, neu zusammengestellt und dieses mal auch dokumentiert.
Das ist der vorletzte Vorbereitungsschritt auf dem Weg zu einem endlich reibungslos stabil und effizientem Multitasking.
Der letzte Punkt der noch unter Vorbereitung fällt sind die Descriptor Tables (GDT, IDT).
Wer sich vllcht ein bisschen damit auskennt wird sich jetzt an den Kopf fassen und sich wundern, da das eigentlich die Themen sind, die so ziemlich als erstes abgehandelt werden.
Mir ist aber (durch lange, lange, lange Versuchsreihen und Testläufe) aufgefallen, dass die Register, die die Adressen auf diese Tabellen enthalten, sich auf virtuelle Adressen, und nicht, wie bisher angenommen, auf physikalische beziehen.
Daraus ergaben sich (im alten System, das diese Tabellen behandelt bevor es so etwas wie einen virtuellen Adressraum überhaupt gibt) diverse Probleme, die nun nicht mehr auftauchen können.
Theoretisch lassen sich mit der neuen Realisierung (die noch aussteht, im Konzept aber durchgeplant ist, eben nur noch nicht in "harten" Code gebracht wurde) ganz interessant und wohl teilweise auch verrückte Dinge anstellen.
So wäre es damit z.B. möglich, direkt bei einem Wechsel zu einem Task (Taskswitch) durch Wechseln des virtuellen Adressraums auch das Maping der oben genannten Tabellen dynamisch zu verändern.
Daraus ergibt sich dann z.B. die Möglichkeit, für jeden Task eigene Systemaufrufe zur Verfügung zu stellen (was in der Theorie und mit der entsprechenden Arbeit im Hintergrund dazu führen würde, dass auch Windows und Linuxprogramme "nativ" auf dem System laufen könnten, ohne es zu merken).
Auch wäre es dadurch möglich (nur wenn es implementiert wird, es ist keine Sicherheitslücke) Code dynamisch in den Ring 0 (privilegierter Kernelcode) zu transferieren (ohne irgendwas kopieren oder ändern zu müssen, ein Register müsste geändert werden)
Das sind natürlich alles Sachen, die eher in Richtung "Neuland" gehen, worüber man auch kein "How-To" im Internet findet.
In wieweit da was Nützliches dabei ist kann ich natürlich noch schlecht beurteilen, aber das solche Möglichkeiten da sind, ist doch schon mal nett :)

Grundprinzip des neuen Systems soll Modularität sein. Daraus ergeben sich viele Nachteile (die Geschwindigkeit könnte darunter leiden, Performancetests jetzt aber durchzuführen ist unsinnig) die auch zu teilweise richtig kompliziertem und "eher ungewöhnlichen" Code führen, aber auch viele Vorteile, die hoffentlich überwiegen.
Einen scheinbaren Konflikt mit diesem Prinzip baue ich aber auf: Im alten System war es theoretisch möglich, beliebig viele Tasks gleichzeitig laufen zu lassen. Der Speicher hierfür (für die Verwaltung!) wurde dynamisch angefordert und auch wieder freigegeben.
Jetzt stelle ich das ganze auf ein etwas statischeres System um.
Es gibt eine feste Anzahl an Speicher, der zur Verwaltung der Tasks zur Verfügung steht (maximal 4 MB). Daraus ergibt sich dann eine maximale Anzahl gleichzeitig laufender Tasks. Das schränkt natürlich ein, da ich aber davon ausgehe, dass kaum (etwa) 32000 Tasks gleichzeitig auf einem System mit maximal 4GB Arbeitsspeicher laufen, sollten sich die daraus folgenden Konsequenzen in Grenzen halten :)

Ja, soweit erstmal.

Zum Thema Executables: Ja, das steht (hoffentlich) auch bald an, zweiterer der oben genannten Personen scheint sich in diesem Bereich auch recht gut auszukennen, ich selber hab mich damit aber noch kaum befasst.
Die Frage, die sich für mich noch vor den Executables stehen muss ist, wie sie überhaupt gestartet werden sollen.
Es gibt die Möglichkeit des "einfachen" Forkens, wie es UNIX-Systeme handhaben (die Bash startet einen Fork von sich selbst, der dann im Prinzip "zum Programm" wird) oder auch das Prinzip des Startens per Swaping (das Executable-File wird als "Auslagerungsspeicher" angesehen, aus dem dann der benötigte Code "in den Hauptspeicher geswappt" wird)
Vielleicht fällt mir dazu auch noch etwas nettes ein. :)

Die Frage ist nur, wann. Ich nehme kaum an, dass das Projekt bereits ohne mich in der Lage ist zu laufen (2 Leute, die noch nicht wirklich einen Plan davon haben sind dazu nicht ausreichend), muss also davon ausgehen, dass die ganze Sache ab dem 1.Juli für exakt ein Jahr auf Eis liegt. In der Zeit [IRONIE]darf ich nämlich unserem lieben Vaterland dienen[/IRONIE] und mich mit den Techniken des Schlammrobbens und diversen anderen Überlebenstaktiken auseinandersetzen :)

Einen Loader für Executables zu haben wäre aber trotzdem schonmal nicht schlecht (ich hab mir nämlich schon ein paar nette Einfälle zusammengetragen).
Das würde dann für mich so aussehen, das es für den Kernel "spezielle" (aber modulare und beliebig austauschbare) Programme gibt, die nur den Zweck haben, andere Programme zu starten.
Wie ich diese speziellen Programme (Module oder Treiber sind wohl auch gute Namen .. ) dann starte muss ich mir noch überlegen, da kenn ich aber schon Möglichkeiten (initial ram disk als Beispiel)

Diese Loader würden dann wohl gestartet werden, als Parameter die "Adresse einer ausführbaren Datei" bekommen und dann die Datei mit Hilfe der Systemaufrufe (zum Lesen von der Festplatte z.B.) durchsuchen und die benötigten Teile an die richtigen Stellen im eigenen (virtuellen!) Adressraum laden und dann sich selbst weitesgehend töten und zum "Einsprungspunkt" der Programme hüpfen...
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Status Update?

Beitrag von Xin » Mi Apr 28, 2010 10:18 pm

Dirty Oerti hat geschrieben:Dabei hab ich das komplette Design überdacht, mir überlegt wo die Fehler des alten lagen, wo Probleme aufgetreten sind, warum die Probleme aufgetreten sind, was im alten Design schlecht war und noch vieles mehr.
Sowas entwickelt sich langsam und mit der Erfahrung.
Meine Programmiersprache wird langsam in einigen Bereichen rund. Und ich bin schon seit rund 8 Jahren aktiv dabei. Wobei ich das Projekt auch immer mal wieder pausieren lassen musste.
Dirty Oerti hat geschrieben:Dann hab ich mir das Buch geschnappt, dass ich (ja immer noch, wenn du es brauchst dann schreib mir^^) von dir ausgeliehen hab und hab mir die entsprechenden Kapitel (wohl zum inzwischen 3-4 mal) durchgelesen.
Ich habe Dir das Buch nicht ausgeliehen.

Das Buch ist Dein Eigentum. Ich habe Dich gebeten, Dein Wissen soweit es Dir möglich ist ins Wiki zu übertragen.
Das Buch war teuer, aber Du liest das Buch. Damit hat es bei Dir einen größeren Wert als bei mir im Regal.

Du hattest eine sinnvolle Vorstellung Dein Projekt aufzubauen und ich wollte ein OS schreiben, für das ich Erweiterungen in der Programmiersprache brauchte. So begann mein Compilerprojekt, auf das ich mich nun konzentriere.
Das Buch ist also bei Dir besser aufgehoben.
Dirty Oerti hat geschrieben:Das hab ich dann zusammengeführt ein neues, meiner Ansicht nach besseres Grunddesign an dem ich seit Ende Februar immer mal wieder ein Stückchen (wie es die Schule und das nahende - 1 Woche entfernte - Abitur halt zulassen) arbeite.
Dann wünsche ich Dir viel Erfolg für's Abitur.
Aber Du schaffst das schon.... Abitur bedeutet ja nur Schulabgang... von Abschluss ist da ja nicht die Rede ;-)
Dirty Oerti hat geschrieben:Von diesen beiden sind auch noch 2 aktiv, einem verdanke ich ein verbessertes Build- und vorallem Testsystem und dazu noch eine schicke Coding Convention, der andere ist noch eher in der Phase sich in das Projekt einzuarbeiten, löchert mich aber mit Fragen und bringt mich so dazu, meinen Code endlich mal zu dokumentieren (man beachte die Doxygen-Frage von mir im Softwarebrett ;) ).
Hehehe, wenn ich mehr Zeit hätte, würde ich zwar nicht mitmachen, aber erstmal den Compiler startklar machen.

Ich möchte mich aber gerne mal einlesen, vielleicht lasse ich mir das ganze von Dir mal zeigen.
Dirty Oerti hat geschrieben:Einen scheinbaren Konflikt mit diesem Prinzip baue ich aber auf: Im alten System war es theoretisch möglich, beliebig viele Tasks gleichzeitig laufen zu lassen. Der Speicher hierfür (für die Verwaltung!) wurde dynamisch angefordert und auch wieder freigegeben.
Jetzt stelle ich das ganze auf ein etwas statischeres System um.
Es gibt eine feste Anzahl an Speicher, der zur Verwaltung der Tasks zur Verfügung steht (maximal 4 MB). Daraus ergibt sich dann eine maximale Anzahl gleichzeitig laufender Tasks. Das schränkt natürlich ein, da ich aber davon ausgehe, dass kaum (etwa) 32000 Tasks gleichzeitig auf einem System mit maximal 4GB Arbeitsspeicher laufen, sollten sich die daraus folgenden Konsequenzen in Grenzen halten :)
Die PIDs müssen dann wiederverwertet werden?
Dirty Oerti hat geschrieben:Die Frage ist nur, wann. Ich nehme kaum an, dass das Projekt bereits ohne mich in der Lage ist zu laufen (2 Leute, die noch nicht wirklich einen Plan davon haben sind dazu nicht ausreichend), muss also davon ausgehen, dass die ganze Sache ab dem 1.Juli für exakt ein Jahr auf Eis liegt. In der Zeit [IRONIE]darf ich nämlich unserem lieben Vaterland dienen[/IRONIE] und mich mit den Techniken des Schlammrobbens und diversen anderen Überlebenstaktiken auseinandersetzen :)
Wenn Du Glück hast, machst Du die Grundausbildung und kommst dann an einen Computer (je nachdem wo Du sitzt).
Wenn der eine Internetverbindung hast, wirst Du viel Zeit zum Surfen haben.

Ich bin weiterhin gespannt, wie sich das weiterentwickelt.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Status Update?

Beitrag von Dirty Oerti » Sa Mai 08, 2010 5:56 pm

Xin hat geschrieben:Sowas entwickelt sich langsam und mit der Erfahrung.
Dito. Wenn ich einen neuen Teil des Kernels schreibe, dann bin ich mir eigentlich immer ziemlich sicher, dass ich diesen Teil wohl noch 10-20 mal überarbeiten und mindestens 4 mal neuschreiben werde :)
Xin hat geschrieben:Dann wünsche ich Dir viel Erfolg für's Abitur.
Danke schön :) Die erste Prüfung am Donnerstag (Englisch Grundkurs) ist schon geschafft.
Angst, das Abi nicht zu bestehen, besteht bei mir zum Glück nicht ^^
Xin hat geschrieben:Ich möchte mich aber gerne mal einlesen, vielleicht lasse ich mir das ganze von Dir mal zeigen.
Ich gebe das, was ich bisher zusammengetragen hab immer gerne weiter :)
Am liebsten ins Wiki, da kann es dann jeder lesen. Ist nur leider nicht immer so einfach das auch in eine verständliche Form zu bringen :)
Xin hat geschrieben:Die PIDs müssen dann wiederverwertet werden?
Das könnte ich so machen, ich denke aber, dass das wahrscheinlich keine gute Idee ist.
Die PIDs sollten als EINDEUTIGE Identifikationsnummer erhalten bleiben.
Sprich ein Programm wird "extern" (also außerhalb des Kernels) nur per PID identifiziert, im Kernel wird das Programm über seine "Platznummer" angesprochen.
Xin hat geschrieben:Wenn Du Glück hast, machst Du die Grundausbildung und kommst dann an einen Computer (je nachdem wo Du sitzt).
Wenn der eine Internetverbindung hast, wirst Du viel Zeit zum Surfen haben.
Könnte sein. Bei der Marine mit Verwendungszweck "Navigation auf See" sieht es in der Richtung aber eher schlecht aus...
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Status Update?

Beitrag von Xin » So Mai 09, 2010 2:16 pm

Dirty Oerti hat geschrieben:
Xin hat geschrieben:Sowas entwickelt sich langsam und mit der Erfahrung.
Dito. Wenn ich einen neuen Teil des Kernels schreibe, dann bin ich mir eigentlich immer ziemlich sicher, dass ich diesen Teil wohl noch 10-20 mal überarbeiten und mindestens 4 mal neuschreiben werde :)
Das Typsystem meines Compilers lief schon... dann kam STRG-A, STRG-X.... inzwischen bin ich beim 3. angekommen.
Dirty Oerti hat geschrieben:
Xin hat geschrieben:Dann wünsche ich Dir viel Erfolg für's Abitur.
Danke schön :) Die erste Prüfung am Donnerstag (Englisch Grundkurs) ist schon geschafft.
Angst, das Abi nicht zu bestehen, besteht bei mir zum Glück nicht ^^
Und wenn schon... ich habe mein Abi damals auch nicht bestanden und aus mir ist auch niX geworden ;-)
Dirty Oerti hat geschrieben:
Xin hat geschrieben:Ich möchte mich aber gerne mal einlesen, vielleicht lasse ich mir das ganze von Dir mal zeigen.
Ich gebe das, was ich bisher zusammengetragen hab immer gerne weiter :)
Am liebsten ins Wiki, da kann es dann jeder lesen. Ist nur leider nicht immer so einfach das auch in eine verständliche Form zu bringen :)
Normal... aber wenn man das hinbekommt, dann hat man es auch verstanden.
Dirty Oerti hat geschrieben:
Xin hat geschrieben:Die PIDs müssen dann wiederverwertet werden?
Das könnte ich so machen, ich denke aber, dass das wahrscheinlich keine gute Idee ist.
Die PIDs sollten als EINDEUTIGE Identifikationsnummer erhalten bleiben.
Sprich ein Programm wird "extern" (also außerhalb des Kernels) nur per PID identifiziert, im Kernel wird das Programm über seine "Platznummer" angesprochen.
Damit hast Du natürlich eine weitere Sprungtabelle... aber das spielt ja nur eine Rolle, wenn Du von außen in den Kernel reinkommst.
Dirty Oerti hat geschrieben:
Xin hat geschrieben:Wenn Du Glück hast, machst Du die Grundausbildung und kommst dann an einen Computer (je nachdem wo Du sitzt).
Wenn der eine Internetverbindung hast, wirst Du viel Zeit zum Surfen haben.
Könnte sein. Bei der Marine mit Verwendungszweck "Navigation auf See" sieht es in der Richtung aber eher schlecht aus...
Ahhh... du hast Dir ein anderes Hobby für den Wehrdienst ausgesucht. Guter Plan, das klingt Spannender als in einem staubigen Militär-Büro Solitär zu spielen. ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten