cleaned up scheduling and boot code

master
Anton Lydike 3 years ago
parent 04f6c80d7d
commit d9625b445a

@ -5,20 +5,8 @@ stack_bottom:
.space 4096 .space 4096
stack_top: stack_top:
.section .text._start .section .text._start
// Set up all the CSR mstatus_offsets
// .set mstatus, 0x300 // machine status
// .set mscratch, 0x340
// .set mtvec, 0x305 // machine trap handler
// .set mcause, 0x342 // machine trap cause
// .set mtval, 0x343 // machine bad address or instruction
// .set misa, 0x301 // machine ISA
// .set mie, 0x304 // machine interrupt enable
// .set mip, 0x344 // machine interrupt pending
.extern init .extern init
.type init, @function .type init, @function

@ -128,12 +128,12 @@ int scheduler_index_from_pid(int pid)
return -1; return -1;
} }
int scheduler_create_process(int binid) int* get_current_process_registers()
{ {
return 0; return processes[current_process_index].regs;
} }
int* get_current_process_registers() ProcessControlBlock* get_current_process()
{ {
return processes[current_process_index].regs; return &processes[current_process_index];
} }

@ -3,12 +3,12 @@
#include "../kernel.h" #include "../kernel.h"
// process statuses: enum process_status {
#define PROC_DEAD 0 PROC_DEAD = 0,
#define PROC_RDY 1 PROC_RDY = 1,
#define PROC_WAIT_LOCK 2 PROC_WAIT_PROC = 2,
#define PROC_WAIT_PROC 3 PROC_WAIT_SLEEP = 3,
#define PROC_WAIT_SLEEP 4 }
// process structure: // process structure:
typedef struct ProcessControlBlock ProcessControlBlock; typedef struct ProcessControlBlock ProcessControlBlock;
@ -17,8 +17,7 @@ struct ProcessControlBlock {
int pc; int pc;
int regs[31]; int regs[31];
// scheduling information // scheduling information
int status; enum process_status status;
int requested_lock;
ProcessControlBlock *waiting_for_process; ProcessControlBlock *waiting_for_process;
unsigned long long int asleep_until; unsigned long long int asleep_until;
}; };
@ -33,5 +32,6 @@ void __attribute__((noreturn)) scheduler_run_next();
void __attribute__((noreturn)) scheduler_switch_to(int proc_index); void __attribute__((noreturn)) scheduler_switch_to(int proc_index);
int scheduler_index_from_pid(int pid); int scheduler_index_from_pid(int pid);
int* get_current_process_registers(); int* get_current_process_registers();
ProcessControlBlock* get_current_process();
#endif #endif
Loading…
Cancel
Save