Autor Thema: Merkwürdiges Problem  (Gelesen 7308 mal)

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« am: 06. February 2006, 19:26 »
Jetzt hab ich aber ein ganz sonderbares Problem:


Also, ich habe jetzt zwei Tasks. Jeder Task ist in einer eigenen Datei gespeichert. Jeder Task gibt einen Buchstaben aus. Aber je nachdem, welche Datei ich vor dem Ausführen des MakeFile zuletzt gespeichert wird, ist die Ausgabe anders.  :shock:  :?  :x
Also, anstatt dass der Buchstabe des 1. Tasks überschrieben und der Buchstaben des 2. Tasks ausgegeben wird, wird nur der Buchstaben des 1. Tasks ausgegeben.


Hier mein MakeFile:nasm -f bin -o boot.bin boot.asm
nasm -f bin -o starttask.bin starttask.asm
nasm -f bin -o kernel.bin kernel.asm
nasm -f bin -o task.bin task.asm
copy /B boot.bin + kernel.bin + starttask.bin + task.bin TriviaOS.img
OS.bxrc


Weiss jemand, was hier los ist ????


Gruss
Nooooooooos

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 06. February 2006, 19:47 »
Woher weiß der Kernel denn, an welcher Addresse im Image die Tasks liegen? Eigentlich kann das Problem nur bei Copy liegen.

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 06. February 2006, 20:12 »
Jede TaskDatei und der Kernel ist genau 4 KB lang. Kernel 0x8000, Task1 0x9000, Task2 0xA000

Aber komisch ist ja, dass das Resultat dann verändert wird, wenn eine andere zuletzt gespeichert wurde.

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 06. February 2006, 20:56 »
Ich denke, das kann nur an einem Problem mit copy liegen. Ich bin mir aber nicht ganz sicher, wie copy verwendet werden muss, ich glaube aber, man muss das /B vor jede Datei stellen. Das makefile scheint aber richtig zu sein.

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 06. February 2006, 21:24 »
Danke, jetzt gehts.

Gruss Noooooooos

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 11. February 2006, 12:03 »
Also, es geht nicht ganz. Nämlich dann, wenn ich diese zwei Tasks beide im Ring 3 laufen lassen, geht es nicht. Solange beide Tasks die selben Befehle enthalten, geht es. Ändere ich diese Befehle, geht kommt die 14. Exeption.
Wenn ich aber in einem Task eine doppelte Endlosschleife schreibe geht es wieder.

Ich versteh die Welt nicht mehr ?? :lol:  :o  :x  :twisted:

Gruss Noooooooos

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 11. February 2006, 12:11 »
Was hast du denn jetzt genau für ein Problem? In Ring0 funktionieren die Tasks, in Ring3 nicht? Wenn sie in Ring3 laufen gibts ne GPF? Das liegt dann warscheinlich an deinem Multitasking Code, würde ich mal annehmen.

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 11. February 2006, 12:13 »
Es geht nicht, wenn beide Tasks im Ring3 laufen.
Und wenn beide Tasks den selben Code haben, dann geht es auch.
Wenn es nicht geht, wandle ich die Endlosschleife in eine doppelte Endlosschleife um. - Es geht wieder.

Jeder Task löst einen INT in den Ring0 aus. Dieser INT ist in einer Endlosschleife. Diser Int beinhaltet jetzt aber noch nichts. Wenn ich jetzt bei einem Task den INT-Befehl auskommentiere gibts den Fehler.
Wenn ich den INT im Task nur ein einziges Mal ausführe, reicht das. Also kein Fehler.

Gruss Nooooooooos

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #8 am: 11. February 2006, 12:52 »
Zitat von: nooooooooos
Es geht nicht, wenn beide Tasks im Ring3 laufen.
Und wenn beide Tasks den selben Code haben, dann geht es auch.
Wenn es nicht geht, wandle ich die Endlosschleife in eine doppelte Endlosschleife um. - Es geht wieder.

Jeder Task löst einen INT in den Ring0 aus. Dieser INT ist in einer Endlosschleife. Diser Int beinhaltet jetzt aber noch nichts. Wenn ich jetzt bei einem Task den INT-Befehl auskommentiere gibts den Fehler.
Wenn ich den INT im Task nur ein einziges Mal ausführe, reicht das. Also kein Fehler.

Gruss Nooooooooos
hehe, solche Fehler liebe ich. Ich würde mir als erstes mal das Image mit einem Hexeditor anschauen, wie copy die zusammenkopiert hat. Dann würde ich schauen ob ich auch keine Ring0 befehle benutze. Dann würde ich schauen ob ich die Attribute im Desktiptor TSS und Daten, Code richtig gesetzt habe. Dann würde ich schauen.... Also habe ich das mit den endlosschleifen richtig verstanden? wenn du am ende ein "jmp $" machst geht es nicht, aber wenn du zwei "jmp $" machst geht es? Das wäre ja wirklich komisch. Ich hasse solche komischen Fehler.

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

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 11. February 2006, 13:29 »
Danke, der Tipp mit dem TSS war gut. Ich hatte da beim Ring0 Stack noch einen alten Wert drinn, nachdem ich das Paging bei den Tasks geändert hab.

Gruss
Nooooooooos

 

Einloggen