Add syscall tracing to the first xv6 lab
This commit is contained in:
parent
c0b1c239ea
commit
808811f9f4
|
@ -215,16 +215,57 @@ initial file system. You just ran one of them: <tt>ls</tt>.
|
||||||
to declare an argv.
|
to declare an argv.
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
<h2>System call tracing</h2>
|
||||||
|
|
||||||
|
<p>In this exercise you will modify the xv6 kernel to print out a line
|
||||||
|
for each system call invocation. It is enough to print the name of the
|
||||||
|
system call and the return value; you don't need to print the system
|
||||||
|
call arguments.
|
||||||
|
|
||||||
|
<p>
|
||||||
|
When you're done, you should see output like this when booting
|
||||||
|
xv6:
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
...
|
||||||
|
fork -> 2
|
||||||
|
exec -> 0
|
||||||
|
open -> 3
|
||||||
|
close -> 0
|
||||||
|
$write -> 1
|
||||||
|
write -> 1
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
That's init forking and execing sh, sh making sure only two file descriptors are
|
||||||
|
open, and sh writing the $ prompt. (Note: the output of the shell and the
|
||||||
|
system call trace are intermixed, because the shell uses the write syscall to
|
||||||
|
print its output.)
|
||||||
|
|
||||||
|
<p> Hint: modify the syscall() function in kernel/syscall.c.
|
||||||
|
|
||||||
|
<p>Run the programs you wrote in the previous exercises and inspect
|
||||||
|
the system call trace. Are there many system calls? Which systems
|
||||||
|
calls correspond to code in the applications you wrote above?
|
||||||
|
|
||||||
|
<p>Optional: print the system call arguments.
|
||||||
|
|
||||||
<h2>Optional: modify the shell</h2>
|
<h2>Optional: modify the shell</h2>
|
||||||
|
|
||||||
<p>Modify the shell to support wait.
|
There are endless ways in which the shell could be extended. Here are
|
||||||
|
some suggestions:
|
||||||
|
|
||||||
<p>Modify the shell to support lists of commands, separated by ";"
|
<ul>
|
||||||
|
|
||||||
<p>Modify the shell to support sub-shells by implementing "(" and ")"
|
<li>Modify the shell to support wait.
|
||||||
|
|
||||||
<p>Modify the shell to allow users to edit the command line
|
<li>Modify the shell to support lists of commands, separated by ";"
|
||||||
|
|
||||||
|
<li>Modify the shell to support sub-shells by implementing "(" and ")"
|
||||||
|
|
||||||
|
<li>Modify the shell to allow users to edit the command line
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
Loading…
Reference in a new issue