Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

Cleaned code, removed excessive shellscripts and added lab documentation

  • Loading branch information...
commit e6f76ac6bf04a736f899844db491314e87459c3f 1 parent bd95660
Patron authored
31 lab_documentation/lab13.txt
... ... @@ -0,0 +1,31 @@
  1 +1) Vilka funktioner är involverade i att avsluta en tråd? En process?
  2 + I kronologisk ordning:
  3 + - thread_exit ();
  4 + - process_cleanup();
  5 +
  6 +
  7 +2) Vilken uppgift har respektive funktion?
  8 + - thread_exit() stänger av den nuvarande tråden medan process_cleanup() frigör minnet som processen har allokerats
  9 +
  10 +3) I vilken ordning exekveras de?
  11 + - Se fråga 1.
  12 +
  13 +4) I vilken fil är parametrarna till varje systemanrop specificerad?
  14 + - lib/syscall-nr.h
  15 + - I lib/syscall.c finns det specifierat hur många argument ett syscall kräver och på så vis
  16 + kan man hämta ut alla med hjälp av EAX och storleken på pekare.
  17 +
  18 +5) Var i Pintos minne kan du hitta parametrarna?
  19 +
  20 + - Vid ett systemanrop kommer syscall-handlern att köras. Till den kommer en interrupt frame att skickas
  21 + som innehåller en pekare EAX. EAX pekar på första parametern och eftersom vi vet hur många argument varje
  22 + syscall tar genom uppslagning av systemanropsnummer i
  23 + const int argc[] = {.....}
  24 + kan vi enkelt stega genom minnet och hitta parametrarna.
  25 +
  26 +6) Vad skall operativsystemet göra med parametern till exit (exit status)?
  27 + - OS ska ge spårutskrift beroende på vilken exit-status processen fick.
  28 +
  29 +7) Vad händer när main returnerar?
  30 + - Ett systemanrop med SYS_EXIT utförs. mains returvärde pekas på av EAX.
  31 +
8 src/userprog/process.c
@@ -281,20 +281,12 @@ void* setup_main_stack(const char* command_line, void* stack_top)
281 281 // including the terminating null character.
282 282 strlcpy(cmd_line_on_stack, token, strlen(token) + 1);
283 283
284   - //printf("# esp1 = %08x\n", (unsigned)cur_argv_pointer);
285   - //printf("# esp2 = %08x\n", (unsigned)cmd_line_on_stack);
286   - //printf("# esp1 = %08x\n", (unsigned)*cur_argv_pointer);
287   - //printf("# esp2 = %08x\n", (unsigned)*cmd_line_on_stack);
288   -
289   - //cur_argv_pointer = cmd_line_on_stack;
290 284 *cur_argv_pointer++ = cmd_line_on_stack;
291 285
292 286
293 287 cmd_line_on_stack += (strlen(token) + 1) * sizeof(char);
294   - // cur_argv_pointer = (char*)((unsigned)cur_argv_pointer + 4);
295 288
296 289 STACK_DEBUG ("TOKEN: '%s'\n", token);
297   - //argc++;
298 290 }
299 291
300 292 /* build argv array and insert null-characters after each word */
1  start_pintos.sh
... ... @@ -1 +0,0 @@
1   -cd src/userprog/build/; pintos -p ../../examples/sumargv -a sumargv -v -k --fs-disk=2 -- -f -q run sumargv

0 comments on commit e6f76ac

Please sign in to comment.
Something went wrong with that request. Please try again.