#include <stdbool.h>
#include <stdint.h>
#include "threads/pte.h"
Go to the source code of this file.
|
| uint64_t * | pml4e_walk (uint64_t *pml4, const uint64_t va, int create) |
| |
| uint64_t * | pml4_create (void) |
| |
| bool | pml4_for_each (uint64_t *, pte_for_each_func *, void *) |
| |
| void | pml4_destroy (uint64_t *pml4) |
| |
| void | pml4_activate (uint64_t *pml4) |
| |
| void * | pml4_get_page (uint64_t *pml4, const void *upage) |
| |
| bool | pml4_set_page (uint64_t *pml4, void *upage, void *kpage, bool rw) |
| |
| void | pml4_clear_page (uint64_t *pml4, void *upage) |
| |
| bool | pml4_is_dirty (uint64_t *pml4, const void *upage) |
| |
| void | pml4_set_dirty (uint64_t *pml4, const void *upage, bool dirty) |
| |
| bool | pml4_is_accessed (uint64_t *pml4, const void *upage) |
| |
| void | pml4_set_accessed (uint64_t *pml4, const void *upage, bool accessed) |
| |
| struct desc_ptr | __attribute__ ((packed)) |
| |
◆ is_kern_pte
◆ is_user_pte
| #define is_user_pte |
( |
|
pte | ) |
(*(pte) & PTE_U) |
◆ is_writable
| #define is_writable |
( |
|
pte | ) |
(*(pte) & PTE_W) |
◆ pte_get_paddr
◆ pte_for_each_func
| typedef bool pte_for_each_func(uint64_t *pte, void *va, void *aux) |
◆ __attribute__()
| struct desc_ptr __attribute__ |
( |
(packed) |
| ) |
|
◆ pml4_activate()
205 {
207}
uint64_t * base_pml4
Definition: init.c:42
#define vtop(vaddr)
Definition: vaddr.h:53
◆ pml4_clear_page()
| void pml4_clear_page |
( |
uint64_t * |
pml4, |
|
|
void * |
upage |
|
) |
| |
258 {
262
264
265 if (pte !=
NULL && (*pte &
PTE_P) != 0) {
266 *pte &= ~PTE_P;
267 if (rcr3 () ==
vtop (pml4))
269 }
270}
#define ASSERT(CONDITION)
Definition: debug.h:30
uint64_t * pml4e_walk(uint64_t *pml4e, const uint64_t va, int create)
Definition: mmu.c:65
#define PTE_P
Definition: pte.h:39
#define NULL
Definition: stddef.h:4
unsigned long long int uint64_t
Definition: stdint.h:29
#define is_user_vaddr(vaddr)
Definition: vaddr.h:41
#define pg_ofs(va)
Definition: vaddr.h:24
◆ pml4_create()
96 {
98 if (pml4)
100 return pml4;
101}
void * palloc_get_page(enum palloc_flags)
Definition: palloc.c:301
void * memcpy(void *, const void *, size_t)
Definition: string.c:7
#define PGSIZE
Definition: vaddr.h:20
◆ pml4_destroy()
190 {
192 return;
194
195
200}
static void pdpe_destroy(uint64_t *pdpe)
Definition: mmu.c:179
void palloc_free_page(void *)
Definition: palloc.c:333
#define PTE_ADDR(pte)
Definition: pte.h:29
#define ptov(paddr)
Definition: vaddr.h:49
◆ pml4_for_each()
148 {
153 return false;
154 }
155 return true;
156}
static bool pdp_for_each(uint64_t *pdp, pte_for_each_func *func, void *aux, unsigned pml4_index)
Definition: mmu.c:134
◆ pml4_get_page()
| void * pml4_get_page |
( |
uint64_t * |
pml4, |
|
|
const void * |
upage |
|
) |
| |
214 {
216
218
219 if (pte && (*pte &
PTE_P))
222}
◆ pml4_is_accessed()
| bool pml4_is_accessed |
( |
uint64_t * |
pml4, |
|
|
const void * |
upage |
|
) |
| |
303 {
305 return pte !=
NULL && (*pte &
PTE_A) != 0;
306}
#define PTE_A
Definition: pte.h:42
◆ pml4_is_dirty()
277 {
279 return pte !=
NULL && (*pte &
PTE_D) != 0;
280}
#define PTE_D
Definition: pte.h:43
◆ pml4_set_accessed()
| void pml4_set_accessed |
( |
uint64_t * |
pml4, |
|
|
const void * |
upage, |
|
|
bool |
accessed |
|
) |
| |
311 {
313 if (pte) {
314 if (accessed)
316 else
318
319 if (rcr3 () ==
vtop (pml4))
321 }
322}
unsigned int uint32_t
Definition: stdint.h:26
◆ pml4_set_dirty()
| void pml4_set_dirty |
( |
uint64_t * |
pml4, |
|
|
const void * |
upage, |
|
|
bool |
dirty |
|
) |
| |
285 {
287 if (pte) {
288 if (dirty)
290 else
292
293 if (rcr3 () ==
vtop (pml4))
295 }
296}
◆ pml4_set_page()
240 {
245
247
248 if (pte)
251}
#define PTE_W
Definition: pte.h:40
#define PTE_U
Definition: pte.h:41
◆ pml4e_walk()
65 {
68 int allocated = 0;
69 if (pml4e) {
74 if (new_page) {
76 allocated = 1;
77 } else
79 } else
81 }
83 }
84 if (pte ==
NULL && allocated) {
86 pml4e[idx] = 0;
87 }
88 return pte;
89}
bool create(const char *file, unsigned initial_size)
파일을 생성하는 시스템 콜
Definition: syscall.c:233
static uint64_t * pdpe_walk(uint64_t *pdpe, const uint64_t va, int create)
Definition: mmu.c:32
@ PAL_ZERO
Definition: palloc.h:10
#define PML4(la)
Definition: pte.h:25
◆ address
◆ size