Autor Thema: Seltsammes Verhalten meines Laptops bei schleifen...  (Gelesen 7780 mal)

B.G.

  • Beiträge: 27
    • Profil anzeigen
Gespeichert
Also, letztens dachte ich mir ich könnte ja mal ausprobieren wo mein Kernel denn mitlerweile schon überall läuft. Auf dem PC Meiner Schwester (386 450MH 128MB Ram) läuft das ganze ohne Probleme. Auf meinem 686er läuft es nicht, wobei ich damit auch nicht wirklich gerechnet habe. Dann dachte ich mir ich könnte es mir auf meinem Laptop anshene (268? 386? kA. 333MH 32MB Ram), und ich musste zu meiner wirklichen verwunderung feststellen das es nicht lief. Nach langem rumprobieren kam ich darauf das es ab der Console nicht mehr lief, das hiese IDT und das Zeug läuft (Bildschirmausgabe auch). Wenn ich den Befehl zum starten der Console ausklammere läuft es. Also wollte ich mal eben ne billig Konsole erstellen und bemerkte das es nicht an der Konsole lag sondern an der Schleife. Ich habe bisher immer

while(1==1)
{

}

verwendet, doch auch bei

for(;;)
{

}

funktioniert nichts. Das Teil zeigt mir (meinen selbstentwickelten BlueScreen) an und zwar mit isr13 (ist afaik "Page-Fault"). Seltsammerweise hab ich aber garkein Paging drin. Hatte jemand von euch schon mal so ein Problem?

DDR-RAM

  • Beiträge: 184
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 11. May 2005, 19:19 »
13 ist general protection fault, kann alles mögliche sein,
wie lautet der Error Code?

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 11. May 2005, 20:14 »
Zitat von: B.G.
[schnipp] (386 450MH 128MB Ram)  [schnipp] 686er [schnipp] (268? 386? kA. 333MH 32MB Ram)

Ähm... die Angaben sind verhaun.
8088/8086 => ab 1981 gebaut, 4.7 bis 8.16 Mhz
80188/80186 => weiss ich nicht recht
286er => so um 1987 rum gebaut, zwischen 8 und 16 Mhz
386er => der wurde nach dem 286er gebaut, lief meist mit
16 bis auch 33 mhz
486er => so um '93 gabs den, lief bis max 50 mhz, mit
taktverdopplung/-dreifachung (486dx/2, 486dx/4) auch mehr

Also die Daten sind verhaun, das sind Nachfolger der Nachfolger der
Nachfolger...... :-/ Das sind bestimmt ... 450 Mhz kann ein Cyrix sein,
aber auch ein AMD K6/II oder Pentium und vergleichbar eben alles
weitere. Ein 686er ist nichts anderes als ein PentiumPro oder vergleichbar
anderer Hersteller. 586er ist der Original-Pentium oder vergleichbar
anderer Hersteller.

____

Zum Thema:

Hast du Multitasking oder sowas? Spielst du mit dem Stack rum?
Hast du vielleicht sogar eine Kleinigkeit einfach akzeptiert und dein
Notebook (ich glaub ned, dass das ein Laptop ist) hat vielleicht an
irgendeiner Stelle was anderes dastehen? Eventuell ruft sich irgendwo ein
Interrupt auf, der nicht eingetragen ist bzw. murkst mit dem Stack schief
rum? Spricht der Int vielleicht falsche Speicheradressen an? Die Page bei
Paging nicht eingetragen (gibt das Exception 13?) und so weiter.

Wirft vielleicht die Schleife an sich einen Fehler auf, in dem bei
irgendetwas nicht gewartet wird und die Register irgendwo verändert
werden, wird vielleicht ein Register nicht verwendet und der Rechner
benutzt es fuer irgendwas anderes?

Dat sind die Fragen, die mir eben durch'n Kopp gegangen sind.

Svenska

DDR-RAM

  • Beiträge: 184
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 11. May 2005, 20:28 »
Wie soll ne Page bei Paging nicht da sein?
wenn CR3 register out of bound ist, ka was passiert, wird evtl. immer wieder bei 0 Angefangen zu zählen.
Aber ansonsten, liegt immer definiertes Verhalten vor, das entweder zu einem pagefault oder nix anderem führt.
Außer vielleicht noch, da ist irgendwas mit ROM-bereich oder so.

