35 lines
859 B
C
35 lines
859 B
C
|
/*
|
||
|
* p->mem:
|
||
|
* text
|
||
|
* original data and bss
|
||
|
* fixed-size stack
|
||
|
* expandable heap
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* segments in proc->gdt
|
||
|
*/
|
||
|
#define SEG_KCODE 1 // kernel code
|
||
|
#define SEG_KDATA 2 // kernel data+stack
|
||
|
#define SEG_UCODE 3
|
||
|
#define SEG_UDATA 4
|
||
|
#define SEG_TSS 5 // this process's task state
|
||
|
#define NSEGS 6
|
||
|
|
||
|
struct proc{
|
||
|
char *mem; // start of process's physical memory
|
||
|
unsigned sz; // total size of mem, including kernel stack
|
||
|
char *kstack; // kernel stack, separate from mem so it doesn't move
|
||
|
enum { UNUSED, RUNNABLE, WAITING } state;
|
||
|
|
||
|
struct Taskstate ts; // only to give cpu address of kernel stack
|
||
|
struct Segdesc gdt[NSEGS];
|
||
|
struct Pseudodesc gdt_pd;
|
||
|
unsigned esp; // kernel stack pointer
|
||
|
unsigned ebp; // kernel frame pointer
|
||
|
|
||
|
struct Trapframe *tf; // points into kstack, used to find user regs
|
||
|
};
|
||
|
|
||
|
extern struct proc proc[];
|