Autor Thema: Positionen ?  (Gelesen 3793 mal)

Noobtotal

  • Beiträge: 54
    • Profil anzeigen
Gespeichert
« am: 27. July 2006, 15:14 »
Also ich hab mir nun für den PM mal überlegt, wie ich die Deskriptoren setze. Ich hab also mal gedacht. 1000-1FFF istder Kernel-Bereich, mehr als genug! 2000 -9000 ist der Stack 0 ist der Anfang wo ich dann GDT, IDT und so weiter reinschreibe. Ist diese Aufteilung sinnvoll? Der Bereich über 9000 soll später für Programme Module und Treiber und deren Stacks und andere Speicherungen bereitgestellt werden!

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 27. July 2006, 15:32 »
Sollen das lineare Adressen oder Segmente sein?

Wenn das lineare Adressen sind, ist das viel zu knapp bemessen. Der Kernel dürfte nach diesem Layout nur 1 Kilobyte groß sein.

Wenn das Segmente sind, dann solltest du sowas in linearen Adressen ausdrücken, denn diese Segmente gibt es nicht mehr im Protected Mode. Ich finde außerdem ein halbes Megabyte für den Stack etwas viel, wenn du nicht begründen kannst wofür du das brauchst ;)

Denk dran: Der Bereich von 0xA0000 bis 0xFFFFF (lineare Adressen!) steht dir nicht zur Verfügung. Ich würde den Bereich für Programme deswegen frühestens bei der linearen Adresse 0x100000 starten lassen, sonst musst du immer auf diese Lücke aufpassen.
Dieser Text wird unter jedem Beitrag angezeigt.

Noobtotal

  • Beiträge: 54
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 27. July 2006, 16:00 »
Lineare Adressen. Wie ist das:
    Kernel: 1000-7FFF
    Stack vom Kernel: 8000-9000
    Tabellen (GDT,IDT,usw.): 0-0FFF
    [/list:u]?
    Für jeden Bereich gibts einen passeneden Deskriptor.

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #3 am: 27. July 2006, 16:36 »
Zitat von: Noobtotal
Kernel: 1000-7FFF

edit: Ich würd keine feste Größe für den kernel erzwingen.  (btw. du könntest ruhig angeben, dass die Angaben ist hex sind ;) )

Zitat von: Noobtotal
Für jeden Bereich gibts einen passeneden Deskriptor.

Ich würd das nicht machen. Ich würd die Deskriptoren bei 0 beginnen lassen und bis zum ende des speichers gehen lassen. Dann brauchst nur 2 stück: einen dpl0 code und einen dpl0 data. Ich würd außerdem die GDT & IDT ins kerneldatensegment einbauen und nicht extra Platz irgendwo fest zu reservieren.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

Noobtotal

  • Beiträge: 54
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 27. July 2006, 19:08 »
Zitat von: bluecode
Zitat von: Noobtotal
Kernel: 1000-7FFF

edit: Ich würd keine feste Größe für den kernel erzwingen.  (btw. du könntest ruhig angeben, dass die Angaben ist hex sind ;) )

Zitat von: Noobtotal
Für jeden Bereich gibts einen passeneden Deskriptor.

Ich würd das nicht machen. Ich würd die Deskriptoren bei 0 beginnen lassen und bis zum ende des speichers gehen lassen. Dann brauchst nur 2 stück: einen dpl0 code und einen dpl0 data. Ich würd außerdem die GDT & IDT ins kerneldatensegment einbauen und nicht extra Platz irgendwo fest zu reservieren.


Ich meinete eigentlich eh, das es zu den von mir angegebenen Bereicheneinen Deskriptor gibt: Kernel und Stack.
Deskriptor im Kernel-Datensegment: Wär nett, wenn du mir dann einen Beispielcode gibst, wie ich dann die Deskriptoren später für Multitasking dynamisch anlegen soll!

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #5 am: 27. July 2006, 19:20 »
Entweder du drückst dich nur unverständlich aus, dann erklär doch bitte mal näher was du möchtest, oder du hast noch nicht so viel von pmode & deskriptoren verstanden, dann nochmal tutorials/intel docu lesen.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

Noobtotal

  • Beiträge: 54
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 28. July 2006, 13:25 »
Also, wenn ich Multitasking mache, möchte ich für jedes Programm drei Bereiche anlegen: Einen Hauptbereich wo das Programm hingeladen wird, einen Stack und einen frei benutzbaren Bereich. Da muss ich dann ja jedesmal 3 Deskriptoren anlegen, denn ich möchte ja nicht alle Programme wild durcheinander in einem einzelnen Deskriptor-Bereich haben. Das Kernel Datebnsegment zur Laufzeit verändern ist aber nicht so einfach! Ich könnte das natürlich auch über Paging lösen, also jedes Programm bekommt bestimmte Pages.

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #7 am: 28. July 2006, 14:24 »
Zitat von: Noobtotal
Also, wenn ich Multitasking mache, möchte ich für jedes Programm drei Bereiche anlegen: Einen Hauptbereich wo das Programm hingeladen wird, einen Stack und einen frei benutzbaren Bereich. Da muss ich dann ja jedesmal 3 Deskriptoren anlegen, denn ich möchte ja nicht alle Programme wild durcheinander in einem einzelnen Deskriptor-Bereich haben. Das Kernel Datebnsegment zur Laufzeit verändern ist aber nicht so einfach! Ich könnte das natürlich auch über Paging lösen, also jedes Programm bekommt bestimmte Pages.
Wechsle direkt zum Long-Mode (64 Bit Mode) und vergess Segmentierung. ^^

bitmaster
In the Future everyone will need OS-64!!!

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 28. July 2006, 14:26 »
Jop....Also ich würde nicht für jedes Programm jeweils 3 Deskriptoren anlegen. Erstens hast du dann das Problem mit dem Anlegen von Deskriptoren nicht und zweitens gibt es keine Probleme mit den Segment und Offset Adressen.

Ich würde nur einen Deskriptoren der für alle Tasks gilt (im Ring 3) und einen Deskriptoren für den Kernel (Ring 0) definieren.

Damit die Programme nicht quer durch den Speicher rasen gibt es ja neuerdings das Paging, was ja die Aufteilung des Speichers mittels Deskriptoren eigentlich abgelöst hat.


Also mein Tipp....Mach den PM einfach und dann wenn du besser im OS-Deven bist implementier Paging.
Nooooooooooos

 

Einloggen