Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Themen - s137

Seiten: [1]
1
Lowlevel-Coding / Paging Probleme
« am: 30. June 2015, 23:22 »
Hallo zusammen,

jetzt war ich lange nicht mehr hier und hab mein Betriebssystemprojekt ein bisschen schleifen lassen.

Ich bin damals an Teil 9 des Tutorials gescheitert, dem Paging. An sich eine einfache Sache, wenn da nicht die ganzen Verständnisprobleme wären.
Mein Problem ist hauptsächlich dass ich nicht mehr durchblicke ab dem Zeitpunkt wo nur noch virtuelle Adressen verwendet werden können, wo also Paging eingeschaltet ist.

Ab da muss ich ja immer wenn ich einen Kontext erstelle und diesen dann ansprechen will um zum Beispiel etwas darin zu mappen, seine virtuelle Adresse haben. Die existiert ja aber noch nicht wenn ich ihn grade erstellt habe, also muss ich den Kontext irgendwie temporär mappen. Und da komme ich nichtmehr weiter. Zu viele verschiedene Kontexte und Pagedirectorys. Was ich jetz bräuchte wäre ein kleines Beispiel wie ich das in Code umsetze, also dass ich einen Kontext temporär in den aktuellen mappe und darauf zugreife.

Ich wäre sehr sehr dankbar wenn mir das jemand zeigen könnte, an dem Problem häng ich nämlich jetzt schon viel zu lange, und vermutlich ist es ganz einfach und ich seh den Wald vor lauter Bäumen nicht.

Viele Grüße und schonmal Danke im Vorraus
s137
2
Lowlevel-Coding / Verständnisfrage zu Paging
« am: 03. December 2014, 19:04 »
Hallo zusammen,

Ich hätte eine Verständnisfrage bezüglich Paging. Das Tutorial lässt da ja noch einiges offen. Ich habe jetzt mal wie im Tutorial Paging sehr dürftig aufgesetzt und aktiviert. Wenn ich jetzt einen neuen Task starte ruft mein Kernel aber immernoch die pmm_alloc() Funktionen auf um Speicher für den Stack zu bekommen. Jetzt denke ich mal sollte ich eine vmm_alloc() erstellen die ersteinmal mit pmm_alloc() eine physische Speicherseite besorgt und mir dann deren Adresse in das Pagedirectory des Tasks einträgt und dann die Virtuelle Adresse zurückgibt. Sehe ich das schonmal richtig?

Nur wie genau mach ich das dann mit der Vergabe der Virtuellen Adressen, ich kann ja nicht einfach immer irgendeine Adresse hernehmen, da muss ja irgendein System dahinter sein.

s137
3
Hallo zusammen,

Ich habe mittlerweile ein externes Testprogramm als flache Binary geschrieben und auch entsprechend als Mutlibootmodul geladen. Nur sobald ich mit dem im Tutorial gegebenen Code den Task (also das Multiboot Modul, sprich das externe Tetsprogramm) initialisieren möchte und danach die Hardwareinterrupts aktiviere, bekomme ich sofort nach der Aktivierung, einen Tastaturinterrupt, bei dem ich im Interrupthandler bisher nur eine kleine Infoausgabe definiert habe. Ich habe noch keine Keyboardtreiber und habe auch die Tastatur noch in keinster Weise aktiviert. Wie kann ich dann einen Tastaturinterrupt bekommen?

Vielen Dank schonmal für eure Hilfe
s137
4
Hallo zusammen,

Bei der Programmierung der physikalischen Speicherverwaltung ( in Form einer Bitmap) für meinen Kernel, bin ich auf folgendes Problem gestoßen:

Wenn ich Speicher für ein Programm freigeben will, suche ich ja nach einem gesetzten Bit ( frei = 1 ) in der Bitmap, und gebe dann die Adresse zurück. Jedoch ist dass dann ja nur ein Speicherblock mit 4kB. Was wenn mein Programm mehr Speicher benötigt? Und wie kann ich herausfinden wieviel Speicher mein Programm überhaupt benötigt?

Schon mal vielen Dank im Vorraus
s137
5
Lowlevel-Coding / Probleme mit Interrupts/Exceptions
« am: 03. November 2014, 20:07 »
´Hallo zusammen,

Ich habe ein Problem bezüglich Interrupts/Exceptions und bin leider trotz sorgfäliger Analyse noch nicht dahinter gekommen wo genau mein Fehler liegt.

Ich habe eine Datei "idt.c" (siehe Anhang) in der (vlt noch etwas unsauber) meine Funktionen zum Laden und zur Initialisierung der IDT und die Funktionen zum Interrupthandling liegen.

Außerdem habe ich eine Datei "isr.S" (ebenfalls im Anhang) in der in Assemblercode die ISR's liegen.

Mein Problem ist jetzt dass ich nachdem ich in der "init.c" die GDT und die IDT initialisiert, sowie den PIC konfiguriert habe versuche testweise mit asm volatile("int $0x01"); die Exception Nr. 1 herbeizuführen, jedoch wird meine isr zur behandlung dabei nicht aufgerufen, die Exception also nicht behandelt -> Triple Fault -> Neustart des Rechners..

Die einzige Exception die ich fehlerfrei herbeiführen kann ist Nr. 0, dabei wird dann mein Handler aufgerufen und die Exception bearbeitet.

Schon mal Vielen Dank im Vorraus
s137

P.S. Einen Fehler der GDT kann ich ausschließen, diese habe ich schon seperat getetet.
Seiten: [1]

Einloggen