58 lines
1.0 KiB
C
58 lines
1.0 KiB
C
/*
|
|
* AsterOS Kernel
|
|
* Autor: Pavel Kalaš
|
|
* Rok: 2026
|
|
*
|
|
*/
|
|
|
|
/*
|
|
* Tento header popisuje procesovy model jadra.
|
|
* Obsahuje stavy procesu, kontext CPU registru a strukturu process_t,
|
|
* plus API pro vytvareni procesu, ukonceni a pristup k procesove tabulce.
|
|
*/
|
|
|
|
#ifndef ASTER_PROCESS_H
|
|
#define ASTER_PROCESS_H
|
|
|
|
#include "types.h"
|
|
|
|
#define ASTER_MAX_PROCESSES 16
|
|
|
|
typedef enum {
|
|
PROCESS_UNUSED = 0,
|
|
PROCESS_READY,
|
|
PROCESS_RUNNING,
|
|
PROCESS_BLOCKED,
|
|
PROCESS_EXITED
|
|
} process_state_t;
|
|
|
|
typedef struct {
|
|
u64 r15;
|
|
u64 r14;
|
|
u64 r13;
|
|
u64 r12;
|
|
u64 rbx;
|
|
u64 rbp;
|
|
u64 rip;
|
|
} context_t;
|
|
|
|
typedef struct {
|
|
u32 pid;
|
|
process_state_t state;
|
|
u8 priority;
|
|
u8 *stack_base;
|
|
u64 stack_top;
|
|
context_t context;
|
|
const char *name;
|
|
} process_t;
|
|
|
|
void process_init(void);
|
|
process_t *process_create(const char *name, void (*entry)(void), u8 priority);
|
|
void process_exit(void);
|
|
process_t *process_current(void);
|
|
void process_set_current(process_t *p);
|
|
process_t *process_table(void);
|
|
usize process_count(void);
|
|
|
|
#endif
|