MfG
DDR-RAM

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 12. May 2005, 09:42 »
Mag sein, dass alles wohldefiniert ist und das BIOS sich an irgendeinem
Bit trotzdem nen Scheissdreck schert... alle reservierten Bits sollten null
sein und nichts sollte dem Zufall ueberlassen sein.

Vielleicht kannst du vor der Schleife sämtliche Register ausgeben lassen
und nachschauen, _was_ nicht stimmt; dann mit einem anderen PC oder
Bochs vergleichen. Ein "Fenster" in die CPU bauen und sowas.

Wenn etwas auf xy Rechnern läuft und auf einem bestimmten nicht, dann
liegt ein nicht Standardkonformes Verhalten vor oder etwas anderes.

Ist das A20-Gate aktiviert und die Speicherzugriffe korrekt?

Naja,
Svenska

B.G.

  • Beiträge: 27
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 12. May 2005, 16:16 »
Mhm... hab das mit dem BIOS mal überprüft und der er zeigt mit "Invalid POST-Configuration" an. Wofür steht den dieses POST, hab in meinem BIOS eigentlich nicht viel verstellt nur eben das er von A booten soll (anstatt von Festplatte, denn da hab ich im Moment nichts drauf).

Das Bios ist von SystemSoft SCU For Intel 430TX Platform [Version 1.01 (Bilt: 2482-00)] (1983-1996).

Prozessor ist ein 333 MHz AMD-K6-2
Total Memory [RAM]: 032768 KB = 32 MB

Edit: Jap, A20 ist aktiviert. Lass ich alles von nem Bootloader machen, der springt auch gleich in den PMode, daran liegts nicht... Bisher hatte ich nicht viel zum Testen. Ich kann nur sagen das es auf Bochs und auf dem meiner Schwester läuft, auf dem Laptop eben nicht und auf meinem und dem meines Vaters auch nicht [gleiches Board+CPU, nur andere Grakas (Ich Nvidia, er Radeon)]

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 12. May 2005, 16:56 »
POST ist der Power On Self Test. Also der Selbstest vom PC direkt nach den Anschalten. Noch bevor man irgendwas sieht, checkt das Bios die wichtigsten Hardware-Komponenten.

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 12. May 2005, 17:15 »
Dann Progg ne Art Consolentreiber und lass die Registerstände nach
jeder Instruktion auf nem Drucker ausgeben - und dann das gleiche auf
nem richtigen Rechner ==> vergleichen.
Irgendwas läuft auf diesem einen Rechner anders als auf anderen
Rechnern. Achso, nach jeder Instruktion meine ich nach Assembler... ich
glaube, du programmierst in C, da könnte das etwas komplizierter sein.
Vielleicht mit nem Disassembler reinschauen oder sowas.

Jedenfalls wird an einer Stelle etwas anders ausgefuehrt, als es soll.

Svenska

B.G.

  • Beiträge: 27
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 12. May 2005, 20:21 »
Das mit dem Drucker wird recht schwer sein, da ich vom PC meiner Schwester aus nur übers Netzwerk drucken kann (und ich werde jetzt nicht mal so eben n' paar M$ Windows kompatible Unix-Sockets basteln nur um zu drucken =). Ich werd mal schauen was ich da dumpen kann. Dürfte ja kein Problem sein das ganze auf dem Bildschirm auszugeben und wenn er voll ist erst auf einen Tastendruck zu warten und dann den nächsten Bildschirm vollzuschreiben. Wie geagt ich teste mal was...

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 13. May 2005, 10:41 »
Ich hätte vorgeschlagen, einfach das Byte an den Drucker LPT1 zu
schicken und damit dann den Textmode anzuwerfen... vllt kannste ja den
Drucker mal kurzzeitig bei dir anschliessen...?

Fuer sowas gelob ich mir nen 17 Jahre alten Nadler...

Svenska

B.G.

  • Beiträge: 27
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 13. May 2005, 16:42 »
Mhm mal sehen wie ichs mach. Mal schaun ob ich meinen alten Lexmark Z12 Drucker zum Laufenbekomm, den dem HP-Laserdrucker meines Vaters trau ichs zu das der nicht mit meinem Laptop funzt...

 

Einloggen