xref: /xv6-public/proc.h (revision 55e95b16)
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