Autor Thema: Symbol Table durchsuchen  (Gelesen 17197 mal)

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #20 am: 14. January 2011, 18:34 »
Du sollst ihn ja auch nicht kopieren. ;-)
Was PNoob sagen möchte, ist, dass du in jedem Prozess an der gleichen Stelle im Adressraum den gleichen Kernel-Code finden musst.

PNoob

  • Beiträge: 106
    • Profil anzeigen
    • Mein Blog
Gespeichert
« Antwort #21 am: 14. January 2011, 18:40 »
mappen != kopieren. wenn du den Kernel an 1 MB linkst. dann muss der Kernel, der gesammte kernel, auch in jedem Pagedir an 1 MB gemappt sein.

PNoob

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #22 am: 14. January 2011, 21:28 »
Du solltest mal davon ausgehen, dass das so ist. Alles andere wäre ziemlich kompliziert, und würde sich früher bemerkbar machen.
Dieser Text wird unter jedem Beitrag angezeigt.

Beatkiller

  • Beiträge: 17
    • Profil anzeigen
Gespeichert
« Antwort #23 am: 15. January 2011, 12:16 »
Ok, jetzt habe ich das verstanden:

Ja, das ist so. Bei der Inialisierung des Paging wird der Kernel-Code als reserviert in das Paging-Directory "kernel_directory" eingetragen. Davon wird ein Clone erzeugt und in "current_directory" eingetragen. Alle neuen Tasks linken das Kernel-Directory in ihren Adressraum und erzeugen einen für sie privaten Stack, bei dem alles aus current_directory gecloned wird, was <nicht> kernel_directory ist. So habe ich es aus dem Tutorial übernommen. Das ist prinzipiell auch das, was im LowLevel-Wiki zum Thema Multitasking umgesetzt werden sollte.

Grundsätzlich unterscheidet sich nur der Code, das Prinzip scheint für mich das gleiche zu sein.

Hier mal ein schönes Bild dazu (ich hoffe, ich darf das verlinken):


Warscheinlich habe ich irgendwo unachtsam Code übernommen, ohne darüber nachzudenken. Ich mach es jetzt so:

Ich stelle mein Backup vor der Implementierung des Multitasking wieder her (der lief mit Paging nämlich) und fange dort noch mal an. Grundsätzlich hätte mich trotzdem interessiert, was ich falsch gemacht habe.

Zum eigentlichen Thema des Threads:
Leider bin ich bei der Implementierung des Auslesens der Symbol-Tabelle noch nicht weiter gekommen, ist wohl noch etwas zu früh, da fehlt mir noch das entscheidende Wissen. Ich werde das aber noch versuchen umzusetzen. Wenn ich erfolgreich war, möchte ich den Code gern allen interessierten zur Verfügung stellen. Vielen Dank erstmal für eure Geduld einem Newbie gegenüber :-)

Grüße

PNoob

  • Beiträge: 106
    • Profil anzeigen
    • Mein Blog
Gespeichert
« Antwort #24 am: 15. January 2011, 12:54 »
Ich verstehe noch nicht ganz was du immer mit dem Stack und mit linken meinst. Der Stack hat mit Paging nichts zu tun. Und linken tut man auch nichts. Les dir am besten mal den teil 9 des OS-DEV für einsteiger Tuts durch und den Artikel zum Paging. vielleicht meinst du das richtige aber benutzt die falschen Begriffe, das würde sich aber durch lesen der Artikel klären lassen. Und prüfe die Flags für die nötigen Pages. und was genau meinst du mit reserved?

PNoob

Beatkiller

  • Beiträge: 17
    • Profil anzeigen
Gespeichert
« Antwort #25 am: 15. January 2011, 17:51 »
Ok, ich versuch es noch mal:

Der Kernel selbst bekommt natürlich auch Pages, um das Mappen von virtuellen Adressen auf physikalische zu ermöglichen. Bei der Initialisierung wird vom Anfang (0) bis zum Ende des Kernels (dort Placement-Adresse genannt) in 4K-Blöcken geschleift. Dabei werden die Anfangs-Adressen der 4K-Blöcke in einem Paging-Directory (kernel_directory) eingetragen. Durch das setzen eines entsprechenden Bits innerhalb einer Bitmap (Frame) wird gekennzeichnet, das dieser physikalische Speicher einer Page zugeordnet wurde (reserviert). Ich gebe zu, dass das Wort sehr unglücklich gewählt ist, weil die CPU bereits reservieren kann (Bit 4 im error code bei einem Page fault), aber das hat mit unserem Begriff nichts zu tun - gemappt ist da viel besser.

Mit linken meine ich in diesem Falle, das die Adresse kopiert wird, anstatt der Inhalt - oder kurz, der Pointer auf die Page-Tables wird übernommen, sowie die physikalische Adresse der Page-Tables kopiert.

Ich hoffe, das war jetzt richtig ausgedrückt.

Aber ich lese mir bereits beide Artikel durch, um in Zukunft die richtigen Begrifflichkeiten zu verwenden, und natürlich um zu schauen, ob ich alles bisher richtig verstanden habe. Danke für das schonungslose korrigieren meiner Sicht auf diese Dinge - bitte weiter so :-)

Grüße

 

Einloggen