这一个实验主要是学习XV6的页表(分页机制),关于分页机制的相关内容已经写在XV6学习 (3)里面了。 代码放在Github上。 Print a page table (easy) 这一个就是要实现一个vmprint()函数来遍历页表并打印,可以仿照freewalk()函数来写。 void prin
VA+=PGSIZE得到下一个页面的虚拟地址#ifdef LAB_PGTBL uint64 sys_pgaccess(void) { uint64 va; int page_num; uint64 user_bitmask_addr; if(argaddr(0, &va) < 0) return -1; if(argint(1, &page_num) < 0) return -1; if(argaddr(2,...
在sysproc.c中完善sys_pgaccess(): #ifdef LAB_PGTBLuint64sys_pgaccess(void){// lab pgtbl: your code here.// get argumentuint64buf;intnumber;uint64ans;if(argaddr(0,&buf)<0)return-1;if(argint(1,&number)<0)return-1;if(argaddr(2,&ans)<0)return-1;returnpgaccess((void*)buf,number,...
uint64va,uint64pa,uint64sz,intperm){if(mappages(my,va,sz,pa,perm)!=0)panic("kvmmap");}pagetable_teach_kvminit(){pagetable_teach=(pagetable_t)kalloc();memset(each,0,PGSIZE);// uart registerseach_kvmmap(each,UART0,UART0
Xv6 Lab3:pgtbl 实验: 实验开始之前需要将git分支切换到syscall分支不然有些文件你是没有的 $ git fetch $ git checkout pgtbl $ make clean Speed up system calls (easy) 实验要求 一些操作系统(例如Linux)通过在用户空间和内核之间共享只读区域中的数据来加快某些系统调用。这消除了执行这些系统调用时内核...
intsys_pgaccess(void){// lab pgtbl: your code here.uint64base,mask;intlen;if(argaddr(0,&base)<0){return-1;}if(argint(1,&len)<0){return-1;}if(argaddr(2,&mask)<0){return-1;}structproc*myp=myproc();uint64va=PGROUNDDOWN((uint64)base);charkernalbuf[256]={0};if(len>256*8...