UnnamedOS
task.h
Go to the documentation of this file.
1 
7 #ifndef TASKS_TASK_H
8 #define TASKS_TASK_H
9 
10 #include <stdint.h>
11 #include <interrupts/isr.h>
12 #include <mem/vmm.h>
13 
14 #define _4KB 0x1000
15 
16 typedef uint8_t task_stack_t;
17 typedef uint32_t task_pid_t;
18 
20 typedef enum {
21  TASK_STOPPED, TASK_RUNNING
22 } task_state_t;
23 
25 typedef struct {
30  size_t kernel_stack_len,
33  uint32_t ticks;
34  uint8_t vm86;
35  void* elf;
36 } task_t;
37 
40  size_t kernel_stack_len);
42  size_t kernel_stack_len, size_t user_stack_len, void* elf);
43 void task_stop(task_pid_t pid);
44 void task_destroy(task_pid_t pid);
48 uint32_t task_set_ticks(task_pid_t pid, uint32_t ticks);
50 void task_set_cpu(task_pid_t pid, cpu_state_t* cpu);
52 uint8_t task_get_vm86(task_pid_t pid);
53 void* task_get_elf(task_pid_t pid);
54 void task_dump();
55 
56 #endif
57 
uint8_t task_get_vm86(task_pid_t pid)
Returns whether a task is a VM86 task.
Definition: task.c:267
void * elf
if this is an ELF task, this points to the ELF file
Definition: task.h:35
task_pid_t task_get_next_task(task_pid_t pid)
Returns the next task from the task list.
Definition: task.c:184
task_state_t state
whether the task is running or stopped
Definition: task.h:26
task_pid_t task_create_kernel(void *entry_point, page_directory_t *page_directory, size_t kernel_stack_len)
Creates a kernel task.
Definition: task.c:128
task_stack_t * kernel_stack
stack for handling interrupts
Definition: task.h:28
static page_directory_t * page_directory
the current page directory
Definition: vmm.c:44
uint32_t ticks
how many ticks the task may run per time slice
Definition: task.h:33
The CPU&#39;s state when an interrupt occurs.
Definition: isr.h:58
task_pid_t task_create_user(void *entry_point, page_directory_t *page_directory, size_t kernel_stack_len, size_t user_stack_len, void *elf)
Creates a user task.
Definition: task.c:143
task_pid_t task_add(task_t *task)
Adds a new task to the task list and associates a PID.
Definition: task.c:46
cpu_state_t * cpu
saved CPU state when entering/leaving interrupts
Definition: task.h:32
size_t user_stack_len
user stack length
Definition: task.h:30
void task_set_cpu(task_pid_t pid, cpu_state_t *cpu)
Sets a task&#39;s CPU state.
Definition: task.c:249
uint8_t task_stack_t
stacks are measured in bytes
Definition: task.h:16
cpu_state_t * task_get_cpu(task_pid_t pid)
Returns a task&#39;s CPU state.
Definition: task.c:240
page_directory_t * page_directory
this task&#39;s virtual memory map
Definition: task.h:27
uint32_t task_pid_t
unique process ID
Definition: task.h:17
internal representation of a task
Definition: task.h:25
task_pid_t task_get_next_task_with_state(task_pid_t pid, task_state_t state)
Returns the next task from the task list with a specified state.
Definition: task.c:200
void task_dump()
Dumps the task list.
Definition: task.c:283
uint8_t vm86
whether this task is running in Virtual 8086 mode
Definition: task.h:34
void task_stop(task_pid_t pid)
Stops a task.
Definition: task.c:153
task_stack_t * user_stack
stack for the actual task&#39;s code
Definition: task.h:29
An entry in a page directory.
Definition: vmm.h:25
page_directory_t * task_get_page_directory(task_pid_t pid)
Returns a task&#39;s page directory.
Definition: task.c:258
task_state_t
state of a task
Definition: task.h:20
void * task_get_elf(task_pid_t pid)
Returns a task&#39;s ELF file.
Definition: task.c:276
task_state_t task_get_ticks(task_pid_t pid)
Returns a task&#39;s number of remaining ticks.
Definition: task.c:218
void task_destroy(task_pid_t pid)
Destroys a task.
Definition: task.c:161
uint32_t task_set_ticks(task_pid_t pid, uint32_t ticks)
Sets a task&#39;s number of remaining ticks.
Definition: task.c:228