Project 5 FAQ
From CS415
Q. Disk handler implementation: What arguments does the disk handler have ?. How should I install the disk handler?
The disk driver code (disk.[hc]) raises a disk interrupt as each read/write request is processed. The disk interrupt is processed by the disk handler that receives an argument of disk_interrupt_arg_t type. The disk handler is installed using install_disk_handler function. Before sending requests to a disk, the disk should be created using disk_create function. A simple example of using a disk by the minithread system is given in disk_test.c.
Q. Read/Write disk operations: How does the minithread system send write/read operations to the disk driver?. How does the minithread that asks a disk operation behave ?
A minithread asks a write/read block operation using disk_read_block/disk_write_block functions. The disk operation request is assigned an I/O structure. The I/O structure is used in the disk handler to wake up the blocked minithread that waits for the result of the request.
Q. Size of directory: Would limiting the size of a directory to 1 data block limit the size of directories too much?
Yes, this is an unnecessary restriction. Your directories should accomodate any number of entries.
Q. Number of INODEs per data block: When storing inodes, do we want to fit as many inodes as possible into a data block, or allocate one inode for each data block?
This is a design question, and by project 6, these types of questions are up to you.
But let me reiterate the design principles to keep in mind:
- You will want to design a system whose implementation is not overly complex. If it isn't working by the deadline, it might as well not exist.
- You will want to store the inodes in a place where you can readily find them.
- You will want to avoid wasting space.
So, if I were you, I would initially place each inode on a separate block. This wastes space, but calculating the location of an inode is a breeze. Once this works, you can modify the filesystem to pack N inodes into a single disk block.