Kernelprogrammierung - Suche: Ansätze für Speicherverwaltung
- 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
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
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.
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.
Re: Kernelprogrammierung - Suche: Ansätze für Speicherverwaltung
Es wird ja schon langsam. So schaut es gleich viel besser aus
Wenn die General Protection Fault Exception beabsichtigt ist, dann funktioniert es...
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
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
- 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
Langsam wirds..ja. Aber ist noch (sehr) viel zu tun..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...
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.
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.
Re: Kernelprogrammierung - Suche: Ansätze für Speicherverwaltung
Das kann ich mir vorstellen. Für ein vollständiges Betriebssystem ist einiges zum Tun.Dirty Oerti hat geschrieben: Langsam wirds..ja. Aber ist noch (sehr) viel zu tun..
Ich hab mich schon gewundert, weil es ist eh ein Kompilerfehler wegen einer Division durch Null gekommen...Dirty Oerti hat geschrieben: Die General Protection Fault Exeption ist durchausbeabsichtigt.
Hinter dieser würde auch noch mal eine Division durch 0 kommen..^^
Keine Sorge, so toll, dass ich es länger verwenden würde ist es auch noch nichtDirty 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.)
Das ist immer gut, wenn solche grundlegenden Dinge schnell sind.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.
"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
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
- 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
Ja, ich bin erstmal froh, wenn Multitasking und Speichermanagement funktioniert.Kerli hat geschrieben:Das kann ich mir vorstellen. Für ein vollständiges Betriebssystem ist einiges zum Tun.Dirty Oerti hat geschrieben: Langsam wirds..ja. Aber ist noch (sehr) viel zu tun..
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.
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:Keine Sorge, so toll, dass ich es länger verwenden würde ist es auch noch nichtDirty 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.)
Ja...wobei das nutzen alle Systeme. Bzw alle Systeme, die mit einer Bitmap arbeiten.Kerli hat geschrieben:Das ist immer gut, wenn solche grundlegenden Dinge schnell sind.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.
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.
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.
- 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
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
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.
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.
Re: Kernelprogrammierung - Suche: Ansätze für Speicherverwaltung
Mit dem binären Operationen & und ~: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?
0b00101111010 & ~2hoch0 = 0b00101111010
Code: Alles auswählen
0b00101111010
& 0b11111111110
---------------
0b00101111010
"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
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
- 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
Danke! Das ist super!Kerli hat geschrieben: Mit dem binären Operationen & und ~:
0b00101111010 & ~2hoch0 = 0b00101111010
Das setzt das gewünschte Bit sicher auf 0 auch wenn es schon 0 ist.Code: Alles auswählen
0b00101111010 & 0b11111111110 --------------- 0b00101111010
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.
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.
Re: Kernelprogrammierung - Suche: Ansätze für Speicherverwaltung
Bitte Das kann man auch super zum Speichern von Flags zb in einem Integer verwenden.Dirty Oerti hat geschrieben:Danke! Das ist super!Kerli hat geschrieben: Mit dem binären Operationen & und ~:
0b00101111010 & ~2hoch0 = 0b00101111010
Das setzt das gewünschte Bit sicher auf 0 auch wenn es schon 0 ist.Code: Alles auswählen
0b00101111010 & 0b11111111110 --------------- 0b00101111010
Genau, und zum invertieren eines Bits kannst du 'xor' ohne invertieren nehmen.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"..?
"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
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
- 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
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
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.
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.