From 808811f9f49a21ae1a00b2e5805cf62cc31c0518 Mon Sep 17 00:00:00 2001 From: Frans Kaashoek Date: Thu, 25 Jul 2019 07:47:22 -0400 Subject: Add syscall tracing to the first xv6 lab --- labs/xv6.html | 51 ++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 5 deletions(-) (limited to 'labs') diff --git a/labs/xv6.html b/labs/xv6.html index de18ac7..7699b06 100644 --- a/labs/xv6.html +++ b/labs/xv6.html @@ -215,17 +215,58 @@ initial file system. You just ran one of them: ls. to declare an argv. +

System call tracing

-

Optional: modify the shell

+

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. + +

+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. (Note: the output of the shell and the +system call trace are intermixed, because the shell uses the write syscall to +print its output.) -

Modify the shell to support wait. +

Hint: modify the syscall() function in kernel/syscall.c. + +

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? + +

Optional: print the system call arguments. -

Modify the shell to support lists of commands, separated by ";" +

Optional: modify the shell

-

Modify the shell to support sub-shells by implementing "(" and ")" +There are endless ways in which the shell could be extended. Here are +some suggestions: -

Modify the shell to allow users to edit the command line +

+ -- cgit v1.2.3