2021-10-09から1日間の記事一覧

vm.c static pte_t * walkpgdir(pde_t *pgdir, const void *va, int alloc)

トップページ jupiteroak.hatenablog.com vm.c https://github.com/mit-pdos/xv6-public/blob/master/vm.c#L35 static pte_t * walkpgdir(pde_t *pgdir, const void *va, int alloc) { pde_t *pde; pte_t *pgtab; pde = &pgdir[PDX(va)]; if(*pde & PTE_P){ …

vm.c static int mappages(pde_t *pgdir, void *va, uint size, uint pa, int perm)

トップページ jupiteroak.hatenablog.com vm.c https://github.com/mit-pdos/xv6-public/blob/master/vm.c#L60 static int mappages(pde_t *pgdir, void *va, uint size, uint pa, int perm) { char *a, *last; pte_t *pte; a = (char*)PGROUNDDOWN((uint)va…

vm.c int deallocuvm(pde_t *pgdir, uint oldsz, uint newsz)

トップページ jupiteroak.hatenablog.com vm.c https://github.com/mit-pdos/xv6-public/blob/master/vm.c#L255 int deallocuvm(pde_t *pgdir, uint oldsz, uint newsz) { pte_t *pte; uint a, pa; if(newsz >= oldsz) return oldsz; a = PGROUNDUP(newsz); …

vm.c int allocuvm(pde_t *pgdir, uint oldsz, uint newsz)

トップページ jupiteroak.hatenablog.com vm.c int allocuvm(pde_t *pgdir, uint oldsz, uint newsz) { char *mem; uint a; if(newsz >= KERNBASE) return 0; if(newsz < oldsz) return oldsz; a = PGROUNDUP(oldsz); for(; a < newsz; a += PGSIZE){ mem = …

vm.c void freevm(pde_t *pgdir)

トップページ jupiteroak.hatenablog.com vm.c https://github.com/mit-pdos/xv6-public/blob/master/vm.c#L283 void freevm(pde_t *pgdir) { uint i; if(pgdir == 0) panic("freevm: no pgdir"); deallocuvm(pgdir, KERNBASE, 0); for(i = 0; i < NPDENTRIE…

vm.c void switchuvm(struct proc *p)

トップページ jupiteroak.hatenablog.com vm.c https://github.com/mit-pdos/xv6-public/blob/master/vm.c#L156 void switchuvm(struct proc *p) { if(p == 0) panic("switchuvm: no process"); if(p->kstack == 0) panic("switchuvm: no kstack"); if(p->pg…

vm.c void clearpteu(pde_t *pgdir, char *uva)

トップページ jupiteroak.hatenablog.com vm.c https://github.com/mit-pdos/xv6-public/blob/master/vm.c#L302 void clearpteu(pde_t *pgdir, char *uva) { pte_t *pte; pte = walkpgdir(pgdir, uva, 0); if(pte == 0) panic("clearpteu"); *pte &= ~PTE_U;…

vm.c char* uva2ka(pde_t *pgdir, char *uva)

トップページ jupiteroak.hatenablog.com vm.c https://github.com/mit-pdos/xv6-public/blob/master/vm.c#L349 char* uva2ka(pde_t *pgdir, char *uva) { pte_t *pte; pte = walkpgdir(pgdir, uva, 0); if((*pte & PTE_P) == 0) return 0; if((*pte & PTE_U…

vm.c int copyout(pde_t *pgdir, uint va, void *p, uint len)

トップページ jupiteroak.hatenablog.com vm.c https://github.com/mit-pdos/xv6-public/blob/master/vm.c#L365 int copyout(pde_t *pgdir, uint va, void *p, uint len) { char *buf, *pa0; uint n, va0; buf = (char*)p; while(len > 0){ va0 = (uint)PGRO…

vm.c pde_t* copyuvm(pde_t *pgdir, uint sz)

トップページ jupiteroak.hatenablog.com vm.c https://github.com/mit-pdos/xv6-public/blob/master/vm.c#L315 pde_t* copyuvm(pde_t *pgdir, uint sz) { pde_t *d; pte_t *pte; uint pa, i, flags; char *mem; if((d = setupkvm()) == 0) return 0; for(i …

vm.c int loaduvm(pde_t *pgdir, char *addr, struct inode *ip, uint offset, uint sz)

トップページ jupiteroak.hatenablog.com vm.c https://github.com/mit-pdos/xv6-public/blob/master/vm.c#L197 int loaduvm(pde_t *pgdir, char *addr, struct inode *ip, uint offset, uint sz) { uint i, pa, n; pte_t *pte; if((uint) addr % PGSIZE != …

vm.c void inituvm(pde_t *pgdir, char *init, uint sz)

トップページ jupiteroak.hatenablog.com vm.c https://github.com/mit-pdos/xv6-public/blob/master/vm.c#L182 void inituvm(pde_t *pgdir, char *init, uint sz) { char *mem; if(sz >= PGSIZE) panic("inituvm: more than a page"); mem = kalloc(); mems…

vm.c void switchkvm(void)

トップページ jupiteroak.hatenablog.com vm.c https://github.com/mit-pdos/xv6-public/blob/master/vm.c#L149 void switchkvm(void) { lcr3(V2P(kpgdir)); // switch to the kernel page table }switchkvm関数は、現在使用されているページディレクトリか…

vm.c pde_t* setupkvm(void)

トップページ jupiteroak.hatenablog.com vm.c https://github.com/mit-pdos/xv6-public/blob/master/vm.c#L118 pde_t* setupkvm(void) { pde_t *pgdir; struct kmap *k; if((pgdir = (pde_t*)kalloc()) == 0) return 0; memset(pgdir, 0, PGSIZE); if (P2V(…