41
Offtopic / Re: Trick: Eigenes OS als ISO
« am: 01. November 2012, 16:08 »Mein Makefile kann übrigens "make qemu", was das Testen vereinfacht.Meins auch

15. July 2025, 01:28
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.
Mein Makefile kann übrigens "make qemu", was das Testen vereinfacht.Meins auch
Kannst du damit überhaupt noch einigermaßen zuverlässig die Zeit halten? Der Timer wird ja nicht nur benutzt, um den Scheduler aufzurufen, sondern auch für die aktuelle Systemzeit.
// handle_interrupt aus common_handler.c
.extern handle_interrupt
.macro int_stub nr
.global int_handler\nr
int_handler\nr:
push $0
push $\nr
jmp common_intr_handler
.endm
//Exeptions haben extra-stubs
// (siehe: kernel/interrupt/handler/exeption/handler.S)
//IRQs
int_stub 0x20
// 0x21: direct call
int_stub 0x22
int_stub 0x23
int_stub 0x24
int_stub 0x25
int_stub 0x26
int_stub 0x27
int_stub 0x28
int_stub 0x29
int_stub 0x2A
int_stub 0x2B
int_stub 0x2C
int_stub 0x2D
int_stub 0x2E
int_stub 0x2F
//Syscalls
int_stub 0x30
common_intr_handler:
push %ebp
push %edi
push %esi
push %edx
push %ecx
push %ebx
push %eax
// Kernel-Datensegmente laden
mov $0x10, %ax
mov %ax, %ds
mov %ax, %es
// ISR aufrufen
push %esp
call handle_interrupt
mov %eax, %esp //Neuen Stack laden
// User-Datensegmente laden
mov $0x23, %ax
mov %ax, %ds
mov %ax, %es
// Neue cpu herstellen
pop %eax
pop %ebx
pop %ecx
pop %edx
pop %esi
pop %edi
pop %ebp
// Errorcode und Interruptnummer vom Stack nehmen
add $8, %esp
iret
Wo könnten andere Fehler/Ursachen für den Sprung sein?
Meine Theorie dazu ist, dass irgendwo ESP mit 0 geladen wurde, und danach ein paar POPs/rets ausgeführt wurden. Du solltest also die Taskerzeugung, den Taskwechsler und den Scheduler genauer anschauen. Insbesondere solltest du versuchen rauszukriegen, ob der Task zu dem gewechselt wird, überhaupt gültig ist.
while(1){
gets();
puts("\n");
}
setzte, kann man folgendes beobachten: