示例#1
0
void init_paging() {
	uint32_t ptbl[1024] __attribute__((aligned(4096)));
	for (int i = 0; i < 1024; i++)
	{
		pdir[i] = 0x00000002;
		ptbl[i] = (i * 0x1000) | 3; // supervisor level; rw
	}
	// First 400MiB is kernel memory
	for (int i = 0; i < 100; i++) {
		pdir[i] = ((unsigned int)ptbl) | 3;
	}
	loadPageDir(pdir);
	enablePaging();
}
示例#2
0
文件: vmm_ext.c 项目: rbkloss/dcc_vmm
uint32_t os_pagefault(uint32_t address, uint32_t perms, uint32_t pte) {
    if ((pte & PTE_VALID) != PTE_VALID) {
        fprintf(stderr,
                "\t!!Faulty memory access @[0x%x] pte[0x%x]\n", address, pte);
        return VM_ABORT;
    } else if ((pte & PTE_INMEM) != PTE_INMEM) {
        uint32_t dir, pt;

        loadPageDir(currentPID_, &dir);
        loadPageTable(address, PTEFRAME(dir), &pt);
        loadPTE(address, PTEFRAME(pt));
    }
    return 0;
}