33 lines
910 B
C
33 lines
910 B
C
#ifndef THREAD_H
|
||
#define THREAD_H
|
||
|
||
#include <stdint.h>
|
||
#include <stddef.h>
|
||
|
||
typedef enum {
|
||
THREAD_READY,
|
||
THREAD_RUNNING,
|
||
THREAD_ZOMBIE
|
||
} thread_state_t;
|
||
|
||
// То, что пушится на стек при переключении
|
||
typedef struct {
|
||
uint32_t edi, esi, ebp, esp, ebx, edx, ecx, eax;
|
||
uint32_t eip;
|
||
uint32_t cs;
|
||
uint32_t eflags;
|
||
} cpu_context_t;
|
||
|
||
typedef struct thread {
|
||
uint32_t id;
|
||
uint32_t* esp; // Указатель на текущий топ стека
|
||
void* stack_limit; // Чтобы потом делать kfree
|
||
thread_state_t state;
|
||
struct thread* next;
|
||
} thread_t;
|
||
|
||
void kthread_init(void);
|
||
thread_t* kthread_create(void (*entry_point)(void));
|
||
void kthread_yield(void);
|
||
|
||
#endif
|