summaryrefslogtreecommitdiff
path: root/kernel/proc.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/proc.c')
-rw-r--r--kernel/proc.c35
1 files changed, 19 insertions, 16 deletions
diff --git a/kernel/proc.c b/kernel/proc.c
index 5e37cb7..8d0ca8c 100644
--- a/kernel/proc.c
+++ b/kernel/proc.c
@@ -53,6 +53,7 @@ procinit(void)
initlock(&wait_lock, "wait_lock");
for(p = proc; p < &proc[NPROC]; p++) {
initlock(&p->lock, "proc");
+ p->state = UNUSED;
p->kstack = KSTACK((int) (p - proc));
}
}
@@ -170,8 +171,8 @@ freeproc(struct proc *p)
p->state = UNUSED;
}
-// Create a user page table for a given process,
-// with no user memory, but with trampoline pages.
+// Create a user page table for a given process, with no user memory,
+// but with trampoline and trapframe pages.
pagetable_t
proc_pagetable(struct proc *p)
{
@@ -192,7 +193,8 @@ proc_pagetable(struct proc *p)
return 0;
}
- // map the trapframe just below TRAMPOLINE, for trampoline.S.
+ // map the trapframe page just below the trampoline page, for
+ // trampoline.S.
if(mappages(pagetable, TRAPFRAME, PGSIZE,
(uint64)(p->trapframe), PTE_R | PTE_W) < 0){
uvmunmap(pagetable, TRAMPOLINE, 1, 0);
@@ -257,7 +259,7 @@ userinit(void)
int
growproc(int n)
{
- uint sz;
+ uint64 sz;
struct proc *p = myproc();
sz = p->sz;
@@ -388,7 +390,7 @@ exit(int status)
int
wait(uint64 addr)
{
- struct proc *np;
+ struct proc *pp;
int havekids, pid;
struct proc *p = myproc();
@@ -397,27 +399,27 @@ wait(uint64 addr)
for(;;){
// Scan through table looking for exited children.
havekids = 0;
- for(np = proc; np < &proc[NPROC]; np++){
- if(np->parent == p){
+ for(pp = proc; pp < &proc[NPROC]; pp++){
+ if(pp->parent == p){
// make sure the child isn't still in exit() or swtch().
- acquire(&np->lock);
+ acquire(&pp->lock);
havekids = 1;
- if(np->state == ZOMBIE){
+ if(pp->state == ZOMBIE){
// Found one.
- pid = np->pid;
- if(addr != 0 && copyout(p->pagetable, addr, (char *)&np->xstate,
- sizeof(np->xstate)) < 0) {
- release(&np->lock);
+ pid = pp->pid;
+ if(addr != 0 && copyout(p->pagetable, addr, (char *)&pp->xstate,
+ sizeof(pp->xstate)) < 0) {
+ release(&pp->lock);
release(&wait_lock);
return -1;
}
- freeproc(np);
- release(&np->lock);
+ freeproc(pp);
+ release(&pp->lock);
release(&wait_lock);
return pid;
}
- release(&np->lock);
+ release(&pp->lock);
}
}
@@ -658,6 +660,7 @@ procdump(void)
{
static char *states[] = {
[UNUSED] "unused",
+ [USED] "used",
[SLEEPING] "sleep ",
[RUNNABLE] "runble",
[RUNNING] "run ",