Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: Hunter am 30. March 2009, 15:45

Titel: Speicherproblem
Beitrag von: Hunter am 30. March 2009, 15:45
Hallo,

und zwar habe ich folgendes Problem:

Wenn ich in meinem Betriebssystem beispielsweise größere Dateien von CD in den Speicher lade (BMP->Hintergrundbild), kommt es immer zu ungewöhnlichen Problemen. So kann es sein, dass plötzliche der Maus/Tasterturtreiber nich mehr funktioniert, oder keine weiteren Datein von CD geladen werden können, da der Treiber nicht mehr funktioniert.

Die Vorgehensweise ist wie folgt:
In meinem Betriebssystem verwende ich Paging. Dabei befindet sich das Pagedirectory auf Speicherstelle 0x400000 und die Pagetable auf 0x401000

Der Heap startet ab 0x801000. Bevor ich eine Datei lade allociere ich den benötigten Speicher ( unsigned int *temp = (unsigned int*)malloc( 0x1000 );)

Der CD-Romtreiber lädt dabei beispielsweise eine Grafik auf die Adresse von "temp". Meistens kann die Datei vollständig geladen werden und auch erfolgreich angezeigt werden. Jedoch spielen nach dem Dateiladen wie bereits erwähnt, sämtliche Treiber (Maus/Tastatur, ATAPI, ...) verückt bzw. funktionieren nicht mehr (richtig).

Hat jemand von euch eine Idee woran das liegen könnte? Wird etwa ein wichtiger Speicherbereich überschrieben?

MFG
Hunter
Titel: Re: Speicherproblem
Beitrag von: jgraef am 30. March 2009, 17:07
Woher der Fehler kommt, kann ich aus den bescheidenen Informationen jetzt nicht erkennen. Aber eine gute Methode solch einen Fehler zu finden, ist es mit z.B Debugausgaben die Quelle des Fehlers einzugrenzen.
Titel: Re: Speicherproblem
Beitrag von: chris12 am 30. March 2009, 17:08
ich kenn mich zwar nicht so aus, aber es könnte doch sein, dass du, wenn die datei zu groß ist, speicher bereiche dahinter überschreibst

ich weiss zwar nicht ob es wirklich nötig wäre, schreib doch mal deine speichernutzung auf sprich wo eine datei (kernel, treiber etc) anfängt bzw wo sie endet
Titel: Re: Speicherproblem
Beitrag von: bluecode am 30. March 2009, 18:37
Eventuell allozierst du Pages, welche eigentlich belegt sind (durch Kernel zB) du aber in deinem Allokator für physische Pages leider als frei markiert hast.