* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download VirtualFilesystem
Survey
Document related concepts
Copland (operating system) wikipedia , lookup
MTS system architecture wikipedia , lookup
Mobile operating system wikipedia , lookup
Object storage wikipedia , lookup
Distributed operating system wikipedia , lookup
Commodore DOS wikipedia , lookup
Library (computing) wikipedia , lookup
Plan 9 from Bell Labs wikipedia , lookup
Security-focused operating system wikipedia , lookup
Burroughs MCP wikipedia , lookup
Computer file wikipedia , lookup
Spring (operating system) wikipedia , lookup
Transcript
CSC 660: Advanced OS Virtual Filesystem CSC 660: Advanced Operating Systems Slide #1 Topics 1. 2. 3. 4. 5. 6. 7. Filesystems Filenames and Pathnames File Attributes File Operations Virtual Filesystem VFS Objects Processes and Files CSC 660: Advanced Operating Systems Slide #2 Why filesystems? Access by Physical Disk Filesystem Blocks Bytes Addressing Block # Pathname Security ACLs None Reliability Corruption on crash Robust response to system failures. CSC 660: Advanced Operating Systems Slide #3 Tree Structure / bin boot ls tmp usr bin grub lib var X11R6 less vmlinuz menu.lst bin zip xclock CSC 660: Advanced Operating Systems lib xterm Slide #4 Filenames and Pathnames • Filenames – Human-readable identifier for data. – File suffixes have special meanings in Windows. • Directories – Store lists of filename/location mappings. • Pathnames – Identify file in directory hierarchy. – Ex: /usr/X11R6/bin/xclock CSC 660: Advanced Operating Systems Slide #5 File Attributes • Filename and Data • Location • File Type – – – – • • • • • Regular files Directories Device (block + char) files IPC files Ownership Access Control List Locking Size Timestamps CSC 660: Advanced Operating Systems Slide #6 File Operations • • • • • • Create Delete Open Close Read Write • • • • • CSC 660: Advanced Operating Systems Append Seek Get Attributes Set Attributes Rename Slide #7 File Descriptors User process reference to a file. A non-negative integer unique to process. Returned by open or creat system calls. Used as argument to other file system calls. View with: ls –l /proc/self/fd Common file descriptors: 0 STDIN 1 STDOUT 2 STDERR CSC 660: Advanced Operating Systems Slide #8 Process File Context • Root directory – Usually /, but can change for security. • Current working directory – Default location for file commands. – Relative pathnames are relative to CWD. • Open file table – Maps file descriptors to kernel file objects. – files_struct member of task_struct CSC 660: Advanced Operating Systems Slide #9 Open File Table struct files_struct { atomic_t count; spinlock_t file_lock; int max_fds; int max_fdset; int next_fd; struct file ** fd; fd_set *close_on_exec; fd_set *open_fds; fd_set close_on_exec_init; fd_set open_fds_init; struct file * fd_array[NR_OPEN_DEFAULT]; }; CSC 660: Advanced Operating Systems Slide #10 Opening and Closing #include <fcntl.h> #include <unistd.h> int open(char *path, int oflag); /* Common flags: O_RDONLY, O_WRONLY, O_CREAT Returns FD on success, -1 on failure */ int close(int filedes); /* Returns 0 on success, -1 on failure */ CSC 660: Advanced Operating Systems Slide #11 Reading and Writing #include <unistd.h> ssize_t read(int fd, void *buf, size_t nbytes); /* Returns # bytes read, 0 if EOF, -1 error */ ssize_t write(int fd, void *buf, size_t nbytes); /* Returns # bytes written, -1 on error */ off_t lseek(int fd, off_t offset, int whence) /* Whence: SEEK_SET (f/ 0) or SEEK_CUR (f/ current) Returns new file offset, -1 on error */ CSC 660: Advanced Operating Systems Slide #12 Virtual Filesystem CSC 660: Advanced Operating Systems Slide #13 Classes of Filesystems • Disk-based filesystems – – – – Linux (ext2, ext3, reiserfs) UNIX (ufs, minix, JFS, XFS) MS (FAT, VFAT, NTFS) and other proprietary ISO9660 CD-ROM, UDF DVD • Network filesystems – NFS, AFS, CIFS • Special filesystems – Procfs, sysfs CSC 660: Advanced Operating Systems Slide #14 VFS Objects • superblock – Represents a mounted filesystem. • inode – Represents a specific file. • dentry – Represents a directory entry, a single path comp. • file – Represents an open file associated w/ a process. CSC 660: Advanced Operating Systems Slide #15 VFS Objects • Directories are files – Directories are handled by file objects. – dentry objects are path components, not dirs. • Each object contains an operations object – Define methods kernel invokes on object. – Defined as struct of function pointers. • What if a fs doesn’t have a type of object? – Objects of that type made on the fly for VFS. CSC 660: Advanced Operating Systems Slide #16 VFS Objects CSC 660: Advanced Operating Systems Slide #17 struct super_block Type struct list_head Field s_list Description Superblock linked list dev_t u_long u_char s_dev Device identifier s_blocksize Block size in bytes s_dirt Dirty (modified) flag struct s_op super_operations * struct semaphore s_lock struct list_head s_inodes Superblock methods struct list_head struct list_head Inodes waiting for write List of file objects s_io s_files CSC 660: Advanced Operating Systems Superblock semaphore List of all inodes Slide #18 struct inode Type struct list_head Field i_list Description Inode linked list struct list_head inode_operations u_long i_dentry *i_op i_ino List of dentries to this inode Inode methods Inode number atomic_t umode_t u_long uid_t,gid_t i_count i_mode i_nlink i_{uid,gid} Reference count ACL for file Number of hard links UID and GID of owner loff_t struct timespec i_size File size in bytes i_[amc]time Last access, modify, change CSC 660: Advanced Operating Systems Slide #19 Inode Operations int create(struct inode *dir, struct dentry *dentry, int mode) struct dentry *lookup(struct inode *dir, struct dentry *dentry) int link(struct dentry *old, struct inode *dir, struct dentry *dentry) int unlink(struct inode *dir, struct dentry *dentry) int symlink(struct inode *dir, struct dentry *dentry, const char *symname) int mkdir(struct inode *dir, struct dentry *dentry, int mode) int rmdir(struct inode *dir, struct dentry *dentry) int rename(struct inode *old_dir, struct dentry *old, struct inode *new_dir, struct dentry *new) int readlink(struct dentry *dentry, char *buffer, int buflen) CSC 660: Advanced Operating Systems Slide #20 Dentry Objects • Path components – Ex: /bin/vi has 3 dentries: /, etc, and vi • Not an on-disk data structure – Constructed on fly from pathname string. – Cached by the kernel to avoid re-construction. • States – Used: corresponds to valid inode in use. – Unused: valid inode not currently used (cached). – Negative: invalid path, no corresponding inode CSC 660: Advanced Operating Systems Slide #21 struct dentry Type atomic_t Field d_count Description Usage count spinlock_t struct inode struct dentry_operations d_lock *d_inode *d_op Lock for this dentry Corresponding inode Dentry methods struct list_head struct list_head struct list_head d_lru d_child d_subdirs List of unused dentries. Dir dentries of same parent. Subdirectory dentries. struct list_head d_alias Dentries w/ same inode. CSC 660: Advanced Operating Systems Slide #22 struct file Type struct list_head Field f_list Description Linked list of file objects struct dentry atomic_t u_int *f_dentry f_count f_flags Associated dentry object Usage count Flags specified on open() struct file_operations * mode_t loff_t f_op File methods (open, read, write, readdir, ioctl) f_mode f_pos File access mode File offset u_int int f_{uid,gid} User’s UID and GID f_error Error code CSC 660: Advanced Operating Systems Slide #23 References 1. 2. 3. 4. 5. 6. Daniel P. Bovet and Marco Cesati, Understanding the Linux Kernel, 3rd edition, O’Reilly, 2005. Robert Love, Linux Kernel Development, 2nd edition, Prentice-Hall, 2005. Claudia Rodriguez et al, The Linux Kernel Primer, Prentice-Hall, 2005. Peter Salzman et. al., Linux Kernel Module Programming Guide, version 2.6.1, 2005. Avi Silberchatz et. al., Operating System Concepts, 7th edition, 2004. Andrew S. Tanenbaum, Modern Operating Systems, 3rd edition, Prentice-Hall, 2005. CSC 660: Advanced Operating Systems Slide #24