OS-Entwicklung: Stack einrichten. Wessen Aufgabe ist das? Kernel oder Bootloader?
-
Wessen Aufgabe ist es den Stack einzurichten? Ist noch der Bootloader dafür zuständig oder bereits der Kernel?
Mit "Stack einrichten" meine ich diesen code:
(intelsyntax)
cli mov ax , 0x9000 mov ss , ax xor sp , sp xor bp , bp sti
bzw
(at&t syntax)cli movw $0x9000 , %ax movw %ax , %ss xorw %sp , %sp xorw %bp , %bp sti
-
wenn der bootloader nicht ganz trivial ist braucht er wohl auch 'nen stack also sollte vorher was sinnvolles im sp stehen. wenn der bootloader seinen dienst getan hat sollte der kernel den stack (mehrere stacks bei multitasking) verwalten...
-
net schrieb:
wenn der bootloader nicht ganz trivial ist braucht er wohl auch 'nen stack also sollte vorher was sinnvolles im sp stehen. wenn der bootloader seinen dienst getan hat sollte der kernel den stack (mehrere stacks bei multitasking) verwalten...
Ok, thx.
Bis jetzt habe ich die EInrichtung des Stacks vom Kernel machen lassen. Das schaut aber komisch aus.
-
TGGC|_work schrieb:
Bis jetzt habe ich die EInrichtung des Stacks vom Kernel machen lassen.
dann braucht dein bootloader wohl keinen stack?
TGGC|_work schrieb:
Das schaut aber komisch aus.
macht nichts. wenn's sinnvoll ist dann lass es so.
-
net schrieb:
TGGC|_work schrieb:
Bis jetzt habe ich die EInrichtung des Stacks vom Kernel machen lassen.
dann braucht dein bootloader wohl keinen stack?
TGGC|_work schrieb:
Das schaut aber komisch aus.
macht nichts. wenn's sinnvoll ist dann lass es so.
Nein. Mein bootloader brauchte keinen stack.
Ich hatte die Überlegung: Wenn ich die Einrichtung des Stacks in den Kernel verfrachte, dann wird der kernel unabhängiger.
zB:
Was ist, wenn (aus irgendeinem grund) der kernel von einem bootloader geladen wird, welcher den stack nicht einrichtet? Dann ist ja der kernel aufgeschmissen (sofern er selber keinen Stack einrichtet)Nächste Frage:
Wie bereits erwähnt kann es sein, dass der bootloader den Stack einrichtet oder auch nicht.(Okay, normale bootloader würden shcon einen stack einrichten. Aber was ist wenn jemand mit seinem bootloader mienen kernel laden will...)
Würde es schaden, wenn ich den code im bootloader UND im kernel hab?
(bootloader richtet stack ein und lädt kernel. Dieser kernel richtet stack nochmal ein....das ist aber nicht soo schlimm, da meiner meinung nach der bootloader dem kernel bestimmt kiene daten über den stack übergibt. Oder irre ich mich da?)Worauf ich hinnaus will: Mein Kernel soll sowohl DANN funktionieren wenn
der bootlaoder nen stack einrichtet, als auch, wenn der bootloader KEINEN stack einrichtet.
-
@TGGC|_work
Es wird wohl darauf hinaus laufen das jedes Modul seinen eigenen Stack bekommt.
-
Hi
Dein Kernel sollte sich grundsätzlich nicht auf das verlassen, was andere ihm ggf einrichten oder nicht. Der Booter eines anderen könnte ja dommerweise das CS genau da ablegen wo du irgendwelche daten ablegen willst. Der Booter übergibt an deinen kernel die ausführung. Jetzt es es des kernels aufgabe alles so zu initallisieren wie er es haben will. ( Stack, Datasegment, Datengrundinitallisierung, .... )
Auserdem sollte man nicht vergessen, das booter und kernel normalerweise eine einheit bilden. Woher soll ein anderer booter wissen, wohin er deinen kernel kopieren soll, und wo der einsprungpunkt liegt. LILO kennt z.B. auch einen sogenanten chain loder. Bedeutet der Booter des zu startenden os wird an die gleiche stelle kopiert an die auch das bios in kopiert hätte und startet ihn.
gruss
-
Termite schrieb:
Hi
Dein Kernel sollte sich grundsätzlich nicht auf das verlassen, was andere ihm ggf einrichten oder nicht. Der Booter eines anderen könnte ja dommerweise das CS genau da ablegen wo du irgendwelche daten ablegen willst. Der Booter übergibt an deinen kernel die ausführung. Jetzt es es des kernels aufgabe alles so zu initallisieren wie er es haben will. ( Stack, Datasegment, Datengrundinitallisierung, .... )
Auserdem sollte man nicht vergessen, das booter und kernel normalerweise eine einheit bilden. Woher soll ein anderer booter wissen, wohin er deinen kernel kopieren soll, und wo der einsprungpunkt liegt. LILO kennt z.B. auch einen sogenanten chain loder. Bedeutet der Booter des zu startenden os wird an die gleiche stelle kopiert an die auch das bios in kopiert hätte und startet ihn.
gruss
thx. Dann passt jetzt alles