sched: add struct and object types for task and thread objects

This commit is contained in:
2023-03-06 11:08:26 +00:00
parent 1a413189ab
commit 902df83654
4 changed files with 77 additions and 1 deletions

View File

@@ -19,7 +19,7 @@ include arch/$(SOCKS_ARCH)/config.mk
# Platform-independent kernel source files
####################################
KERNEL_SRC_DIRS := init kernel vm ds util obj test
KERNEL_SRC_DIRS := init kernel vm ds util obj sched test
KERNEL_C_FILES := $(foreach dir,$(KERNEL_SRC_DIRS),$(wildcard $(dir)/*.c))
KERNEL_OBJ := $(addprefix $(BUILD_DIR)/,$(KERNEL_C_FILES:.c=.o))

43
include/socks/sched.h Normal file
View File

@@ -0,0 +1,43 @@
#ifndef SOCKS_SCHED_H_
#define SOCKS_SCHED_H_
#include <socks/pmap.h>
#include <socks/queue.h>
#include <socks/btree.h>
#include <socks/status.h>
typedef enum task_state {
TASK_RUNNING,
TASK_STOPPED,
} task_state_t;
typedef enum task_thread_state {
TASK_THREAD_READY,
TASK_THREAD_SLEEPING,
TASK_THREAD_STOPPED,
} task_thread_state_t;
typedef struct task {
struct task *t_parent;
unsigned int t_id;
task_state_t t_state;
pmap_t t_pmap;
btree_node_t t_tasklist;
queue_t t_threads;
queue_t t_children;
} task_t;
typedef struct task_thread {
task_thread_state_t tr_state;
unsigned int tr_id;
unsigned int tr_prio;
queue_entry_t tr_threads;
void *tr_kstack;
} task_thread_t;
extern kern_status_t sched_init(void);
#endif

View File

@@ -3,6 +3,7 @@
#include <socks/test.h>
#include <socks/printk.h>
#include <socks/object.h>
#include <socks/sched.h>
#include <socks/machine/init.h>
#include <socks/machine/cpu.h>
@@ -20,6 +21,7 @@ void kernel_init(uintptr_t arg)
ml_init(arg);
object_bootstrap();
sched_init();
run_all_tests();

31
sched/sched.c Normal file
View File

@@ -0,0 +1,31 @@
#include <socks/object.h>
#include <socks/sched.h>
#include <socks/printk.h>
static object_type_t task_type = {
.ob_name = "task",
.ob_size = sizeof(task_t),
};
static object_type_t thread_type = {
.ob_name = "thread",
.ob_size = sizeof(task_thread_t),
};
kern_status_t sched_init(void)
{
kern_status_t status = KERN_OK;
status = object_type_register(&task_type);
if (status != KERN_OK) {
return status;
}
status = object_type_register(&thread_type);
if (status != KERN_OK) {
return status;
}
printk("sched: initialised");
return status;
}