summaryrefslogtreecommitdiff
path: root/proc.h
diff options
context:
space:
mode:
Diffstat (limited to 'proc.h')
-rw-r--r--proc.h24
1 files changed, 23 insertions, 1 deletions
diff --git a/proc.h b/proc.h
index 0c748aa..b5cf015 100644
--- a/proc.h
+++ b/proc.h
@@ -16,6 +16,23 @@
#define SEG_TSS 5 // this process's task state
#define NSEGS 6
+struct jmpbuf {
+ // saved registers for kernel context switches
+ // don't need to save all the fs etc. registers because
+ // they are constant across kernel contexts
+ // save all the regular registers so we don't care which are caller save
+ // don't save eax because that's the return register
+ // layout known to swtch.S
+ int jb_ebx;
+ int jb_ecx;
+ int jb_edx;
+ int jb_esi;
+ int jb_edi;
+ int jb_esp;
+ int jb_ebp;
+ int jb_eip;
+};
+
struct proc{
char *mem; // start of process's physical memory
unsigned sz; // total size of mem, including kernel stack
@@ -32,17 +49,22 @@ struct proc{
unsigned esp; // kernel stack pointer
unsigned ebp; // kernel frame pointer
+ struct jmpbuf jmpbuf;
+
struct Trapframe *tf; // points into kstack, used to find user regs
};
extern struct proc proc[];
-extern struct proc *curproc[NCPU];
+extern struct proc *curproc[NCPU]; // can be NULL if no proc running.
+ // XXX move curproc into cpu structure?
#define MPSTACK 512
struct cpu {
uint8_t apicid; // Local APIC ID
+ struct jmpbuf jmpbuf;
char mpstack[MPSTACK]; // per-cpu start-up stack, only used to get into main()
+ struct proc *lastproc; // last proc scheduled on this cpu (never NULL)
};
extern struct cpu cpus[NCPU];