X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=solutions%2Fp3.patch;h=3e7fb8ba63b619728ac53c63fc6f01574892078e;hb=75d2fa82ec381cb68174bf093e794b0aeee81ca1;hp=c7c9df84710d74f727dcf2d5807344fc2f0ed218;hpb=6a67e72c73404a4f0e999609478a9e1857d93d26;p=pintos-anon diff --git a/solutions/p3.patch b/solutions/p3.patch index c7c9df8..3e7fb8b 100644 --- a/solutions/p3.patch +++ b/solutions/p3.patch @@ -358,12 +358,12 @@ diff -u src/userprog/process.c~ src/userprog/process.c +#include "vm/page.h" +#include "vm/frame.h" - static thread_func execute_thread NO_RETURN; + static thread_func start_process NO_RETURN; -static bool load (const char *cmdline, void (**eip) (void), void **esp); +static bool load (const char *cmd_line, void (**eip) (void), void **esp); + +/* Data structure shared between process_execute() in the -+ invoking thread and execute_thread() in the newly invoked ++ invoking thread and start_process() in the newly invoked + thread. */ +struct exec_info + { @@ -396,12 +396,12 @@ diff -u src/userprog/process.c~ src/userprog/process.c + sema_init (&exec.load_done, 0); /* Create a new thread to execute FILE_NAME. */ -- tid = thread_create (file_name, PRI_DEFAULT, execute_thread, fn_copy); +- tid = thread_create (file_name, PRI_DEFAULT, start_process, fn_copy); - if (tid == TID_ERROR) - palloc_free_page (fn_copy); + strlcpy (thread_name, file_name, sizeof thread_name); + strtok_r (thread_name, " ", &save_ptr); -+ tid = thread_create (thread_name, PRI_DEFAULT, execute_thread, &exec); ++ tid = thread_create (thread_name, PRI_DEFAULT, start_process, &exec); + if (tid != TID_ERROR) + { + sema_down (&exec.load_done); @@ -417,15 +417,15 @@ diff -u src/userprog/process.c~ src/userprog/process.c /* A thread function that loads a user process and starts it running. */ static void --execute_thread (void *file_name_) -+execute_thread (void *exec_) +-start_process (void *file_name_) ++start_process (void *exec_) { - char *file_name = file_name_; + struct exec_info *exec = exec_; struct intr_frame if_; bool success; -@@ -59,10 +81,28 @@ execute_thread (void *file_name_) +@@ -59,10 +81,28 @@ start_process (void *file_name_) if_.gs = if_.fs = if_.es = if_.ds = if_.ss = SEL_UDSEG; if_.cs = SEL_UCSEG; if_.eflags = FLAG_IF | FLAG_MBS; @@ -457,7 +457,7 @@ diff -u src/userprog/process.c~ src/userprog/process.c if (!success) thread_exit (); -@@ -76,18 +116,47 @@ execute_thread (void *file_name_) +@@ -76,18 +116,47 @@ start_process (void *file_name_) NOT_REACHED (); }