From 33556291e868ab225d3c479d8f75305bf1a4fedc Mon Sep 17 00:00:00 2001 From: Divyam Khandelwal <divyam@wirelessprv-10-194-9-252.near.illinois.edu> Date: Sun, 29 Apr 2018 17:01:34 -0500 Subject: [PATCH] Minor logic changes --- student-distrib/keyboard.c | 4 +-- student-distrib/paging.c | 7 +++--- student-distrib/proc.c | 51 ++++++++++++++++---------------------- student-distrib/rtc.c | 2 +- student-distrib/syscall.c | 9 +------ student-distrib/types.h | 3 --- 6 files changed, 28 insertions(+), 48 deletions(-) diff --git a/student-distrib/keyboard.c b/student-distrib/keyboard.c index 7a004a0..047bf36 100644 --- a/student-distrib/keyboard.c +++ b/student-distrib/keyboard.c @@ -383,8 +383,8 @@ void KB_handler(void) { clear(); reset_cursor(); - if(terminal[visible_terminal].pcb->shell_flag) - printf("391OS> "); + //if(terminal[visible_terminal].pcb->shell_flag) + // printf("391OS> "); remap2(running_terminal); send_eoi(KB_IRQ); diff --git a/student-distrib/paging.c b/student-distrib/paging.c index d451d09..4be459a 100644 --- a/student-distrib/paging.c +++ b/student-distrib/paging.c @@ -80,16 +80,15 @@ void remap2(int32_t term_id){ * Return Value: void * Function: Initialises page for video memory */ -void remap_vidmem(){ +void remap_vidmem() +{ page_directory[33] = (uint32_t)(uint32_t)page_table | USER | READ_WRITE | PRESENT; if(visible_terminal == running_terminal) - page_table[0] = ((uint32_t)0xB8000) | USER | READ_WRITE | PRESENT; - + else - page_table[0] = ((uint32_t)(0xB8000 + (running_terminal+1)*0x1000 )) | USER | READ_WRITE | PRESENT; // flush TLB diff --git a/student-distrib/proc.c b/student-distrib/proc.c index 25eb4ac..4abf58a 100644 --- a/student-distrib/proc.c +++ b/student-distrib/proc.c @@ -12,18 +12,20 @@ int32_t fail(){ return -1; } +/* Initialized at bootup */ void control_initilization(void) { int i; + + /* All PID entries to present */ for(i = 0; i < MAX_PROCESS; i++) pid_array[i] = 0; total_prog_count = 0; - visible_terminal = 0; + visible_terminal = 0; running_terminal = 0; - cur_pid = 0; - counter = 0; - // running_terminal = 0; + cur_pid = 0; + counter = 0; } /* Checks if FD is valid @@ -41,7 +43,7 @@ int32_t fd_check(int32_t fd) return -1; } -//clearing fd +/* Clear FD for process on halt */ void fd_clear(int32_t fd) { terminal[ running_terminal].pcb->fd[fd].fileop_ptr.read = 0; @@ -51,14 +53,18 @@ void fd_clear(int32_t fd) terminal[ running_terminal].pcb->fd[fd].inode_index = 0; terminal[ running_terminal].pcb->fd[fd].file_pos = 0; terminal[ running_terminal].pcb->fd[fd].flags = 0; + return; } -//initialize pcb +/* Initialize PCB for new process on execute */ void pcb_init(pcb_t* pcb , uint8_t* parsed_cmd, uint8_t (*argv)[MAX_ARGUMENT_SIZE], uint32_t pid, uint32_t arg_num) { int i; - for( i = 0; i < MAX_FILE_NUM ; i++){ + + /* Set FD array */ + for( i = 0; i < MAX_FILE_NUM ; i++) + { pcb->fd[i].fileop_ptr.read = 0; pcb->fd[i].fileop_ptr.write = 0; pcb->fd[i].fileop_ptr.open = 0; @@ -68,31 +74,28 @@ void pcb_init(pcb_t* pcb , uint8_t* parsed_cmd, uint8_t (*argv)[MAX_ARGUMENT_SIZ pcb->fd[i].flags = 0; } - //initialze stdin + /* Initialze STDIN */ pcb->fd[STDIN_FD].fileop_ptr = (f_table_t)stdin_jumptable; pcb->fd[STDIN_FD].inode_index = 0; pcb->fd[STDIN_FD].file_pos = 0; pcb->fd[STDIN_FD].flags = 1; - //initialze stdout + /* Initialize STDOUT */ pcb->fd[STDOUT_FD].fileop_ptr = (f_table_t)stdout_jumptable; pcb->fd[STDOUT_FD].inode_index = 0; pcb->fd[STDOUT_FD].file_pos = 0; pcb->fd[STDOUT_FD].flags = 1; - + /* Set the PID sent in as argument */ pcb->pid = pid; pcb->scheduler_flag = 0; - // no program other than the shell initiates another program + /* no program other than the shell initiates another program */ pcb->parent_pid = 0; pcb->arg_num = arg_num; - pcb->running_terminal = visible_terminal; - pcb->shell_flag = 0; - memcpy(pcb->cmd, parsed_cmd, MAX_COMMAND_SIZE); for(i = 0; i < MAX_ARGUMENT_NUM; i++) @@ -100,26 +103,14 @@ void pcb_init(pcb_t* pcb , uint8_t* parsed_cmd, uint8_t (*argv)[MAX_ARGUMENT_SIZ pcb->parent_esp = 0; pcb->parent_ebp = 0; - pcb->parent_pcb = terminal[visible_terminal].pcb; - pcb->tss_esp0 = tss.esp0; + pcb->parent_pcb = terminal[running_terminal].pcb; + pcb->tss_esp0 = tss.esp0; return; } -//function that return a pointer to the current pcb -pcb_t* current_pcb(void) -{ - pcb_t* pcb; - asm volatile( - "andl %%esp, %0" - : "=r" (pcb) - : "r" (PCB_M) - ); - return pcb; -} - -//parsing the command, extract command and argument -//return number of arguments when success, -2 when exit, -1 when fail +/* Parsing the command, extracting the command and the argument + * returns number of arguments when successful, -2 fot exit, -1 for failure */ int32_t parse_cmd(const uint8_t* command, uint8_t* parsed_cmd, uint8_t (*argv)[MAX_ARGUMENT_SIZE]) { int32_t i,j, command_length; diff --git a/student-distrib/rtc.c b/student-distrib/rtc.c index 08f0457..c99778c 100644 --- a/student-distrib/rtc.c +++ b/student-distrib/rtc.c @@ -84,7 +84,7 @@ int32_t rtc_read(int32_t fd, void* buf, int32_t nbytes) /* Set flag */ rtc_flag[running_terminal] = 1; - //interrupt_flag = 1; + sti(); /* Wait until interrupt handler clears flag */ diff --git a/student-distrib/syscall.c b/student-distrib/syscall.c index f581486..06eb2c7 100644 --- a/student-distrib/syscall.c +++ b/student-distrib/syscall.c @@ -35,7 +35,7 @@ int32_t halt (uint8_t status) { clear_pid(pcb_cur->pid); total_prog_count--; - terminal[pcb_cur->running_terminal].terminal_prog_count--; + terminal[running_terminal].terminal_prog_count--; } if(terminal[running_terminal].terminal_prog_count == 0) @@ -212,13 +212,6 @@ int32_t execute(const uint8_t* command) terminal[running_terminal].pcb = pcb_ptr; - if(strncmp("shell", (int8_t *) parsed_cmd, 5) == 0) - terminal[running_terminal].pcb->shell_flag = 1; - - //printf("[EXE] using pcb = %x\n", terminal[running_terminal].pcb); - - //printf("[EXE] set pcb ebp to %x , esp to %x\n", terminal[running_terminal].pcb->current_ebp, terminal[running_terminal].pcb->current_esp); - //printf("[EXE] should be ebp %x , esp %x\n", temp_ebp, temp_esp); //--------------------- 6: scheduling initilization ----------------------- diff --git a/student-distrib/types.h b/student-distrib/types.h index c32f740..3cf826c 100644 --- a/student-distrib/types.h +++ b/student-distrib/types.h @@ -143,9 +143,6 @@ typedef struct pcb { file_object_t fd[MAX_FILE_NUM]; /* File descriptor array */ - int32_t running_terminal; - int32_t shell_flag; - int32_t scheduler_flag; uint32_t pid; /* Holds current process ID */ -- GitLab