[MEMORY] Process memory management
This commit is contained in:
@@ -5,7 +5,9 @@ typedef struct process_st process_t;
|
||||
#include <mem.h>
|
||||
#include <cpu.h>
|
||||
#include <sync.h>
|
||||
#include <mem.h>
|
||||
|
||||
struct procmm_mmap_st;
|
||||
typedef struct process_st
|
||||
{
|
||||
uint64_t pid;
|
||||
@@ -13,7 +15,7 @@ typedef struct process_st
|
||||
uint64_t status;
|
||||
lock_t lock;
|
||||
struct process_st *parent;
|
||||
page_table *P4;
|
||||
struct procmm_mmap_st *mmap;
|
||||
LIST(struct process_st, children);
|
||||
LIST(struct process_st, siblings);
|
||||
LIST(thread_t, threads);
|
||||
@@ -29,8 +31,34 @@ typedef struct process_st
|
||||
#define get_current_process() (get_cpu()->current_process)
|
||||
#define set_current_process(proc) (get_cpu()->current_process = (proc))
|
||||
|
||||
typedef struct procmm_area_st
|
||||
{
|
||||
uintptr_t start;
|
||||
uintptr_t end;
|
||||
uint64_t flags;
|
||||
struct procmm_mmap_st *map;
|
||||
LIST(struct procmm_area_st, areas);
|
||||
} procmm_area_t;
|
||||
|
||||
typedef struct procmm_mmap_st
|
||||
{
|
||||
process_t *proc;
|
||||
page_table *P4;
|
||||
LIST(struct procmm_area_st, areas);
|
||||
procmm_area_t *brk;
|
||||
procmm_area_t *stack;
|
||||
} procmm_mmap_t;
|
||||
|
||||
|
||||
process_t *process_spawn(process_t *parent);
|
||||
void process_attach(process_t *proc, thread_t *th);
|
||||
void switch_process(process_t *proc);
|
||||
void process_exit(process_t *proc, uint64_t status);
|
||||
void process_free(process_t *proc);
|
||||
|
||||
procmm_mmap_t *procmm_new_map(process_t *proc, procmm_mmap_t *src);
|
||||
void procmm_free_map(process_t *proc);
|
||||
void procmm_print_map(procmm_mmap_t *map);
|
||||
procmm_area_t *procmm_map(procmm_mmap_t *map, uintptr_t start, uintptr_t end, uint64_t flags);
|
||||
void procmm_unmap(procmm_area_t *a);
|
||||
uintptr_t procmm_setup(process_t *proc);
|
||||
|
||||
Reference in New Issue
Block a user