[feat] Simple Multitask
This commit is contained in:
+36
-2
@@ -6,6 +6,7 @@
|
||||
#include <common.h>
|
||||
#include <memory/pmm.h>
|
||||
#include <memory/heap.h>
|
||||
#include <scheduler.h>
|
||||
#include <fs.h>
|
||||
|
||||
extern EFI_SYSTEM_TABLE *ST;
|
||||
@@ -105,7 +106,40 @@ extern "C" void kernel_main() {
|
||||
}
|
||||
|
||||
pf_print("Welcome to Sylva OS!\n");
|
||||
serial_write(" Kernel prepared well, start loop.\n");
|
||||
serial_write(" Kernel prepared well.\n");
|
||||
|
||||
while (1) ASM ("hlt"); // 《30天》看多了 (doge
|
||||
// --- Multitasking demo ---
|
||||
serial_write("Sylva: creating tasks...\n");
|
||||
|
||||
// Task A: prints a message 3 times, yielding between each
|
||||
task_create("taskA", []() {
|
||||
for (int i = 0; i < 3; i++) {
|
||||
serial_write("[taskA] running iteration ");
|
||||
serial_write_hex(i);
|
||||
serial_write("\n");
|
||||
yield();
|
||||
}
|
||||
serial_write("[taskA] done\n");
|
||||
});
|
||||
|
||||
// Task B: prints a message 5 times
|
||||
task_create("taskB", []() {
|
||||
for (int i = 0; i < 5; i++) {
|
||||
serial_write("[taskB] hello from taskB #");
|
||||
serial_write_hex(i);
|
||||
serial_write("\n");
|
||||
yield();
|
||||
}
|
||||
serial_write("[taskB] done\n");
|
||||
});
|
||||
|
||||
// Task C: short task
|
||||
task_create("taskC", []() {
|
||||
serial_write("[taskC] quick task\n");
|
||||
yield();
|
||||
serial_write("[taskC] finished\n");
|
||||
});
|
||||
|
||||
serial_write("Sylva: starting scheduler\n");
|
||||
scheduler_run(); // never returns
|
||||
}
|
||||
Reference in New Issue
Block a user