1 /* 2 * p->mem: 3 * text 4 * original data and bss 5 * fixed-size stack 6 * expandable heap 7 */ 8 9 /* 10 * segments in proc->gdt 11 */ 12 #define SEG_KCODE 1 // kernel code 13 #define SEG_KDATA 2 // kernel data+stack 14 #define SEG_UCODE 3 15 #define SEG_UDATA 4 16 #define SEG_TSS 5 // this process's task state 17 #define NSEGS 6 18 19 struct proc{ 20 char *mem; // start of process's physical memory 21 unsigned sz; // total size of mem, including kernel stack 22 char *kstack; // kernel stack, separate from mem so it doesn't move 23 enum { UNUSED, RUNNABLE, WAITING } state; 24 25 struct Taskstate ts; // only to give cpu address of kernel stack 26 struct Segdesc gdt[NSEGS]; 27 struct Pseudodesc gdt_pd; 28 unsigned esp; // kernel stack pointer 29 unsigned ebp; // kernel frame pointer 30 31 struct Trapframe *tf; // points into kstack, used to find user regs 32 }; 33 34 extern struct proc proc[]; 35