pagetable lab initialized
This commit is contained in:
@ -1,11 +1,10 @@
|
||||
#include "types.h"
|
||||
#include "riscv.h"
|
||||
#include "defs.h"
|
||||
#include "param.h"
|
||||
#include "defs.h"
|
||||
#include "memlayout.h"
|
||||
#include "spinlock.h"
|
||||
#include "proc.h"
|
||||
#include "sysinfo.h"
|
||||
|
||||
uint64
|
||||
sys_exit(void)
|
||||
@ -55,6 +54,7 @@ sys_sleep(void)
|
||||
int n;
|
||||
uint ticks0;
|
||||
|
||||
|
||||
argint(0, &n);
|
||||
if(n < 0)
|
||||
n = 0;
|
||||
@ -71,6 +71,37 @@ sys_sleep(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#ifdef LAB_PGTBL
|
||||
int
|
||||
sys_pgpte(void)
|
||||
{
|
||||
uint64 va;
|
||||
struct proc *p;
|
||||
|
||||
p = myproc();
|
||||
argaddr(0, &va);
|
||||
pte_t *pte = pgpte(p->pagetable, va);
|
||||
if(pte != 0) {
|
||||
return (uint64) *pte;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef LAB_PGTBL
|
||||
int
|
||||
sys_kpgtbl(void)
|
||||
{
|
||||
struct proc *p;
|
||||
|
||||
p = myproc();
|
||||
vmprint(p->pagetable);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
uint64
|
||||
sys_kill(void)
|
||||
{
|
||||
@ -92,30 +123,3 @@ sys_uptime(void)
|
||||
release(&tickslock);
|
||||
return xticks;
|
||||
}
|
||||
|
||||
uint64
|
||||
sys_trace(void)
|
||||
{
|
||||
int n;
|
||||
argint(0, &n);
|
||||
if(n<0) return -1;
|
||||
myproc()->tracemask = n;
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint64
|
||||
sys_sysinfo(void)
|
||||
{
|
||||
struct sysinfo info;
|
||||
uint64 addr;
|
||||
argaddr(0, &addr);
|
||||
if (addr < 0) return -1;
|
||||
struct proc* p = myproc();
|
||||
info.nproc = proc_size();
|
||||
info.freemem = freemem();
|
||||
info.unused_proc_num = NPROC - info.nproc;
|
||||
info.load_avg = update_load() * 100 / sys_uptime();
|
||||
if (copyout(p->pagetable, addr, (char*)&info, sizeof(info)) < 0)
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user