apio
4bad782aad
Doesn't use up more space in the Task structure, and now we are above the Minimum Acceptable Value as defined by POSIX (20), I think.
57 lines
997 B
C
57 lines
997 B
C
#pragma once
|
|
#include "fs/FileDescriptor.h"
|
|
#include "interrupts/Context.h"
|
|
#include "memory/AddressSpace.h"
|
|
#include "sys/elf/Image.h"
|
|
|
|
#define TASK_MAX_FDS 32
|
|
|
|
struct Task
|
|
{
|
|
enum TaskState
|
|
{
|
|
Idle,
|
|
Running,
|
|
Sleeping,
|
|
Exited
|
|
};
|
|
|
|
uint64_t id;
|
|
Context regs;
|
|
|
|
int64_t task_sleep = 0;
|
|
|
|
int64_t exit_status;
|
|
|
|
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 user_task = true;
|
|
|
|
bool is_user_task();
|
|
|
|
ELFImage* image = nullptr;
|
|
|
|
Descriptor files[TASK_MAX_FDS];
|
|
|
|
AddressSpace address_space;
|
|
|
|
int alloc_fd();
|
|
};
|
|
|
|
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); |