nits
This commit is contained in:
parent
7a37578e9e
commit
18432ed5ed
4
Notes
4
Notes
|
@ -101,7 +101,6 @@ test: one process unlinks a file while another links to it
|
||||||
test: one process opens a file while another deletes it
|
test: one process opens a file while another deletes it
|
||||||
test: deadlock d/.. vs ../d, two processes.
|
test: deadlock d/.. vs ../d, two processes.
|
||||||
test: dup() shared fd->off
|
test: dup() shared fd->off
|
||||||
test: sbrk
|
|
||||||
test: does echo foo > x truncate x?
|
test: does echo foo > x truncate x?
|
||||||
|
|
||||||
sh: support pipes? leave it for the class?
|
sh: support pipes? leave it for the class?
|
||||||
|
@ -119,4 +118,5 @@ echo foo > bar should truncate bar
|
||||||
but O_TRUNC should
|
but O_TRUNC should
|
||||||
|
|
||||||
make it work on one cpu
|
make it work on one cpu
|
||||||
make it work on amsterdam
|
make it work on a real machine
|
||||||
|
release before acquire at end of sleep?
|
||||||
|
|
14
proc.c
14
proc.c
|
@ -38,8 +38,6 @@ setupsegs(struct proc *p)
|
||||||
c->ts.esp0 = 0xffffffff;
|
c->ts.esp0 = 0xffffffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
// XXX it may be wrong to modify the current segment table!
|
|
||||||
|
|
||||||
c->gdt[0] = SEG_NULL;
|
c->gdt[0] = SEG_NULL;
|
||||||
c->gdt[SEG_KCODE] = SEG(STA_X|STA_R, 0, 0x100000 + 64*1024, 0); // xxx
|
c->gdt[SEG_KCODE] = SEG(STA_X|STA_R, 0, 0x100000 + 64*1024, 0); // xxx
|
||||||
c->gdt[SEG_KDATA] = SEG(STA_W, 0, 0xffffffff, 0);
|
c->gdt[SEG_KDATA] = SEG(STA_W, 0, 0xffffffff, 0);
|
||||||
|
@ -96,7 +94,7 @@ copyproc(struct proc* p)
|
||||||
np->ppid = p->pid;
|
np->ppid = p->pid;
|
||||||
release(&proc_table_lock);
|
release(&proc_table_lock);
|
||||||
|
|
||||||
// Copy process image memory.
|
// Copy user memory.
|
||||||
np->sz = p->sz;
|
np->sz = p->sz;
|
||||||
np->mem = kalloc(np->sz);
|
np->mem = kalloc(np->sz);
|
||||||
if(np->mem == 0){
|
if(np->mem == 0){
|
||||||
|
@ -214,18 +212,16 @@ sched(void)
|
||||||
void
|
void
|
||||||
yield(void)
|
yield(void)
|
||||||
{
|
{
|
||||||
struct proc *p;
|
struct proc *p = curproc[cpu()];
|
||||||
|
|
||||||
if((p=curproc[cpu()]) == 0 || curproc[cpu()]->state != RUNNING)
|
|
||||||
panic("yield");
|
|
||||||
acquire(&proc_table_lock);
|
acquire(&proc_table_lock);
|
||||||
p->state = RUNNABLE;
|
p->state = RUNNABLE;
|
||||||
sched();
|
sched();
|
||||||
release(&proc_table_lock);
|
release(&proc_table_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
// A process's very first scheduling by scheduler()
|
// A fork child's very first scheduling by scheduler()
|
||||||
// will longjmp here to do the first jump into user space.
|
// will longjmp here. "return" to user space.
|
||||||
void
|
void
|
||||||
forkret(void)
|
forkret(void)
|
||||||
{
|
{
|
||||||
|
@ -371,7 +367,7 @@ proc_wait(void)
|
||||||
|
|
||||||
acquire(&proc_table_lock);
|
acquire(&proc_table_lock);
|
||||||
for(;;){
|
for(;;){
|
||||||
// Scan through table looking zombie children.
|
// Scan through table looking for zombie children.
|
||||||
havekids = 0;
|
havekids = 0;
|
||||||
for(i = 0; i < NPROC; i++){
|
for(i = 0; i < NPROC; i++){
|
||||||
p = &proc[i];
|
p = &proc[i];
|
||||||
|
|
7
proc.h
7
proc.h
|
@ -36,9 +36,9 @@ struct jmpbuf {
|
||||||
enum proc_state { UNUSED, EMBRYO, SLEEPING, RUNNABLE, RUNNING, ZOMBIE };
|
enum proc_state { UNUSED, EMBRYO, SLEEPING, RUNNABLE, RUNNING, ZOMBIE };
|
||||||
|
|
||||||
struct proc{
|
struct proc{
|
||||||
char *mem; // start of process's physical memory
|
char *mem; // start of process's memory (a kernel address)
|
||||||
uint sz; // total size of mem, including kernel stack
|
uint sz; // user memory size
|
||||||
char *kstack; // kernel stack, separate from mem so it doesn't move
|
char *kstack; // kernel stack
|
||||||
enum proc_state state;
|
enum proc_state state;
|
||||||
int pid;
|
int pid;
|
||||||
int ppid;
|
int ppid;
|
||||||
|
@ -52,7 +52,6 @@ struct proc{
|
||||||
|
|
||||||
extern struct proc proc[];
|
extern struct proc proc[];
|
||||||
extern struct proc *curproc[NCPU]; // can be NULL if no proc running.
|
extern struct proc *curproc[NCPU]; // can be NULL if no proc running.
|
||||||
// XXX move curproc into cpu structure?
|
|
||||||
|
|
||||||
#define MPSTACK 512
|
#define MPSTACK 512
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue