Fast File System (Improve File System Performance)
OS代写 The basic Nachos FileSystemmust be implemented. Implement the dividing of a file into blocks and blocks and fragments.
- No user programs are required for this project.
- Implement the dividing of a file into blocks and blocks and fragments.
- The basic Nachos FileSystemmust be implemented.
- The DISK must be logically divided into cylinder groups.
- File growth algorithm must match the description in the paper.
- A kernel process that writes to a file that demonstrates the growth algorithm should be implemented.OS代写
- Each cylinder group should keep track of its local information.
- Attempt to store all i-nodes for directory in the same cylinder group.
- You need to present sufficient test cases to show the correctness of your File System.
Basic Nachos FilesSystem
The files to focus on are:
- h, filesys.cc — top-level interface to the file system.
- h, directory.cc — translates file names to disk file headers; the directory data structure is stored as a file.
- h, filehdr.cc — manages the data structure representing the layout of a file’s data on disk.
- h, openfile.cc — translates file reads and writes to disk sector reads and writes.
- h, synchdisk.cc — provides synchronous access to the asynchronous physical disk, so that threads block until their requests have completed.OS代写
- h, disk.cc — emulates a physical disk, by sending requests to read and write disk blocks to a UNIX file and then generating an interrupt after some period of time. The details of how to make read and write requests varies tremendously from disk device to disk device; in practice, you would want to hide these details behind something like the abstraction provided by this module.
Introduction
Nachos file system has a UNIX-like interface, so you may also wish to read the UNIX man pages for creat, open, close, read, write, lseek, and unlink (e.g., type “man creat”). Nachos file system has calls that are similar (but not identical) to these calls; the file system translates these calls into physical disk operations. Create (like UNIX creat), Open (open), and Remove (unlink) are defined on the FileSystem object, since they involve manipulating file names and directories. FileSystem::Open returns a pointer to an OpenFile object, which is used for direct file operations such as Seek (lseek), Read (read), Write (write). An open file is “closed” by deleting the OpenFile object.OS代写
Many of the data structures in our file system are stored both in memory and on disk. To provide some uniformity, all these data structures have a “FetchFrom” procedure that reads the data off disk and into memory, and a “WriteBack” procedure that stores the data back to disk. Note that the in memory and on disk representations do not have to be identical.OS代写
File System On UNIX
→ Complete the basic file system by adding synchronizationto allow multiple threads to use file system concurrently.OS代写
Currently, the file system code assumes it is accessed by a single thread at a time. In addition to ensuring that internal data structures are not corrupted, your file system must observe the following constraints (these are the same as in UNIX):
√ The same file may be read/written by more than one thread concurrently.OS代写
Each thread separately opens the file, giving it its own private seek position within the file. Thus, two threads can both sequentially read through the same file without interfering with one another.
√ All file system operations must be atomic and serializable.OS代写
For example, if one thread is in the middle of a file write, a thread concurrently reading the file will see either all of the change or none of it. Further, if the OpenFile::Write operation finishes before the call to OpenFile::Read is started, the Read must reflect the modified version of the file.
√ When a file is deleted, threads with the file already open may continue to read and write the file until they close the file.OS代写
Deleting a file (FileSystem::Remove) must prevent further opens on that file, but the disk blocks for the file cannot be reclaimed until the file has been closed by all threads that currently have the file open.
√ Hint: to do this part, you will probably find you need to maintain a table of open files.OS代写
→ Modify the file system to allow the maximum size of a file to be as large as the disk (128Kbytes).OS代写
In the basic file system, each file is limited to a file size of just under 4Kbytes. Each file has a header (class FileHeader) that is a table of direct pointers to the disk blocks for that file. Since the header is stored in one disk sector, the maximum size of a file is limited by the number of pointers that will fit in one disk sector. Increasing the limit to 128KBytes will probably but not necessarily require you to implement doubly indirect blocks.
→ Implement dynamically extensible files. In the basic file system, the file size is specified when the file is created.OS代写
One advantage of this is that the FileHeader data structure, once created, never changes. In UNIX and most other file systems, a file is initially created with size 0 and is then expanded every time a write is made off the end of the file. Modify the file system to allow this; as one test case, allow the directory file to expand beyond its current limit of ten files. In doing this part, be careful that concurrent accesses to the file header remain properly synchronized.