Autor Thema: StupidOS in C  (Gelesen 3745 mal)

bscreator

  • Gast
Gespeichert
« am: 10. July 2008, 14:02 »
Hallo liebe OS-Coder,
Man soll ja so früh wie möglich zu einer Hochsprache wechseln, damit
der Code möglichst portabel bleibt.
Dazu hab ich mal ein paar Fragen:

1. Wenn ich das StupidOS mit nem C-Kernel realisieren will, (ohne dabei gleich in den PM wechseln zu müssen) wird das ganze dann um viele Zeilen Code größer?

2. Ehrlich gesagt hab ich nicht viel Ahnung, wie man im Bootloader mit Assembler einen C-Kernel laden kann. Hab zwar ein paar Beispiele gesehen, aber die sind immer mehrere Seiten lang. Könnt ihr mir da helfen?

3. Das Beste an C sind ja die Zeiger. Wenn man mit Zeigern unter Windows arbeitet, wird ja auf den Heap zugegriffen. Kann man mit den Zeigern auch direkt auf spezielle Arbeitsspeicheradressen zugreifen, um z.B. die Speicherverwaltung zu realisieren?

(Alle Fragen gelten für den Real Mode. Dem PM werd ich mich erst später zuwenden)

Vielen Dank,
bsc
« Letzte Änderung: 10. July 2008, 14:14 von bscreator »

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 10. July 2008, 14:57 »
1. Wenn ich das StupidOS mit nem C-Kernel realisieren will, (ohne dabei gleich in den PM wechseln zu müssen) wird das ganze dann um viele Zeilen Code größer?
Ein C-Kernel wird zeilenmäßig vermutlich eher kleiner als ein Assemblerkernel.

Zitat
2. Ehrlich gesagt hab ich nicht viel Ahnung, wie man im Bootloader mit Assembler einen C-Kernel laden kann. Hab zwar ein paar Beispiele gesehen, aber die sind immer mehrere Seiten lang. Könnt ihr mir da helfen?
Genauso wie du jeden anderen Kernel lädst. Wenn du dir das Schreiben des Bootloaders ersparen möchtest, nimm am besten GRUB (das wäre allerdings PM).

Zitat
3. Das Beste an C sind ja die Zeiger. Wenn man mit Zeigern unter Windows arbeitet, wird ja auf den Heap zugegriffen. Kann man mit den Zeigern auch direkt auf spezielle Arbeitsspeicheradressen zugreifen, um z.B. die Speicherverwaltung zu realisieren?
Ein Zeiger ist nichts anderes als eine Speicheradresse. Er kann also insbesondere überall hinzeigen, nicht nur auf den Heap. Auf den Heap wird halt gezeigt, wenn du die Speicherverwaltungsfunktionen des OS bemühst.

Zitat
(Alle Fragen gelten für den Real Mode. Dem PM werd ich mich erst später zuwenden)
Meiner bescheidenen Meinung nach ist das keine gute Idee. Du willst GRUB nehmen und direkt im PM anfangen.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #2 am: 10. July 2008, 16:54 »
Du wirst va. keinen (guten) C Compiler für 16bit Realmode finden.

Zitat
3. Das Beste an C sind ja die Zeiger. Wenn man mit Zeigern unter Windows arbeitet, wird ja auf den Heap zugegriffen. Kann man mit den Zeigern auch direkt auf spezielle Arbeitsspeicheradressen zugreifen, um z.B. die Speicherverwaltung zu realisieren?
Beispiel:
char *pMeinErsterZeiger = (char*)0xB8000;
pMeinErsterZeiger[0] = 'a';
pMeinErsterZeiger[1] = (char)0x07;
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 11. July 2008, 10:22 »
Du wirst va. keinen (guten) C Compiler für 16bit Realmode finden.
Naja, solange der Compiler C versteht, reicht das doch... ;) Unter Win dürfte das auf Turbo C rauslaufen.

Zitat
char *pMeinErsterZeiger = (char*)0xB8000;
pMeinErsterZeiger[0] = 'a';
pMeinErsterZeiger[1] = (char)0x07;
Soll das ungarische Notation sein? Bäh. :|
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #4 am: 11. July 2008, 16:54 »
Soll das ungarische Notation sein? Bäh. :|
Nein, ansonsten wäre es afaik pcMeinErsterZeiger. Ungarische Notation verwende ich tendenziell nicht.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

bscreator

  • Gast
Gespeichert
« Antwort #5 am: 23. July 2008, 17:55 »
Also erstmal danke für die zahlreichen Antworten.
Das mit dem C Compiler hab ich noch gar nicht so bedacht. Hab gedacht da reicht der ganz normale GNU C-Compiler.
Schade, dann muss ich mich wohl noch ein bisl mit dem Real-Mode rumschlagen, weil zu nem eigenen OS gehört auch ein eigener Bootloader.

Korona

  • Beiträge: 94
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 24. July 2008, 16:47 »
Es ist sehr viel angenehmer GRUB zu benutzen und direkt im Protected Mode anzufangen als einen Realmode Bootloader zu schreiben.
GRUB erspart dir viele lästige Dinge wie das Einschalten des A20 Gates, das Abfragen der Memory Map etc.
Wenn du deinen eignen Bootloader schreibst musst du dich entweder mit Dateisystemen herumschlagen oder spezielle Sektoren auf der Diskette / CD / Festplatte für deinen Kernel reservieren. Die erste Lösung ist umständlich, die zweite ist IMHO ein Hack. :P

 

Einloggen