Memory 在xv6中编写程序来计算进程内存页
我试图编写一个系统调用,返回当前进程正在使用的内存页数,但我不知道从何处开始以及应该查看哪些变量。 我在proc.h中看到了两个变量sz和pgdir。但我不知道它们各自代表的确切含义。看看,您已经了解了所有您想要了解的内存管理:Memory 在xv6中编写程序来计算进程内存页,memory,system-calls,xv6,Memory,System Calls,Xv6,我试图编写一个系统调用,返回当前进程正在使用的内存页数,但我不知道从何处开始以及应该查看哪些变量。 我在proc.h中看到了两个变量sz和pgdir。但我不知道它们各自代表的确切含义。看看,您已经了解了所有您想要了解的内存管理: // Grow current process's memory by n bytes. // Return 0 on success, -1 on failure. int growproc(int n) { uint sz; struct proc *cur
// Grow current process's memory by n bytes.
// Return 0 on success, -1 on failure.
int
growproc(int n)
{
uint sz;
struct proc *curproc = myproc();
sz = curproc->sz;
if((sz = allocuvm(curproc->pgdir, sz, sz + n)) == 0)
return -1;
curproc->sz = sz;
switchuvm(curproc);
return 0;
}
growproc
用于将进程内存增加n
字节。此函数由sbrk
syscall使用,其本身由malloc
调用
由此,我们断言sz
Fromstruct proc{
实际上是进程内存大小
从vm.c
读取allocuvm
,可以看到两个宏:
将内存大小转换为四舍五入到下一页大小的内存大小PGROUNDUP(size)
这是页面大小PGSIZE
(PGROUNDUP(proc)->sz)/PGSIZE