550W Document
550W, a high-end OS
mm.h
浏览该文件的文档.
1 #pragma once
2 
3 #include <common/types.h>
4 
5 #define FS_KERNEL_ADDR 0xffffffc084000000lu
6 
7 #define START_BLOCK 2000
8 #define MEM_SIZE 32
9 #define PAGE_SIZE 4096 // 4K
10 #define INIT_KERNEL_STACK 0xffffffc081000000lu
11 #define FREEMEM (INIT_KERNEL_STACK + PAGE_SIZE * 10)
12 #define FREEMEMK 0xffffffc083000000lu
13 #define USER_STACK_ADDR 0xf00010000lu
14 
15 #define PROT_NONE 0
16 #define PROT_READ 1
17 #define PROT_WRITE 2
18 #define PROT_EXEC 4
19 #define PROT_GROWSDOWN 0X01000000
20 #define PROT_GROWSUP 0X02000000
21 
22 #define MAP_FILE 0
23 #define MAP_SHARED 0x01
24 #define MAP_PRIVATE 0X02
25 #define MAP_FAILED ((void *)-1)
26 
27 #define MAP_KERNEL 1
28 #define MAP_USER 2
29 
30 typedef uint64_t PTE;
31 extern ptr_t memCurr;
32 extern int diskpg_num;
33 extern uint64_t diskpg[1000];
34 
35 void k_mm_move_to_disk(uint64_t pg_kva, uint64_t user_va);
36 void k_mm_get_back_disk(uint64_t va, uint64_t new_addr);
37 void k_mm_en_invalid(uint64_t pa_kva, PTE *pgdir);
38 ptr_t k_mm_alloc_mem(int numPage, uint64_t user_va);
39 ptr_t k_mm_alloc_page(int numPage);
40 void k_mm_fork_pgtable(PTE *dest_pgdir, PTE *src_pgdir);
41 void k_mm_fork_page_helper(uintptr_t va, PTE *destpgdir, PTE *srcpgdir);
42 uint64_t k_mm_get_kva_from_va(uint64_t va, PTE *pgdir);
43 long k_mm_getpa(uint64_t va);
44 void k_mm_map_kp(uint64_t va, uint64_t pa, PTE *pgdir);
45 
46 void k_mm_free_page(ptr_t baseAddr, int numPage);
47 void *k_mm_malloc(size_t size);
48 void k_mm_share_pgtable(PTE *dest_pgdir, PTE *src_pgdir);
50 long k_mm_shm_page_get(int key);
51 long k_mm_shm_page_dt(uintptr_t addr);
52 void k_mm_map(uint64_t va, uint64_t pa, PTE *pgdir);
53 void k_mm_getback_page(int pid);
54 PTE *k_mm_get_kva(PTE entry);
55 void k_mm_cancel_pg(PTE *pgdir);
56 uint64_t k_mm_alloc_newva();
57 
58 long sys_brk(unsigned long brk);
void * k_mm_malloc(size_t size)
Definition: mm.c:172
uintptr_t k_mm_alloc_page_helper(uintptr_t va, PTE *pgdir)
Definition: mm.c:334
ptr_t k_mm_alloc_mem(int numPage, uint64_t user_va)
Definition: mm.c:111
uint64_t k_mm_alloc_newva()
Definition: mm.c:178
ptr_t k_mm_alloc_page(int numPage)
Definition: mm.c:149
void k_mm_get_back_disk(uint64_t va, uint64_t new_addr)
Definition: mm.c:78
void k_mm_en_invalid(uint64_t pa_kva, PTE *pgdir)
Definition: mm.c:95
void k_mm_free_page(ptr_t baseAddr, int numPage)
Definition: mm.c:170
int diskpg_num
Definition: mm.c:17
void k_mm_map_kp(uint64_t va, uint64_t pa, PTE *pgdir)
Definition: mm.c:367
uint64_t diskpg[1000]
Definition: mm.c:24
void k_mm_getback_page(int pid)
Definition: mm.c:40
uint64_t PTE
Definition: mm.h:30
ptr_t memCurr
Definition: mm.c:14
void k_mm_map(uint64_t va, uint64_t pa, PTE *pgdir)
Definition: mm.c:403
void k_mm_move_to_disk(uint64_t pg_kva, uint64_t user_va)
Definition: mm.c:63
PTE * k_mm_get_kva(PTE entry)
Definition: mm.c:34
void k_mm_fork_page_helper(uintptr_t va, PTE *destpgdir, PTE *srcpgdir)
Definition: mm.c:308
long k_mm_shm_page_get(int key)
Definition: mm.c:194
uint64_t k_mm_get_kva_from_va(uint64_t va, PTE *pgdir)
Definition: mm.c:341
void k_mm_cancel_pg(PTE *pgdir)
Definition: mm.c:431
long k_mm_getpa(uint64_t va)
Definition: mm.c:357
long sys_brk(unsigned long brk)
Definition: mm.c:489
void k_mm_fork_pgtable(PTE *dest_pgdir, PTE *src_pgdir)
Definition: mm.c:265
void k_mm_share_pgtable(PTE *dest_pgdir, PTE *src_pgdir)
Definition: mm.c:254
long k_mm_shm_page_dt(uintptr_t addr)
Definition: mm.c:222
uint64_t PTE
Definition: pgtable.h:82
uint64_t ptr_t
Definition: types.h:44
uint64 uintptr_t
Definition: types.h:47