Submit your solutions before the beginning of the next lecture to the submission web site.
This homework requres recent code; please update your xv6 repo:
athena% cd ~/6.828/xv6 athena% git pullIf you have any local changes, you may need to commit them before pulling.
When you're done, you should see output like this when booting xv6:
... fork -> 2 exec -> 0 open -> 3 close -> 0 $write -> 1 write -> 1
That's init forking and execing sh, sh making sure only two file descriptors are open, and sh writing the $ prompt.
Hint: modify the syscall() function in syscall.c.
Challenge: print the system call arguments.
You should create a user-level program that calls your new date system call; here's some source you should put in date.c:
#include "types.h" #include "user.h" #include "date.h" int main(int argc, char *argv[]) { struct rtcdate r; if (date(&r)) { printf(2, "date failed\n"); exit(); } // your code to print the time in any format you like... exit(); }
In order to make your new date program available to run from the xv6 shell, add _date to the UPROGS definition in Makefile.
Your strategy for making a date system call should be to clone all of the pieces of code that are specific to some existing system call, for example the "uptime" system call. You should grep for uptime in all the source files, using grep -n uptime *.[chS].
When you're done, typing date to an xv6 shell prompt should print the current UTC time.
Write down a few words of explanation for each of the files you had to modify in the process of creating your date system call.
Challenge: add a dup2() system call.
Submit: Your explanations of the modifications for date in a file named hwN.txt where N is the homework number as posted on the schedule.