diff options
Diffstat (limited to 'web/xv6-disk.html')
-rw-r--r-- | web/xv6-disk.html | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/web/xv6-disk.html b/web/xv6-disk.html new file mode 100644 index 0000000..65bcf8f --- /dev/null +++ b/web/xv6-disk.html @@ -0,0 +1,63 @@ +<html> +<head> +<title>Homework: Files and Disk I/O</title> +</head> +<body> + +<h1>Homework: Files and Disk I/O</h1> + +<p> +<b>Read</b>: bio.c, fd.c, fs.c, and ide.c + +<p> +This homework should be turned in at the beginning of lecture. + +<p> +<b>File and Disk I/O</b> + +<p>Insert a print statement in bwrite so that you get a +print every time a block is written to disk: + +<pre> + cprintf("bwrite sector %d\n", sector); +</pre> + +<p>Build and boot a new kernel and run these three commands at the shell: +<pre> + echo >a + echo >a + rm a + mkdir d +</pre> + +(You can try <tt>rm d</tt> if you are curious, but it should look +almost identical to <tt>rm a</tt>.) + +<p>You should see a sequence of bwrite prints after running each command. +Record the list and annotate it with the calling function and +what block is being written. +For example, this is the <i>second</i> <tt>echo >a</tt>: + +<pre> +$ echo >a +bwrite sector 121 # writei (data block) +bwrite sector 3 # iupdate (inode block) +$ +</pre> + +<p>Hint: the easiest way to get the name of the +calling function is to add a string argument to bwrite, +edit all the calls to bwrite to pass the name of the +calling function, and just print it. +You should be able to reason about what kind of +block is being written just from the calling function. + +<p>You need not write the following up, but try to +understand why each write is happening. This will +help your understanding of the file system layout +and the code. + +<p> +<b>This completes the homework.</b> + +</body> |