summaryrefslogtreecommitdiff
path: root/web/xv6-disk.html
diff options
context:
space:
mode:
Diffstat (limited to 'web/xv6-disk.html')
-rw-r--r--web/xv6-disk.html63
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 &gt;a
+ echo &gt;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 &gt;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>