PrettyOS Fehler-/Testthread
-
Das track-weise Schreiben fehlt noch.
Zunächst Analyse read/write bei strg+s (screenshot to floppy):
Screenshot to Floppy (Thread)
> sectorRead: 19 <<<<<
> sectorRead: 19 <<<<<
> sectorRead: 19 <<<<<
> sectorRead: 19 <<<<<
> sectorRead: 19 <<<<<
> sectorWrite: 19 <<<<<
> sectorRead: 1 <<<<<
> sectorRead: 2 <<<<<
> sectorRead: 3 <<<<<
> sectorRead: 4 <<<<<
> sectorWrite: 1251 <<<<<
> sectorRead: 19 <<<<<
> sectorWrite: 19 <<<<<
> sectorRead: 19 <<<<<
> sectorRead: 1251 <<<<<
> sectorRead: 1251 <<<<<
> sectorWrite: 1251 <<<<<
> sectorWrite: 1252 <<<<<
> sectorWrite: 1253 <<<<<
> sectorWrite: 1254 <<<<<
> sectorWrite: 1255 <<<<<
> sectorWrite: 1256 <<<<<
> sectorWrite: 1257 <<<<<
> sectorWrite: 1258 <<<<<
> sectorWrite: 1259 <<<<<
> sectorWrite: 4 <<<<<
> sectorWrite: 13 <<<<<
> sectorRead: 19 <<<<<
> sectorWrite: 19 <<<<<Zur Orientierung: http://henkessoft.de/OS_Dev/Bilder/FAT1_FAT2_Root.PNG
Schaut man sich diesen Ablauf an, so erkennt man noch Optimierungspotenzial:
- Warum wird sector 19 fünf Mal nacheinander gelesen?
- Warum wird sector 1251 doppelt gelesen?Erforderliche Schreibvorgänge:
3 nach root dir (Name, erster Cluster, Größe)
9 nach data (4098 byte)
1 nach FAT1
1 nach FAT2Warum doppelt nach sector 1251 geschrieben wird, ist nicht klar.
-
BL2-Problem beim Laden des Kernels bei PCs von MrX:
<MrX>So, ich hab den Fehler bei mir sehr genau eingrenzen können.
<MrX>Er gerät in eine Endlosschleife (.COPY_TO_DEST in ReadSectors (Fat12.inc)), und zwar bei dem ersten Leseaufruf der .LOAD_IMAGE-Schleife in LoadFile (Fat12.inc)
<MrX>Herausgefunden durch Debugausgaben: Ein print direkt vor der Schleife erscheint, eines direkt danach nicht.Quelle: IRC://irc.euirc.net/#prettyos
.SUCCESS: pop bx mov edi, ebx ; copy to destination buffer mov cx, WORD [BytesPerSec] shr cx, 1 xor si, si .COPY_TO_DEST: mov ax, [es:si] mov [fs:edi], ax add si, 2 add edi, 2 loop .COPY_TO_DEST
-
fformat geht nicht mehr.
-
Hast Recht, ich kümmer mich drum. (Fehler ist im floppytreiber)
-
Hab "Probleme" beim Kompilieren gefunden:
nasm -Ox -f bin stage2_bootloader/boot2.asm -Istage2_bootloader/ -o stage2_bootloader/BOOT2.BIN gdt.inc:32: warning: signed byte value exceeds bounds
Geht aber trotzdem weiter. Ist das bei euch auch so?
TIA
CuervoEDIT:
Nach Update von nasm 2.08 auf nasm 2.09.04 geht es wieder ohne Probleme..
-
So, hab heute mal PrettyOS in Parallels Desktop 6 getestet. Mag ja sein, dass es für graphische OS gedacht ist, aber ich dachte mir, ich könnte es ja mal versuchen. Es trat folgender Fehler auf:
http://prettyos.fanofblitzbasic.de/mem.png
Zur Erklärung: Eigentlich müsste statt "Continuing anyway..." dort "OS halted!" stehen, aber ich habe die Endlosschleife danach auskommentiert.
(Maustreiber geht sogar^^)Kann mir jemand erklären, was da genau passiert?
Das ist bisher das erste Mal, dass das passiert, kann man nicht einfach den Speicher an der Stelle vorher einmal leeren? Ich weiß, das ist nicht wichtig, aber wenn es doch mal woanders passiert?
TIA
Cuervo
-
Gute Idee im Chat:
<MrX>Wir brauchen ein Testprogramm
<MrX>Ein Userprogramm (test.elf), dass verschiedene Dinge austestet.
<ehenkes>Das ist eine hervorragende Idee
<ehenkes>Dann sehen wir auch, wo wir noch User-Kernel-Barrieren haben(Doku hier, damit sie nicht verloren geht)
-
<ehenkes><Pretty00001>1234567 sieben zeichen gehen
<ehenkes>bei 12345678 (Eingabe) bleibt das User-Programm hängen.
<ehenkes>Ich baue auf dich, denn für networking benötigen wir das funktionsfähig
<ehenkes>ich verwende qemu 0.14.1, spielt das eine rolle?
<MrX>ich denke nein.
<ehenkes>hardwaretest notwendig?
<ehenkes>ich teset einfach mal
<MrX>Ich werde gets mal gezielt testen, wenn ich Zeit habe.
<ehenkes>re
<ehenkes>wenn man irc eingibt, wird hello.elf angezeigt, z.T. auch absturz beim laden
<ehenkes>was Cuervo auch sagte
<ehenkes>merkwürdiges verhalten bei der floppy
<ehenkes>aber absturz nur ab und zu
<ehenkes>zur Zeit komme ich über SYN_SENT nicht raus, der IRC server mag mich nicht mehr ^^
<ehenkes>MrX: schau bitte auch mal nach dieser merkwürdigen anzeige der falschen datei beim von floppy laden
<ehenkes>das war früher nicht
<ehenkes>hab eben browser eingegeben, da lädt er rasend schnell
<ehenkes>auch keine komischen anzeigen falscher files
<ehenkes>bei starwars lädt er etwas klänger, aber auch sehr schnell, keine fehlanzeigenStand bei rev. 1022
Leider haben wir inzwischen einige kleine Schwächen im OS.
Auch Abstürze, freezes.Nach Neuformatieren der Floppy und laden von irc.elf kommt kein hello.elf, dafür aber absturz.
-
event_poll <--- fehler bezüglich task / task->parent (MrX behebt dies demnächst)
-
Habe heute starwars geöffnet,
plötzlich, während des Vorspanns ist folgendes passiert:Über serielle Konsole wurde "invalid ack - drop!!!" ausgegeben (mehrfach) und starwars war stehengeblieben. Habe mit ESCape beendet und folgendes Bild war zu sehen:
-
Eine interessante Möglichkeit ist der stack backtrace bei einem Pagefault:
http://www.henkessoft.de/OS_Dev/Bilder/PF_backtrace_stack.PNG
Damit kann man die betroffene Funktion und den vorherigen Verlauf ausreichend genau lokalisieren.
-
Cuervo meldet im chat folgende notwendige Korrekturen/Ergänzungen an:
1. EVENT_TCP_CLOSED sollte sofort ausgelöst werden, wenn die Verbindung ESTABLISHED verlässt, nicht erst, wenn sie gelöscht wird (<--- erledigt)
2. Wir brauchen EVENT_TCP_CONNECTION_FAILED (<--- timeout bitte im user-prg)
3. fopen() soll keine Ausgaben erzeugen (<--- erledigt)
4. Es ist definitiv ein Fehler im Floppytreiber (error 34 und seek error)
5. Fehler in PCI ? (häufiger durchlauf der for-schleife in function)
-
Fehler im Floppytreiber auf real PCs:
Wenn man, ausserhalb des bootloaders, von Diskette lesen will, tauchen folgende Meldungen auf (Beispiel mit fdir, gleiches Verhalten beim Laden von Programmen):
Bild: http://prettyos.fanofblitzbasic.de/flp2.jpg
Vergrößerung: http://prettyos.fanofblitzbasic.de/flp1.jpg
-
Fehler des Tages:
Unsere pow-Implementation gibt falsche Werte für negative Exponenten zurück.
-
Warum der Fehler auftritt, ist zwar nicht geklärt, aber es lässt sich mit diesem Workaround beheben:
if(exponent < 0.0) return 1.0 / (isOdd * pow2x(yMulLog(base,-exponent))); else return isOdd * pow2x(yMulLog(base,exponent));