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 - [MM]

Seiten: 1 [2]
21
OS-Design / Paging mal wieder
« am: 26. September 2005, 21:30 »
Hallo, ich habe eine Frage zum Paging:
Wenn ich das richtig sehe ist es sinnvoll für jeden Prozess eine eigene Pagetabelle anzulegen, damit er die ganzen 4gb (theoretisch) nutzen kann. So kann nun also das Codesegment bei 0 beginnen und danach direkt das Datensegment folgen und bis 4gb gehen.
Soweit ganz nett, aber was mache ich dann mit den Interrupts (oder Call-Gates)? Ich meine, wenn ich im Gate-Deskriptor als Segment ein Segment aus der GDT angebe, in dem mein Handler zu finden ist, dann bezieht sich doch die Basisadresse in diesem Deskriptor mit Sicherheit auf den physikalischen Adressraum, oder auf den Virtuellen des Kernels.
Oder sollte ich gar nicht für jeden Task eine eigene Pagetabelle anlegen?

MM
22
OS-Design / Verwaltung von dyn. Speicher
« am: 23. September 2005, 16:19 »
Hallo,
ich habe mir grad einige Funktionen für die Verwaltung meines dynamischen Speichers in meinem OS geschrieben, und finde, dass es doh etwas viel Overhead ist, denn für jeden freien oder belegten Speicherblock lege ich zusätzlich noch eine solche Struktur im Speicher an:
struct sMemList{
  unsigned int start; // Startadresse
  unsigned int size;  // Größe des Blocks in Byte
  sMemList *next;
};

Wie man sieht wird für jeden freien oder belegten Block eine solche Struktur von 12 Bytes benötigt, die als Liste organisiert sind.
Das Konzept ist denkbar einfach, am Anfang gibt es einen Eintrag in der Free-List, der den ganzen möglichen dyn. Speicher umfasst. Wird etwas allociert, wird der Eintrag verändert und es wird ein Eintrag in die Alloc-List eingefügt. Wird nun free aufgerufen, wird die Alloc-List nach dem Eintrag durchsucht usw.
Funktioniert auch soweit ganz nett, ich bin mir nur nicht ganz sicher, ob es da nicht noch bessere Lösungen gibt.
Kennt einer von euch eventuell eine bessere Strategie?

MM
23
Lowlevel-Coding / Rückkehr aus dem PMode
« am: 17. September 2005, 16:05 »
Hallo,

ich möchte mehrmals zwischen Real und Protected Mode hin und her schalten. Jedoch scheint etwas beim Ausschalten des PModes nicht ganz zu funktionieren, denn sobald ich mich wieder im Real Mode befinden müßte kann ich zum einen nicht mehr in den Protected Mode zurückschalten und zum anderen funktioniert der DOS interrupt (0x21) nicht mehr.
Mein verwendeter Code sieht so aus:
asm{
// Den PM ausschalten:
mov     eax,cr0
and     eax,0xFFFFFFFE
mov     cr0,eax
// Far-Jmp zum Selektor:Offset
fjmp    rm_cs,ende
ende:
mov     dx,rm_ds
mov     ds,dx
mov     ss,dx
mov     es,dx
mov     fs,dx
mov     gs,dx
}

IDTDescr.size=0x3FF;
IDTDescr.base=0;

asm{
lidt    byte ptr [IDTDescr]
sti
}


Also, ich schalte den PMode im cr0 Register aus, mache einen Far-Jump, setze alle Segmente wieder auf den ursprünglichen Wert und lade wieder die Original IDT. Über die Syntax muss man sich an dieser Stelle nicht wundern, da es mein eigener Compiler ist...
Habe ich da noch was vergessen, was noch gemacht werden muss, oder ist das alles soweit richtig und ich muss den Fehler an einer anderen Stelle suchen?
Ich sollte eventuell noch erwähnen, dass nach dem Ausführen dieses Codes ich Interrupts wie 0x10 für die Ausgabe wieder benutzen kann, ohne Probleme.

