diff --git a/student-distrib/bootimg b/student-distrib/bootimg index 4a464ceb3fc8176e22145112ad23995764e3b49c..8fa7600672cf3a1a64abf6bdb9c39c7bb4c19934 100755 Binary files a/student-distrib/bootimg and b/student-distrib/bootimg differ diff --git a/student-distrib/mp3.img b/student-distrib/mp3.img index 0521e3fd466ab5e2a974b840b1a2c89b0d2a82b1..f9b0e7abb3187b7e61a08ceca85b733bb666c00b 100755 Binary files a/student-distrib/mp3.img and b/student-distrib/mp3.img differ diff --git a/student-distrib/proc.h b/student-distrib/proc.h index bd6628e99fa8c6cf095bb827c510a0b6c07ecc5a..765c57b61daca3711e04908ecedf8384a72f5c4f 100644 --- a/student-distrib/proc.h +++ b/student-distrib/proc.h @@ -7,9 +7,6 @@ #include "terminal.h" #include "filesys.h" -/* Mask to get 8KB page */ -#define PCB_M 0xFFFFE000 - extern int32_t fail(); // Error handling helper function extern void control_initilization(void); extern void exit(void); diff --git a/student-distrib/scheduler.c b/student-distrib/scheduler.c index 23ad1dce5c7aa30720f14e2e37d7c34b3dee735a..fcedaf302460ccede5aef7ff53609d7d632c6865 100644 --- a/student-distrib/scheduler.c +++ b/student-distrib/scheduler.c @@ -1,8 +1,12 @@ #include "scheduler.h" +/* The scheduler function + * + * DISCRIPTION: This function switch running process every 15 ms + * + */ void scheduler(void){ - - //printf("schedule counter = %d\n", ++counter); + // Bookkeeping pcb_t * curr_pcb = terminal[running_terminal].pcb; @@ -10,7 +14,7 @@ void scheduler(void){ { // initialize pcb and set esp and ebp - // scheduler_flag used in execute to override pcb_init ebp and esp + // scheduler_flag used in execute to override pcb_init ebp and esp pcb_t pcb; pcb.scheduler_flag = 1; @@ -24,8 +28,6 @@ void scheduler(void){ terminal[running_terminal].pcb = &pcb; - //printf("[SCHEDULE] ebp = %x , esp = %x\n", pcb.current_ebp, pcb.current_esp); - switch_terminal(running_terminal); printf("terminal = %d\n", running_terminal); @@ -57,19 +59,12 @@ void scheduler(void){ pcb_t* next_pcb = terminal[running_terminal].pcb; - //printf("[SCHEDULE] curr_pcb = %x , next_pcb = %x\n", curr_pcb, next_pcb); - // update current pid, tss and remap paging remap_proc(next_pcb->pid); tss.ss0 = KERNEL_DS; tss.esp0 = _8_MB - _8_KB * (next_pcb->pid); - //printf("[SCHEDULE] esp = %x ebp = %x pid = %d pcb = %x\n", next_pcb->current_esp, next_pcb->current_ebp, next_pcb->pid, next_pcb); - - // cli(); - //while(1); - send_eoi(0); asm volatile( diff --git a/student-distrib/scheduler.h b/student-distrib/scheduler.h index 52a3c62313531b737f04d60c594f6705fc6405bb..09b4e954efd14029f910c7bf9d635f11833d6b0c 100644 --- a/student-distrib/scheduler.h +++ b/student-distrib/scheduler.h @@ -1,10 +1,15 @@ #include "lib.h" #include "types.h" #include "x86_desc.h" -#include "terminal.h" -#include "syscall.h" -#include "paging.h" -int32_t remap_proc(int32_t pid); extern void scheduler(void); + +/* function needed from other place */ +int32_t execute (const uint8_t* command); + +int32_t switch_terminal(int32_t term_id); + +int32_t remap_proc(int32_t pid); +void remap2(int32_t term_id); +void remap_vidmem(); diff --git a/student-distrib/syscall.c b/student-distrib/syscall.c index cdc4873d8d286bc32a18ef01ccf3d5c6bb63ea57..b1e412d6e9cb5ff2d51154b7c0021c5a73e76a2c 100644 --- a/student-distrib/syscall.c +++ b/student-distrib/syscall.c @@ -103,7 +103,7 @@ int32_t execute(const uint8_t* command) int32_t ret, arg_num; //number that indicated special command int32_t pid = set_pid(); - //if( pid == -1) return -1; // reach max process + //if( pid == -1) return -1; // reach max process ret = parse_cmd(command, parsed_cmd, argv);