42_KFS/headers/task.h

44 lines
905 B
C
Raw Normal View History

#pragma once
#include "list.h"
#include "memory.h"
#include <stdint.h>
extern struct task *current_task;
2025-02-03 07:11:38 -05:00
enum status { ZOMBIE, THREAD, RUN, WAIT, SLEEP, STOPPED, FORKED };
enum owner { OWNER_KERNEL, OWNER_USER };
#define STACK_SIZE PAGE_SIZE * 4
struct task {
2025-02-07 06:35:32 -05:00
uint8_t *esp;
uint8_t *esp0;
uint32_t *cr3; // physical
uint32_t *heap; // virtual
uint32_t *eip;
uint16_t pid;
uint8_t status;
uint8_t uid;
struct task *daddy;
struct task *child;
struct list **signals;
struct task *next;
struct task *prev;
};
void scheduler(void);
void switch_to_task(struct task *next_task);
2025-02-07 06:35:32 -05:00
struct task *create_task(uint8_t uid);
int8_t create_kernel_task(void);
void remove_task(struct task *task);
2025-02-03 07:11:38 -05:00
struct task *copy_task(const struct task *task);
void kfork(struct task *daddy);
2025-02-07 05:28:22 -05:00
void zombify_task(struct task *task);
2025-02-03 07:11:38 -05:00
// utils
void exec_fn(void (*fn)(void));
2025-02-07 06:35:32 -05:00
uint16_t fork(void);
uint16_t wait(void);