Move problem 1-2 (join) into project 2 as the "wait" system call.
[pintos-anon] / grading / vm / page-merge-seq.c
index 3abe9e26726a0f189bd8022f19a85cea541abff5..34d14f66cb49238cd03aaad21731fce9a66a727c 100644 (file)
@@ -3,12 +3,14 @@
 #ifdef PINTOS
 #include <syscall.h>
 #else
-#include <unistd.h>
-#include <fcntl.h>
+#include "posix-compat.h"
 #endif
-#include "arc4.h"
+#include "../lib/arc4.h"
 
-#define CHUNK_SIZE (63 * 1024)                  /* Max file size. */
+/* This is the max file size for an older version of the Pintos
+   file system that had 126 direct blocks each pointing to a
+   single disk sector.  We could raise it now. */
+#define CHUNK_SIZE (126 * 512)
 #define CHUNK_CNT 16                            /* Number of chunks. */
 #define DATA_SIZE (CHUNK_CNT * CHUNK_SIZE)      /* Buffer size. */
 
@@ -33,13 +35,11 @@ init (void)
 
 /* Sort each chunk of buf1 using a subprocess. */
 static void
-sort (void)
+sort_chunks (void)
 {
   size_t i;
 
-#ifdef PINTOS
   create ("buffer", CHUNK_SIZE);
-#endif
   for (i = 0; i < CHUNK_CNT; i++) 
     {
       int fd;
@@ -47,11 +47,8 @@ sort (void)
       printf ("(page-merge-seq) sort chunk %zu\n", i);
 
       /* Write this chunk to a file. */
-#ifdef PINTOS
       fd = open ("buffer");
-#else
-      fd = open ("buffer", O_WRONLY | O_CREAT, 0660);
-#endif
+
       if (fd < 0) 
         {
           printf ("(page-merge-seq) open() failed\n");
@@ -61,28 +58,20 @@ sort (void)
       close (fd);
 
       /* Sort with subprocess. */
-#ifdef PINTOS
-      pid_t child = exec ("child-sort");
+      pid_t child = exec ("child-sort buffer");
       if (child == -1) 
         {
           printf ("(page-merge-seq) exec() failed\n");
           exit (1);
         }
-      if (join (child) != 0x123) 
+      if (wait (child) != 123) 
         {
-          printf ("(page-merge-seq) join(exec()) returned bad value\n");
+          printf ("(page-merge-seq) wait(exec()) returned bad value\n");
           exit (1);
         }
-#else
-      system ("./child-sort");
-#endif
 
       /* Read chunk back from file. */
-#ifdef PINTOS
       fd = open ("buffer");
-#else
-      fd = open ("buffer", O_RDONLY);
-#endif
       if (fd < 0) 
         {
           printf ("(page-merge-seq) open() failed\n");
@@ -161,7 +150,7 @@ main (void)
 {
   printf ("(page-merge-seq) begin\n");
   init ();
-  sort ();
+  sort_chunks ();
   merge ();
   verify ();
   printf ("(page-merge-seq) end\n");