project6(( file(system(project6:(file(system(•...
TRANSCRIPT
![Page 1: Project6(( File(System(Project6:(File(System(• Goal:(Implementasimple(UNIXlike(file(system(with(ahierarchical(directory(structure.(• Read(the(projectspec(for(the(details](https://reader033.vdocuments.site/reader033/viewer/2022053010/5f0dc42f7e708231d43bfb17/html5/thumbnails/1.jpg)
Project 6 File System
COS 318 Fall 2015
![Page 2: Project6(( File(System(Project6:(File(System(• Goal:(Implementasimple(UNIXlike(file(system(with(ahierarchical(directory(structure.(• Read(the(projectspec(for(the(details](https://reader033.vdocuments.site/reader033/viewer/2022053010/5f0dc42f7e708231d43bfb17/html5/thumbnails/2.jpg)
Project 6: File System
• Goal: Implement a simple UNIX-‐like file system with a hierarchical directory structure.
• Read the project spec for the details. • Get a fresh copy of the start code from the lab
machines (/u/318/code/project6/). • Start as early as you can. This is a long project and
you will have to write a lot of code.
![Page 3: Project6(( File(System(Project6:(File(System(• Goal:(Implementasimple(UNIXlike(file(system(with(ahierarchical(directory(structure.(• Read(the(projectspec(for(the(details](https://reader033.vdocuments.site/reader033/viewer/2022053010/5f0dc42f7e708231d43bfb17/html5/thumbnails/3.jpg)
Project 6: Schedule
• Design Review: - No design review! - You will submit a pdf file with your project that
describes the details about the design of your file system.
- Look at the “Design Document” secYon of the project descripYon for the content of the document that you need to write.
• Due date: Tuesday 1/12/2016 (Dean’s date), 5:00pm.
![Page 4: Project6(( File(System(Project6:(File(System(• Goal:(Implementasimple(UNIXlike(file(system(with(ahierarchical(directory(structure.(• Read(the(projectspec(for(the(details](https://reader033.vdocuments.site/reader033/viewer/2022053010/5f0dc42f7e708231d43bfb17/html5/thumbnails/4.jpg)
Project 6: Overview
• Implement a simple UNIX-‐like file system with a hierarchical directory structure
• Manage disk space, as files and directories grow and shrink.
• Implement commands and system calls to browse the directory structure, create new files and directories, delete them, etc.
• Don’t need to worry about concurrency, permissions, or high performance.
![Page 5: Project6(( File(System(Project6:(File(System(• Goal:(Implementasimple(UNIXlike(file(system(with(ahierarchical(directory(structure.(• Read(the(projectspec(for(the(details](https://reader033.vdocuments.site/reader033/viewer/2022053010/5f0dc42f7e708231d43bfb17/html5/thumbnails/5.jpg)
API
• Disk format • File - open, close, read, write, seek - link and unlink (delete a file) - stat
• Directory - make, remove, stat, etc.
• Shell commands - ls and chdir (cd)
![Page 6: Project6(( File(System(Project6:(File(System(• Goal:(Implementasimple(UNIXlike(file(system(with(ahierarchical(directory(structure.(• Read(the(projectspec(for(the(details](https://reader033.vdocuments.site/reader033/viewer/2022053010/5f0dc42f7e708231d43bfb17/html5/thumbnails/6.jpg)
Disk Layout
This project in a 1MB file named “disk”
Space between divisions is not representaYve of actual size.
![Page 7: Project6(( File(System(Project6:(File(System(• Goal:(Implementasimple(UNIXlike(file(system(with(ahierarchical(directory(structure.(• Read(the(projectspec(for(the(details](https://reader033.vdocuments.site/reader033/viewer/2022053010/5f0dc42f7e708231d43bfb17/html5/thumbnails/7.jpg)
Superblock – Disk Metadata
• Examples: - Size - # of inodes - # of data blocks - Where inodes start - Where data blocks start - Magic number
![Page 8: Project6(( File(System(Project6:(File(System(• Goal:(Implementasimple(UNIXlike(file(system(with(ahierarchical(directory(structure.(• Read(the(projectspec(for(the(details](https://reader033.vdocuments.site/reader033/viewer/2022053010/5f0dc42f7e708231d43bfb17/html5/thumbnails/8.jpg)
Inodes direct
inode
metadata
indirect
Only direct for this project
8
![Page 9: Project6(( File(System(Project6:(File(System(• Goal:(Implementasimple(UNIXlike(file(system(with(ahierarchical(directory(structure.(• Read(the(projectspec(for(the(details](https://reader033.vdocuments.site/reader033/viewer/2022053010/5f0dc42f7e708231d43bfb17/html5/thumbnails/9.jpg)
Inode – Metadata
• Examples: - File or directory? - Link count - Size - Etc..
9
![Page 10: Project6(( File(System(Project6:(File(System(• Goal:(Implementasimple(UNIXlike(file(system(with(ahierarchical(directory(structure.(• Read(the(projectspec(for(the(details](https://reader033.vdocuments.site/reader033/viewer/2022053010/5f0dc42f7e708231d43bfb17/html5/thumbnails/10.jpg)
fs_init
• A “constructor” for the FS code. • Call block_init() to iniYalize the block “device.” • IniYalize data structures and resources used by the
file system. • Format the disk or mount it if it is already
formahed (create a mechanism to detect if the disk is formahed).
![Page 11: Project6(( File(System(Project6:(File(System(• Goal:(Implementasimple(UNIXlike(file(system(with(ahierarchical(directory(structure.(• Read(the(projectspec(for(the(details](https://reader033.vdocuments.site/reader033/viewer/2022053010/5f0dc42f7e708231d43bfb17/html5/thumbnails/11.jpg)
fs_mkfs
• “Makes” a file system: - Write the super block; - Mark inodes and data blocks as free; - Create root directory; - IniYalize file descriptor table.
![Page 12: Project6(( File(System(Project6:(File(System(• Goal:(Implementasimple(UNIXlike(file(system(with(ahierarchical(directory(structure.(• Read(the(projectspec(for(the(details](https://reader033.vdocuments.site/reader033/viewer/2022053010/5f0dc42f7e708231d43bfb17/html5/thumbnails/12.jpg)
File CreaYon and DeleYon
• fs_open(), fs_link(), fs_unlink(). • open: create a new file if it does not exist. • link: hard link to a file - Create a link to an exisYng file
• unlink: - Delete a file if link count == 0; - Delete directory entry; - Special behavior if file is sYll open (look at the project
descripYon).
![Page 13: Project6(( File(System(Project6:(File(System(• Goal:(Implementasimple(UNIXlike(file(system(with(ahierarchical(directory(structure.(• Read(the(projectspec(for(the(details](https://reader033.vdocuments.site/reader033/viewer/2022053010/5f0dc42f7e708231d43bfb17/html5/thumbnails/13.jpg)
File Access
• open: open an exisYng file (allocate file descriptor).
• read: read bytes from an open file. • write: write bytes to an open file. • lseek: change posiYon in a file. • close: free file descriptor.
![Page 14: Project6(( File(System(Project6:(File(System(• Goal:(Implementasimple(UNIXlike(file(system(with(ahierarchical(directory(structure.(• Read(the(projectspec(for(the(details](https://reader033.vdocuments.site/reader033/viewer/2022053010/5f0dc42f7e708231d43bfb17/html5/thumbnails/14.jpg)
fs_lseek() SemanYcs
• This project fs_lseek() takes only two arguments: - file descriptor and offset.
• Unix lseek() takes three arguments: - File descriptor, offset, whence.
• Whence: SEEK_SET, SEEK_CUR, SEEK_END. • ls_lseek() assumes SEEK_SET. • What if lseek() wants to seek past the end of the
file? (look at the project descripYon for the expected behavior)
![Page 15: Project6(( File(System(Project6:(File(System(• Goal:(Implementasimple(UNIXlike(file(system(with(ahierarchical(directory(structure.(• Read(the(projectspec(for(the(details](https://reader033.vdocuments.site/reader033/viewer/2022053010/5f0dc42f7e708231d43bfb17/html5/thumbnails/15.jpg)
Directories – Part 1
• Like a file: list of files and directories: - Name to inode number mapping.
• Can read it like a file: - Use your file I/O funcYons (fs_*) to do directory
manipulaYon.
• Always has at least two entries: - “.” current directory; - “..” parent directory.
![Page 16: Project6(( File(System(Project6:(File(System(• Goal:(Implementasimple(UNIXlike(file(system(with(ahierarchical(directory(structure.(• Read(the(projectspec(for(the(details](https://reader033.vdocuments.site/reader033/viewer/2022053010/5f0dc42f7e708231d43bfb17/html5/thumbnails/16.jpg)
Directories – Part 2
• mkdir: make a directory. - create an entry in parent directory; - create two directories: “.” and “..”.!
• rmdir: remove directory if empty. • cd: change the current directory - for relaYve path names only.
![Page 17: Project6(( File(System(Project6:(File(System(• Goal:(Implementasimple(UNIXlike(file(system(with(ahierarchical(directory(structure.(• Read(the(projectspec(for(the(details](https://reader033.vdocuments.site/reader033/viewer/2022053010/5f0dc42f7e708231d43bfb17/html5/thumbnails/17.jpg)
Example – fs_mkdir
int fs_mkdir(char *file_name)!{!!if (file_name exists) return ERROR;!!// allocate inode!!// allocate data blocks!!// set directory entries for “.” and “..”!!// set inode entries appropriately!!// update parent!!return SUCCESS!
}!
![Page 18: Project6(( File(System(Project6:(File(System(• Goal:(Implementasimple(UNIXlike(file(system(with(ahierarchical(directory(structure.(• Read(the(projectspec(for(the(details](https://reader033.vdocuments.site/reader033/viewer/2022053010/5f0dc42f7e708231d43bfb17/html5/thumbnails/18.jpg)
Misc
• You don’t need to support absolute path names. • You don’t need to support recursive directory
removal. • Implement a file system check (fsck) tool for
debugging that verifies integrity of: • Superblock magic number; • Block allocaYons; • Inode allocaYons; • Block allocaYon map; • Directory content; • Etc.
![Page 19: Project6(( File(System(Project6:(File(System(• Goal:(Implementasimple(UNIXlike(file(system(with(ahierarchical(directory(structure.(• Read(the(projectspec(for(the(details](https://reader033.vdocuments.site/reader033/viewer/2022053010/5f0dc42f7e708231d43bfb17/html5/thumbnails/19.jpg)
ImplementaYon
• In Linux: - Uses a file to simulate a disk - Code is provided - Execute ./lnxsh
• Shell supports: - System calls for file system - Commands: “ls”, “cat foo”, “create foo 200”
• You will have to write a lot of code: - Over 1,000 lines of code.
![Page 20: Project6(( File(System(Project6:(File(System(• Goal:(Implementasimple(UNIXlike(file(system(with(ahierarchical(directory(structure.(• Read(the(projectspec(for(the(details](https://reader033.vdocuments.site/reader033/viewer/2022053010/5f0dc42f7e708231d43bfb17/html5/thumbnails/20.jpg)
TesYng
• A python script for tesYng is provided. • MulYple tests that each: - execute the shell; - open an exisYng file system (or format a new one); - write commands to the shell (cat foo); - read output from the shell (ABCDEF); - exit.
• You should also write your own test cases: - submit them with your code.