summaryrefslogtreecommitdiff
path: root/proc.h
blob: 39e1c494bdacb4043d0de236c9bdea9d9b4d0fb8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/*
 * 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[];
extern struct proc *curproc;