Kernelprogrammierung - Suche: Ansätze für Speicherverwaltung

Low-Level-Programmierung und Experimenteller Kernel; Ansprechpartner: Dirty Oerti
Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Kernelprogrammierung - Suche: Ansätze für Speicherverwaltung

Beitrag von Dirty Oerti » Di Jul 29, 2008 6:04 pm

Tag! :)

Denkt nicht, ich wäre untätig gewesen: Es gibt jetzt mal wieder ein kleines Update über den Projektstand:

Neu dazugekommen ist jetzt der physikalische MemoryManager.
Er arbeitet mit Hilfe einer (wirklich kleinen) Bitmap, um einen schnellen Zugriff auf diesen Speicherbereich zu gewähren.
Bis jetzt wird folgendes gemacht:

Beim booten wird eine Bitmap erstellt und Null gesetzt. Darauf hin wird die Größe des Kernels selbst ermittelt und die Pages, die er braucht und als benutzt markiert (bzw in der Theorie). Markiert wird noch nichts, da die Funktion bisher nur prüft, ob der Speicher frei ist und anschließend die Pageaddresse zurückgibt.

Ansonsten gab es eine kleine Änderung im "Design" (bei booten).

Und das Linkerskript enthält nun Markierungen für Start und Ende des Kernels. Notwendig, um die Größe des Kernels im Speicher festzustellen.

Ich wäre wie immer sehr erfreut darüber, wenn jemand den Kernel testen möchte :)

MfG
Daniel
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
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Kernelprogrammierung - Suche: Ansätze für Speicherverwaltung

Beitrag von Kerli » Di Jul 29, 2008 11:41 pm

Es wird ja schon langsam. So schaut es gleich viel besser aus ;)
Wenn die General Protection Fault Exception beabsichtigt ist, dann funktioniert es...
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

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

Re: Kernelprogrammierung - Suche: Ansätze für Speicherverwaltung

Beitrag von Dirty Oerti » Do Jul 31, 2008 1:52 pm

Kerli hat geschrieben:Es wird ja schon langsam. So schaut es gleich viel besser aus ;)
Wenn die General Protection Fault Exception beabsichtigt ist, dann funktioniert es...
Langsam wirds..ja. Aber ist noch (sehr) viel zu tun..

Die General Protection Fault Exeption ist durchausbeabsichtigt.
Hinter dieser würde auch noch mal eine Division durch 0 kommen..^^

