
UserMode und Syscalls funktionieren gut. Ich verwende in den Funktionen noch die while-Schleifen und breche über einen Software-Interrupt frühzeitig aus, wenn gewünscht. Die while-Schleifen sind leider noch notwendig, um einen Abbruch zu vermeiden. Vielleicht hat jemand deinen Tipp, wie ich diese komplett los werde. Funktional sind die while-Schleifen aber kein Problem, wenn man ausbrechen kann.
Code: [Auswählen]
void exit_task() //exit to next task
{
asm volatile("int $0x21"); // <== welchen INT würdet ihr verwenden?
}Code: [Auswählen]
void f2()
{
while(TRUE)
{
settextcolor(getpid(),0);
putch(getpid()+'@');
exit_task();
}
}
void f3() //user mode at ring 3 requires syscall_...
{
while(TRUE)
{
syscall_settextcolor(syscall_getpid(),0);
syscall_putch(syscall_getpid()+'@');
syscall_exit_task();
}
}
int main()
{
//...
// create two additional tasks
task_t* task2 = create_task (f2,0); // kernel mode (ring 0)
task_t* task3 = create_task (f3,3); // user mode (ring 3)
pODA->ts_flag = 1; // enable task_switching
while(TRUE)
{
settextcolor(getpid(),0);
putch(getpid()+'@');
exit_task();
}
return 0;
}
Zitat
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCAB
CABCABCABABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCAB
CABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCACABCABCABCAB
CABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCA
BCABCACABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCA
BCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABABCABCABCABCABCABCA
BCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABABCABCABCABCABCABCA
BCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABABCABCABCABCABCABCA
BCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCBCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCAB

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken
Gespeichert