MM
24
Lowlevel-Coding / Partitionstypen
« am: 07. September 2005, 16:16 »
Hallo, weiß Jemand, wo der Unterschied zwichen den Partitionstypen 0xB und 0xC ist?
Ich habe auch schon viele Seiten danach abgeklappert, jedoch außer den folgenden Tabellen nicht viel gefunden:
...
0x0B Windows 9x FAT32
0x0C Windows 9x FAT32 LBA-Modus, EXT INT 13
...
oder:
0Bh FAT32
0Ch FAT32 (mit Bios-Extensions)

Was hat das mit LBA auf sich, oder einem erweiterten int 13h?
Ist das für Platten die >1Gb sind?

Und wo ich schonmal dabei bin, ich habe außerdem noch gesehen, dass die erweiterte Partition (0xF) oft auch so beschrieben wird:
0Fh erw. Part. (mit Bios-Extensions)

Was sind die Bios-Extensions?
Ich hoffe da kann mir Jemand helfen,

MM
25
Lowlevel-Coding / Copy Extended Memory - Funktion
« am: 04. September 2005, 18:00 »
Nochmal hallo,
mir ist eben noch ein sehr interessantes Thema eingefallen:
Die "Copy Extended Memory" Funktion (int 15h/ah=87h):
http://lrs.fmi.uni-passau.de/support/doc/interrupt-57/RB-1478.HTM
Wenn ich das richtig verstehe kann man damit Speicher ohne großen Aufwand nach oben (über 1mb) kopieren (aus dem Real Mode (?)). Könnte sehr nützlich sein für zB Bootloader...
Hat damit schonmal jemand was gemacht? Würd mich interessieren, ob das wirklich so einfach funktioniert, wie ich es mir vorstelle, oder ob das nur so nen Teil ist, was nur in verbindung mit irgend welchen wilden DOS-Treibern läuft (obwohl das so nicht aus meiner Doku hervorgeht).

MM
26
Lowlevel-Coding / Anzahl der Festplatten bestimmen
« am: 04. September 2005, 16:58 »
Hallo, um die Anzahl der installierten Floppy Disks zu bestimmen gibt es ja netter Weise den Interrupt 0x11, aber wie kann ich herausfinden, wie viele Hard Disks angeschlossen sind?
Gibt es da auch einen solchen netten Bios-Interrupt, oder muss ich wirklich auf verdacht versuchen den Status von Laufwerk 0x80 und 0x81 zu lesen um aus dem Fehlercode meine Schlüsse zu ziehen?

MM
27
Lowlevel-Coding / Lowest Level - Eigener Compiler
« am: 13. July 2005, 21:30 »
Hallo, hat sich ja ganz schön was getan, seit ich das letzte Mal hier war, weiter so.

Zu Thema:
Ich denke ihr werded wohl für die Low Level Programmierung Compiler/Assembler wie den GCC oder TASM benutzen, oder?

Ich habe mir vor einiger Zeit einen eigenen Assembler geschrieben und dann auf dessen Basis einen C Compiler (den ich später für ein eigenes OS benutzen will).

Der Compiler hat zwar einige kleine Einschränkungen, kann aber ansonsten alles, was im ANSI Standard steht und noch mehr wie zB:


// Funktionszeiger:
void func(char* str,int anz){...}
void main(void){
  void(char*,int) fptr;
  fptr=func;
  fptr("hallo",5);
}

// Mischung von ASM und C:
int a,b;
asm{
  mov eax,0x10
  mov [a],eax
  xor ebx,ebx
}
b=ebx;


Wer Interesse hat kann ihn sich ja mal ansehen und mir seine Meinung schreiben:
http://wwwstud.fh-zwickau.de/~micmo/compiler.html

MM
Seiten: 1 [2]

Einloggen