Luna/kernel/include/thread/Task.h
apio dc389da74e Implement an ELFImage struct
This struct allows us to keep track of what memory is used by the loaded executable. For some reason, freeing this memory when the task exits triggers a kernel page fault, so I'm not doing that right now.
2022-10-07 17:54:05 +02:00

42 lines
762 B
C

#pragma once
#include "interrupts/Context.h"
#include "sys/elf/Image.h"
struct Task
{
enum TaskState
{
Idle,
Running,
Sleeping,
Exited
};
uint64_t id;
Context regs;
int64_t task_sleep = 0;
int64_t task_time = 0;
Task* next_task = nullptr;
Task* prev_task = nullptr;
uint64_t allocated_stack = 0;
TaskState state;
uint64_t cpu_time = 0;
char floating_region[512] __attribute__((aligned(16)));
bool floating_saved = false;
bool is_user_task();
ELFImage* image = nullptr;
};
void set_context_from_task(Task& task, Context* ctx);
void get_context_to_task(Task& task, Context* ctx);
void task_save_floating(Task& task);
void task_restore_floating(Task& task);