Homework: Files and Disk I/O

Read: bio.c, fd.c, fs.c, and ide.c

This homework should be turned in at the beginning of lecture.

File and Disk I/O

Insert a print statement in bwrite so that you get a print every time a block is written to disk:

  cprintf("bwrite sector %d\n", sector);

Build and boot a new kernel and run these three commands at the shell:

  echo >a
  echo >a
  rm a
  mkdir d
(You can try rm d if you are curious, but it should look almost identical to rm a.)

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 second echo >a:

$ echo >a
bwrite sector 121  # writei  (data block)
bwrite sector 3    # iupdate (inode block)
$ 

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.

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.

This completes the homework.