Ist eigntl nur eingebaut, um mal die ISR (Interrupt Service Routinen) zu testen.
Im Moment wird bei einem Fehler ja noch die CPU in eine Endlosschleife geschickt. (Deswegen bitte nicht laufen lassen und Kaffee trinken gehen, wenn dir eine Exeption angezeigt wird, sonst raucht die CPU evtl ab. Natürlich nur, wenn du's länger laufen lässt.)

Den Memory Manager hab ich nun schon ein paar mal überarbeiten müssen, die aktuelle Version (die jetzt, im Gegensatz zur alten auch funktionieren würde) lade ich gleich hoch.

Hab außerdem schon mal eine "Optimierung" vorgenommen. Die Bitmap wird nun nicht mehr char-Weise überprüft, sondern immer 32 Bit ( 4 Chars). Das kann die CPU auf einmal erledigen.
=> 4 mal schneller als wenn nur ein Char überprüft werden würde.

MfG
Daniel
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
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Kernelprogrammierung - Suche: Ansätze für Speicherverwaltung

Beitrag von Kerli » Do Jul 31, 2008 5:11 pm

Dirty Oerti hat geschrieben: Langsam wirds..ja. Aber ist noch (sehr) viel zu tun..
Das kann ich mir vorstellen. Für ein vollständiges Betriebssystem ist einiges zum Tun.
Dirty Oerti hat geschrieben: Die General Protection Fault Exeption ist durchausbeabsichtigt.
Hinter dieser würde auch noch mal eine Division durch 0 kommen..^^
Ich hab mich schon gewundert, weil es ist eh ein Kompilerfehler wegen einer Division durch Null gekommen...
Dirty Oerti hat geschrieben: Ist eigntl nur eingebaut, um mal die ISR (Interrupt Service Routinen) zu testen.
Im Moment wird bei einem Fehler ja noch die CPU in eine Endlosschleife geschickt. (Deswegen bitte nicht laufen lassen und Kaffee trinken gehen, wenn dir eine Exeption angezeigt wird, sonst raucht die CPU evtl ab. Natürlich nur, wenn du's länger laufen lässt.)
Keine Sorge, so toll, dass ich es länger verwenden würde ist es auch noch nicht :P
Dirty Oerti hat geschrieben: Den Memory Manager hab ich nun schon ein paar mal überarbeiten müssen, die aktuelle Version (die jetzt, im Gegensatz zur alten auch funktionieren würde) lade ich gleich hoch.

Hab außerdem schon mal eine "Optimierung" vorgenommen. Die Bitmap wird nun nicht mehr char-Weise überprüft, sondern immer 32 Bit ( 4 Chars). Das kann die CPU auf einmal erledigen.
=> 4 mal schneller als wenn nur ein Char überprüft werden würde.
Das ist immer gut, wenn solche grundlegenden Dinge schnell sind.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

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

Re: Kernelprogrammierung - Suche: Ansätze für Speicherverwaltung

Beitrag von Dirty Oerti » Do Jul 31, 2008 6:53 pm

Kerli hat geschrieben:
Dirty Oerti hat geschrieben: Langsam wirds..ja. Aber ist noch (sehr) viel zu tun..
Das kann ich mir vorstellen. Für ein vollständiges Betriebssystem ist einiges zum Tun.
Ja, ich bin erstmal froh, wenn Multitasking und Speichermanagement funktioniert.
Wenn das mal funktioniert wende ich mich dem Laden von Programmen zu.
Denke ich mal. Mal gucken, vllcht ist es sinnvoller was anderes erst zu tun.
Kerli hat geschrieben:
Dirty Oerti hat geschrieben: Ist eigntl nur eingebaut, um mal die ISR (Interrupt Service Routinen) zu testen.
Im Moment wird bei einem Fehler ja noch die CPU in eine Endlosschleife geschickt. (Deswegen bitte nicht laufen lassen und Kaffee trinken gehen, wenn dir eine Exeption angezeigt wird, sonst raucht die CPU evtl ab. Natürlich nur, wenn du's länger laufen lässt.)
Keine Sorge, so toll, dass ich es länger verwenden würde ist es auch noch nicht :P
:D Kann ich voll und ganz nachvollziehen...naja...wobei..es hat doch was für sich, auf ein paar Textzeilen zu starren^^ Man wird nicht zu nervigen Problemen (Programmabsturz, etc) gefragt....ins Internet kommt man auch nicht...also schonmal keine nervigen Popups und keine Viren....^^
Kerli hat geschrieben:
Dirty Oerti hat geschrieben: Den Memory Manager hab ich nun schon ein paar mal überarbeiten müssen, die aktuelle Version (die jetzt, im Gegensatz zur alten auch funktionieren würde) lade ich gleich hoch.

Hab außerdem schon mal eine "Optimierung" vorgenommen. Die Bitmap wird nun nicht mehr char-Weise überprüft, sondern immer 32 Bit ( 4 Chars). Das kann die CPU auf einmal erledigen.
=> 4 mal schneller als wenn nur ein Char überprüft werden würde.
Das ist immer gut, wenn solche grundlegenden Dinge schnell sind.
Ja...wobei das nutzen alle Systeme. Bzw alle Systeme, die mit einer Bitmap arbeiten.

Ich plane ja eine Mischung aus Bitmap und Liste/Header-System. Weiß nur noch nicht so genau, wie ich das dann zusammenführe (Wie ich entscheiden lasse, ob der Speicher aus der Bitmap geholt wird oder aus der Liste)
Aber auch das bekomm ich noch hin^^


Ich kann jetzt für heute endlich mal weitermachen...hatten die ganze Zeit Gewitter...und dann müssen die Computer aus sein...

MfG
Daniel
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
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Kernelprogrammierung - Suche: Ansätze für Speicherverwaltung

Beitrag von Dirty Oerti » Fr Aug 01, 2008 9:59 am

Ok, der physikalische Memory Manager tut seinen Dienst.
Zumindest, wenn man meinen bisherigen Tests glauben darf.

:)

Kurze Infos dazu:

Es existieren 2 Funktionen, "kbm_alloc_page()" und "kbm_free_page(void* page_address)".
Wozu sie dienen dürfte klar sein.
Was ich aber noch ändern möchte:

Es ist derzeit sehr gefährlich....gibt man z.B. bei kbm_free_page die Adresse einer freien Page an, so verschiebt sich doch recht viel vom System (32 Pages). Abhilfe möchte ich dadurch schaffen, dass das "Unsetzen" der Bits, die anzeigen, ob eine Page frei ist oder nicht, nicht mehr, wie jetzt, durch Subtraktion, sondern binär gelöst wird.

Dadurch begrenze ich den "beschädigten Raum" bei einem Fehler wie oben schonmal auf eine Page.
Keine Page wär mir natürlich am liebsten...
Um das zu erreichen müsste ich aber eine Sicherheitsabfrage einbauen, die natürlich Zeit kostet und dadurch zu starken Performanceverlusten führt.

Wenn jemand weiß, wie ich folgendes löse, wäre ich ihm/ihr sehr dankbar:

Man hat binär 00101111011.
Nun möchte man Bit 0 Null setzen.

Dazu kann man ja so vorgehen: 0b00101111011 - 2hoch0 = 0b00101111010

Sieht die binäre Zahl jedoch so aus: 0b00101111010
Und man ruft nun wieder obige Funktion auf und setzt Bit 0 auf Null, kommt dabei folgendes heraus:

0b00101111010 - 2hoch0 = 0b00101111001
(Bit 1 wurde auch mit verändert und Bit 0 ist jetzt gesetzt, was nicht das Ziel war)
Erwünscht wäre gewesen: 0b00101111010 => 0b00101111010
(da das Bit 0 ja schon auf 0 steht.)

Hätte man eine Änderung an einem höheren Bit vorgenommen, wären auch alle darunter liegenden verändert. Also noch mehr als hier.

Wie macht man das?
Ein Bit 0 setzen, und zwar so, dass nur das eine Bit bearbeitet wird und falls es schon auf 0 steht, es auch auf 0 gelassen wird?


MfG
Daniel
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
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Kernelprogrammierung - Suche: Ansätze für Speicherverwaltung

Beitrag von Kerli » Fr Aug 01, 2008 10:15 am

Dirty Oerti hat geschrieben:Wie macht man das?
Ein Bit 0 setzen, und zwar so, dass nur das eine Bit bearbeitet wird und falls es schon auf 0 steht, es auch auf 0 gelassen wird?
Mit dem binären Operationen & und ~:
0b00101111010 & ~2hoch0 = 0b00101111010

Code: Alles auswählen

  0b00101111010
& 0b11111111110
---------------
  0b00101111010
Das setzt das gewünschte Bit sicher auf 0 auch wenn es schon 0 ist.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

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

Re: Kernelprogrammierung - Suche: Ansätze für Speicherverwaltung

Beitrag von Dirty Oerti » Fr Aug 01, 2008 10:20 am

Kerli hat geschrieben: Mit dem binären Operationen & und ~:
0b00101111010 & ~2hoch0 = 0b00101111010

Code: Alles auswählen

  0b00101111010
& 0b11111111110
---------------
  0b00101111010
Das setzt das gewünschte Bit sicher auf 0 auch wenn es schon 0 ist.
Danke! Das ist super!

Um das Bit auf diese Weise sicher zu setzen (auch wenn es schon gesetzt ist), muss ich einfach nur "oder" nehmen, oder? Also ohne "invertieren"..?
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
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Kernelprogrammierung - Suche: Ansätze für Speicherverwaltung

Beitrag von Kerli » Fr Aug 01, 2008 10:34 am

Dirty Oerti hat geschrieben:
Kerli hat geschrieben: Mit dem binären Operationen & und ~:
0b00101111010 & ~2hoch0 = 0b00101111010

Code: Alles auswählen

  0b00101111010
& 0b11111111110
---------------
  0b00101111010
Das setzt das gewünschte Bit sicher auf 0 auch wenn es schon 0 ist.
Danke! Das ist super!
Bitte ;) Das kann man auch super zum Speichern von Flags zb in einem Integer verwenden.
Dirty Oerti hat geschrieben: Um das Bit auf diese Weise sicher zu setzen (auch wenn es schon gesetzt ist), muss ich einfach nur "oder" nehmen, oder? Also ohne "invertieren"..?
Genau, und zum invertieren eines Bits kannst du 'xor' ohne invertieren nehmen.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

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

Re: Kernelprogrammierung - Suche: Ansätze für Speicherverwaltung

Beitrag von Dirty Oerti » Fr Aug 01, 2008 10:48 am

Danke! :)
ist schon eingebaut und funktioniert super.
Könnte das evtl auch schneller sein, als die Methode mit + und - ..?
*Optimiersüchtig^^*

Der physikalische Memory Manager (Bitmap) ist damit also fertig. Ein paar kleine Änderung bei den Rückgabetypen könnte es aber evtl noch geben.

Ansonsten steht dann jetzt entweder der virtuelle Memory Manager oder der physikalische für den restlichen Speicher auf dem Programm.

Wobei das Wochenende kann ich nicht dran arbeiten...

MfG
Daniel
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.

Antworten