Skip to content

Commit a606edf

Browse files
Add kernel task manager, task list command, and async exec scheduling
1 parent 0a84efe commit a606edf

8 files changed

Lines changed: 488 additions & 15 deletions

File tree

source/includes/commands/commands.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,6 @@ int cmd_mount(int argc, char** argv);
3838
int cmd_mv(int argc, char** argv);
3939
int cmd_umount(int argc, char** argv);
4040
int cmd_exec(int argc, char** argv);
41+
int cmd_tasks(int argc, char** argv);
4142

4243
#endif

source/includes/multitasking.h

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#ifndef MULTITASKING_H
2+
#define MULTITASKING_H
3+
4+
#include <basics.h>
5+
#include <stdint.h>
6+
#include <stdbool.h>
7+
8+
typedef enum {
9+
TASK_TYPE_KERNEL = 0,
10+
TASK_TYPE_USERLAND = 1
11+
} task_type_t;
12+
13+
typedef enum {
14+
TASK_STATE_READY = 0,
15+
TASK_STATE_RUNNING = 1,
16+
TASK_STATE_EXITED = 2
17+
} task_state_t;
18+
19+
typedef struct task_info {
20+
uint32_t pid;
21+
task_type_t type;
22+
task_state_t state;
23+
int exit_code;
24+
uint64_t runtime_ticks;
25+
const char* name;
26+
} task_info_t;
27+
28+
typedef struct user_task_spec {
29+
const char* path;
30+
int argc;
31+
const char* argv[32];
32+
} user_task_spec_t;
33+
34+
typedef bool (*task_iter_cb_t)(const task_info_t* info, void* ctx);
35+
typedef bool (*kernel_task_fn_t)(uint32_t pid, uint64_t now_ticks, void* ctx, int* exit_code);
36+
37+
void multitasking_init(void);
38+
void multitasking_on_pit_tick(uint64_t now_ticks);
39+
void multitasking_pump(void);
40+
41+
uint32_t multitasking_spawn_kernel(const char* name, kernel_task_fn_t fn, void* ctx);
42+
uint32_t multitasking_spawn_userland(const char* name, const user_task_spec_t* spec);
43+
44+
bool multitasking_exit_task(uint32_t pid, int exit_code);
45+
bool multitasking_get_task(uint32_t pid, task_info_t* out_info);
46+
uint32_t multitasking_current_pid(void);
47+
48+
uint32_t multitasking_count_tasks(void);
49+
uint32_t multitasking_count_running(void);
50+
51+
bool multitasking_for_each_task(task_iter_cb_t cb, void* ctx);
52+
53+
void multitasking_start_cursor_blink_task(void);
54+
55+
#endif

source/kernel/C/kernel.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <kernel.h>
1616
#include <tty.h>
1717
#include <executables/elf.h>
18+
#include <multitasking.h>
1819

1920
int terminal_rows = 0;
2021
int terminal_columns = 0;
@@ -245,6 +246,8 @@ void main(void) {
245246
init_hashing();
246247

247248
mm_print_out();
249+
multitasking_init();
250+
multitasking_start_cursor_blink_task();
248251
create_user_str("root", "prad");
249252

250253
wm_addr = module_request.response->modules[0]->address;

0 commit comments

Comments
 (0)