提交 31066c21 创建 作者: Frans Kaashoek's avatar Frans Kaashoek

no more proctable

still need to fix kill
上级 95e3785c
...@@ -21,7 +21,6 @@ void ...@@ -21,7 +21,6 @@ void
pinit(void) pinit(void)
{ {
int c; int c;
int i;
for (c = 0; c < NCPU; c++) { for (c = 0; c < NCPU; c++) {
...@@ -31,12 +30,6 @@ pinit(void) ...@@ -31,12 +30,6 @@ pinit(void)
ptables[c].name[0] = (char) (c + '0'); ptables[c].name[0] = (char) (c + '0');
safestrcpy(ptables[c].name+1, "ptable", MAXNAME-1); safestrcpy(ptables[c].name+1, "ptable", MAXNAME-1);
initlock(&ptables[c].lock, ptables[c].name); initlock(&ptables[c].lock, ptables[c].name);
for (i = 0; i < NPROC; i++) {
initlock(&ptables[c].proc[i].lock, ptables[c].proc[i].name);
initcondvar(&ptables[c].proc[i].cv, ptables[c].proc[i].name);
}
runqs[c].name[0] = (char) (c + '0'); runqs[c].name[0] = (char) (c + '0');
safestrcpy(runqs[c].name+1, "runq", MAXNAME-1); safestrcpy(runqs[c].name+1, "runq", MAXNAME-1);
initlock(&runqs[c].lock, runqs[c].name); initlock(&runqs[c].lock, runqs[c].name);
...@@ -55,29 +48,17 @@ allocproc(void) ...@@ -55,29 +48,17 @@ allocproc(void)
struct proc *p; struct proc *p;
char *sp; char *sp;
#if 0
acquire(&ptable->lock);
for(p = ptable->proc; p < &ptable->proc[NPROC]; p++)
if(p->state == UNUSED)
goto found;
release(&ptable->lock);
return 0;
found:
p->state = EMBRYO;
release(&ptable->lock);
#else
p = kmalloc(sizeof(struct proc)); p = kmalloc(sizeof(struct proc));
if (p == 0) return 0; if (p == 0) return 0;
memset(p, 0, sizeof(*p)); memset(p, 0, sizeof(*p));
p->state = EMBRYO; p->state = EMBRYO;
initlock(&p->lock, "proc"); initlock(&p->lock, "proc");
initcondvar(&p->cv, "proc"); initcondvar(&p->cv, "proc");
#endif
p->state = EMBRYO; p->state = EMBRYO;
p->pid = ptable->nextpid++; p->pid = ptable->nextpid++;
p->cpuid = cpu->id; p->cpuid = cpu->id;
// Allocate kernel stack if possible. // Allocate kernel stack if possible.
if((p->kstack = kalloc()) == 0){ if((p->kstack = kalloc()) == 0){
p->state = UNUSED; p->state = UNUSED;
...@@ -157,7 +138,6 @@ userinit(void) ...@@ -157,7 +138,6 @@ userinit(void)
extern char _binary_initcode_start[], _binary_initcode_size[]; extern char _binary_initcode_start[], _binary_initcode_size[];
p = allocproc(); p = allocproc();
cprintf("allocproc -> 0x%x\n", p);
initproc = p; initproc = p;
if((p->vmap = vmap_alloc()) == 0) if((p->vmap = vmap_alloc()) == 0)
panic("userinit: out of vmaps?"); panic("userinit: out of vmaps?");
...@@ -593,11 +573,12 @@ forkret(void) ...@@ -593,11 +573,12 @@ forkret(void)
int int
kill(int pid) kill(int pid)
{ {
struct proc *p; // struct proc *p;
int c; int c;
for (c = 0; c < NCPU; c++) { for (c = 0; c < NCPU; c++) {
acquire(&ptables[c].lock); acquire(&ptables[c].lock);
#if 0
for(p = ptables[c].proc; p < &ptables[c].proc[NPROC]; p++){ for(p = ptables[c].proc; p < &ptables[c].proc[NPROC]; p++){
acquire(&p->lock); acquire(&p->lock);
if(p->pid == pid){ if(p->pid == pid){
...@@ -620,6 +601,7 @@ kill(int pid) ...@@ -620,6 +601,7 @@ kill(int pid)
} }
release(&p->lock); release(&p->lock);
} }
#endif
release(&ptables[c].lock); release(&ptables[c].lock);
} }
return -1; return -1;
...@@ -640,28 +622,17 @@ procdump(int c) ...@@ -640,28 +622,17 @@ procdump(int c)
[RUNNING] "run ", [RUNNING] "run ",
[ZOMBIE] "zombie" [ZOMBIE] "zombie"
}; };
int i;
struct proc *p;
struct proc *q;
char *state; char *state;
#if 0
uint pc[10]; uint pc[10];
if(p->state == SLEEPING){
cprintf("proc table cpu %d\n", c); getcallerpcs((uint*)p->context->ebp+2, pc);
for(p = ptables[c].proc; p < &ptables[c].proc[NPROC]; p++){ for(i=0; i<10 && pc[i] != 0; i++)
if(p->state == UNUSED) cprintf(" %p", pc[i]);
continue;
if(p->state >= 0 && p->state < NELEM(states) && states[p->state])
state = states[p->state];
else
state = "???";
cprintf("%d %s %s", p->pid, state, p->name);
if(p->state == SLEEPING){
getcallerpcs((uint*)p->context->ebp+2, pc);
for(i=0; i<10 && pc[i] != 0; i++)
cprintf(" %p", pc[i]);
}
cprintf("\n");
} }
#endif
struct proc *q;
cprintf("runq: "); cprintf("runq: ");
STAILQ_FOREACH(q, &runqs[c].runq, run_next) { STAILQ_FOREACH(q, &runqs[c].runq, run_next) {
if(q->state >= 0 && q->state < NELEM(states) && states[q->state]) if(q->state >= 0 && q->state < NELEM(states) && states[q->state])
......
...@@ -124,7 +124,6 @@ struct runq { ...@@ -124,7 +124,6 @@ struct runq {
struct ptable { struct ptable {
char name[MAXNAME]; char name[MAXNAME];
struct spinlock lock; struct spinlock lock;
struct proc proc[NPROC];
struct proc *runq; struct proc *runq;
int nextpid; int nextpid;
}; };
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论