From 58a9cbaa0d36c7abdb4caafe5927e4e386eb0e96 Mon Sep 17 00:00:00 2001 From: Abinader <abinade2@illinois.edu> Date: Sun, 29 Apr 2018 12:55:11 -0500 Subject: [PATCH] started commenting --- student-distrib/syscall.c | 219 +++++++++++++++++++------------------- 1 file changed, 111 insertions(+), 108 deletions(-) diff --git a/student-distrib/syscall.c b/student-distrib/syscall.c index f0f0011..f581486 100644 --- a/student-distrib/syscall.c +++ b/student-distrib/syscall.c @@ -1,20 +1,22 @@ #include "syscall.h" -/* - *The halt system call +/* The halt system call * - *DESCRIPTION: This function terminates a process, returning the specified value to its parent process. - *INPUT: status -- - *RETURN: + * int32_t halt (uint8_t status) * + * DESCRIPTION: This function terminates a process, returning the specified value to its parent process. + * + * INPUT: status -- + * + * RETURN: */ -int32_t halt (uint8_t status){ +int32_t halt (uint8_t status) +{ int i; cli(); pcb_t* pcb_cur = terminal[running_terminal].pcb; - //pcb_t* pcb_cur = current_pcb(); // printf("[halt] running_terminal = %d\n", running_terminal); @@ -71,20 +73,24 @@ int32_t halt (uint8_t status){ return 0; } -/* - *The execute system call - * - *DESCRIPTION: This function attempts to load and execute a new program, - * handing off the processor to the new program until it terminates. - *INPUT: command -- a space-separated sequence of words. The first word is the file name - * of the program to be executed, and the rest of the command—stripped - * of leading spaces—should be provided to the new program on request - * via the getargs system call. - *RETURN: -1 if the command cannot be executed. (for example, program does not exist / the file not executable,) - * 256 if the program dies by an exception. - * 0-255 if the program executes a halt system call. (in which case the value returned is that given by the program’s call to halt) +/* The execute system call + * + * int32_t execute(const uint8_t* command) + * + * DESCRIPTION: This function attempts to load and execute a new program, + * handing off the processor to the new program until it terminates. + * + * INPUT: command -- a space-separated sequence of words. The first word is the file name + * of the program to be executed, and the rest of the command—stripped + * of leading spaces—should be provided to the new program on request + * via the getargs system call. + * + * RETURN: -1 -- if the command cannot be executed. (for example, program does not exist / the file not executable,) + * 256 -- if the program dies by an exception. + * 0-255 -- if the program executes a halt system call. (in which case the value returned is that given by the program’s call to halt) */ -int32_t execute(const uint8_t* command){ +int32_t execute(const uint8_t* command) +{ cli(); @@ -231,41 +237,42 @@ int32_t execute(const uint8_t* command){ return 0; } -/* - *The read system call +/* The read system call * - *DISCRIPTION: This function reads data from the keyboard, a file, device (RTC), or directory. - * This function use a jump table referenced by the task’s file array to call - * from a generic handler for this call into a file-type-specific function. - * This jump table is inserted into the file array on the open system call. + * int32_t read(int32_t fd_n, void* buf, int32_t nbytes) * - * case 1 - keyboard : return data from one line that has been terminated by pressing - * Enter, or as much as fits in the buffer from one such line. - * The line returned should include the line feed character. + * DESCRIPTION: This function reads data from the keyboard, a file, device (RTC), or directory. + * This function use a jump table referenced by the task’s file array to call + * from a generic handler for this call into a file-type-specific function. + * This jump table is inserted into the file array on the open system call. * - * case 2 - file : data should be read to the end of the file or the end of the - * buffer provided, whichever occurs sooner. + * case 1 - keyboard : return data from one line that has been terminated by pressing + * Enter, or as much as fits in the buffer from one such line. + * The line returned should include the line feed character. * - * case 3 - device(RTC): this call should always return 0, but only after an interrupt - * has occurred (set a flag and wait until the interrupt handler - * clears it, then return 0). + * case 2 - file : data should be read to the end of the file or the end of the + * buffer provided, whichever occurs sooner. * - * case 4 - directory : only the filename should be provided (as much as fits, max 32 bytes), - * and subsequent reads should read from successive directory entries - * until the last is reached, at which point read should repeatedly - * return 0. + * case 3 - device(RTC): this call should always return 0, but only after an interrupt + * has occurred (set a flag and wait until the interrupt handler + * clears it, then return 0). * - *INPUT: fd -- file discriptor - * buf -- buffer that store the file - * nbytes -- the number of bytes that need to read + * case 4 - directory : only the filename should be provided (as much as fits, max 32 bytes), + * and subsequent reads should read from successive directory entries + * until the last is reached, at which point read should repeatedly + * return 0. + * + * INPUT: fd -- file discriptor + * buf -- buffer that store the file + * nbytes -- the number of bytes that need to read * - *RETURN: 1. the number of bytes read when success - * 2. 0 when the initial file position is at or beyond the end of file, - * for normal files and the directory - * 3. -1 when there fd are out of range or indicate to STDOUT_FD + * RETURN: 1. the number of bytes read when success + * 2. 0 when the initial file position is at or beyond the end of file, + * for normal files and the directory + * 3. -1 when there fd are out of range or indicate to STDOUT_FD */ -int32_t read (int32_t fd_n, void* buf, int32_t nbytes){ - +int32_t read(int32_t fd_n, void* buf, int32_t nbytes) +{ int32_t ret; if (fd_check(fd_n) < 0 || fd_n == STDOUT_FD) return -1; // invalid fd @@ -274,15 +281,9 @@ int32_t read (int32_t fd_n, void* buf, int32_t nbytes){ if (nbytes < 0) return -1; // invalid nbytes - //terminal[running_terminal].pcb = current_pcb(); - - /* Enable for keyboard interrupts */ - //sti(); - ret = terminal[running_terminal].pcb->fd[fd_n].fileop_ptr.read(fd_n, buf, nbytes); return ret; - } /* @@ -391,55 +392,55 @@ int32_t open (const uint8_t* filename){ return fd; } -/* - *The close system call - * - *DISCRIPTION: This function closes the specified file descriptor and makes it available - * for return from later calls to open. - *NOTE: the default descriptors (0 for input and 1 for output) can't be closed - *INPUT: fd -- file discriptor for the file that we want to close - *RETURN: 1. -1 when Trying to close an invalid descriptor - * 2. 0 when successful closes the file. +/* The close system call + * + * int32_t close (int32_t fd) + * + * DESCRIPTION: This function closes the specified file descriptor and makes it available + * for return from later calls to open. + * + * NOTE: the default descriptors (0 for input and 1 for output) can't be closed + * + * INPUT: fd -- file discriptor for the file that we want to close + * + * RETURN: -1 -- when Trying to close an invalid descriptor + * 0 -- when successful closes the file. */ -int32_t close (int32_t fd){ +int32_t close (int32_t fd) +{ + if(fd_check(fd) < 0 || fd < USER_FILE_START) + return -1; // invalid fd - if (fd_check(fd) < 0 || fd < USER_FILE_START) return -1; // invalid fd + terminal[running_terminal].pcb->fd[fd].fileop_ptr.close(fd); - //terminal[ running_terminal].pcb = current_pcb(); - - //sti(); - - terminal[ running_terminal].pcb->fd[fd].fileop_ptr.close(fd); - fd_clear(fd); - + return 0; - } /* *The getargs system call * - *DISCRIPTION: This function reads the program’s command line arguments into a user-level buffer. - * These arguments are stored as part of the task data when a new program is loaded. - * Here they are merely copied into user space. + * DESCRIPTION: This function reads the program’s command line arguments into a user-level buffer. + * These arguments are stored as part of the task data when a new program is loaded. + * Here they are merely copied into user space. * - *INPUT: buf -- buffer that holds the file - * nbytes -- number of bytes that we want to operate + * INPUT: buf -- buffer that holds the file + * nbytes -- number of bytes that we want to COPY * - *RETURN: -1 If there are no arguments, or if the arguments and a terminal NULL (0-byte) do not fit in the buffer. + * RETURN: -1 If there are no arguments, or if the arguments and a terminal NULL (0-byte) do not fit in the buffer. * - *NOTE: The shell does not request arguments, but you should probably still - * initialize the shell task’s argument data to the empty string. + * NOTE: The shell does not request arguments, but you should probably still + * initialize the shell task’s argument data to the empty string. */ int32_t getargs (uint8_t* buf, int32_t nbytes){ uint8_t* argument; //terminal[ running_terminal].pcb = current_pcb(); - argument = (uint8_t*) ( terminal[ running_terminal].pcb->argv); + argument = (uint8_t*) (terminal[running_terminal].pcb->argv); - if( terminal[ running_terminal].pcb->arg_num == 0 || nbytes <= 0 ) + if( terminal[running_terminal].pcb->arg_num == 0 || nbytes <= 0 ) { //printf("[getargs] return -1\n"); return -1; //If there are no arguments @@ -458,25 +459,26 @@ int32_t getargs (uint8_t* buf, int32_t nbytes){ return 0; } -/* - *The vidmap system call +/* int32_t vidmap (uint8_t** screen_start) * - *DESCRIPTION: This function maps the text-mode video memory into user space at a pre-set virtual address. - * Although the address returned is always the same, it should be written into the memory - * location provided by the caller (which must be checked for validity). + * The vidmap system call * - *INPUT: screen_start -- + * DESCRIPTION: This function maps the text-mode video memory into user space at a pre-set virtual address. + * Although the address returned is always the same, it should be written into the memory + * location provided by the caller (which must be checked for validity). * - *RETURN: -1 If the location is invalid. + * INPUT: screen_start -- * - *NOTE:1. To avoid adding kernel-side exception handling for this sort of check, you can simply - * check whether the address falls within the address range covered by the single user-level page. - * 2. The video memory will require you to add another page mapping for the program, in this case - * a 4 kB page. It is not ok to simply change the permissions of the video page located < 4MB - * and pass that address + * RETURN: -1 If the location is invalid. + * + * NOTE: 1. To avoid adding kernel-side exception handling for this sort of check, you can simply + * check whether the address falls within the address range covered by the single user-level page. + * 2. The video memory will require you to add another page mapping for the program, in this case + * a 4 kB page. It is not ok to simply change the permissions of the video page located < 4MB + * and pass that address */ -int32_t vidmap (uint8_t** screen_start){ - +int32_t vidmap (uint8_t** screen_start) +{ /* Check for valid argument */ if ( screen_start == NULL) return -1; @@ -492,27 +494,28 @@ int32_t vidmap (uint8_t** screen_start){ *screen_start = (uint8_t *)(0x8400000); - //screen_start = terminal[ running_terminal].vid_mem; - - return 0x8400000; } /* - *The set handler system calls + * The set handler system calls + * + * DESCRIPTION: This function are related to signal handling and are discussed in the section Signals below. + * + * INPUT: signum -- + * handler_address -- * - *DISCRIPTION: This function are related to signal handling and are discussed in the section Signals below. - *INPUT: signum -- - * handler_address -- - *RETURN: + * RETURN: * - *NOTE: Even if your operating system does not support signals, you must support these system calls; - * in such a case, however, you may immediately return failure from these calls. + * NOTE: Even if your operating system does not support signals, you must support these system calls; + * in such a case, however, you may immediately return failure from these calls. */ -int32_t set_handler (int32_t signum, void* handler_address){ +int32_t set_handler (int32_t signum, void* handler_address) +{ return -1; } -int32_t sigreturn (void){ +int32_t sigreturn (void) +{ return -1; } -- GitLab