Virtual File System. Don Porter CSE 506

Similar documents
Virtual File System. Don Porter CSE 306

RCU. ò Dozens of supported file systems. ò Independent layer from backing storage. ò And, of course, networked file system support

CSE506: Operating Systems CSE 506: Operating Systems

Fall 2017 :: CSE 306. File Systems Basics. Nima Honarmand

VFS, Continued. Don Porter CSE 506

RCU. ò Walk through two system calls in some detail. ò Open and read. ò Too much code to cover all FS system calls. ò 3 Cases for a dentry:

Basic OS Progamming Abstrac7ons

Basic OS Progamming Abstrac2ons

CSE506: Operating Systems CSE 506: Operating Systems

File Systems. CS170 Fall 2018

Lecture 19: File System Implementation. Mythili Vutukuru IIT Bombay

Logical disks. Bach 2.2.1

Ext3/4 file systems. Don Porter CSE 506

COS 318: Operating Systems. Journaling, NFS and WAFL

CptS 360 (System Programming) Unit 6: Files and Directories

read(2) There can be several cases where read returns less than the number of bytes requested:

File Systems. What do we need to know?

1 / 23. CS 137: File Systems. General Filesystem Design

3/26/2014. Contents. Concepts (1) Disk: Device that stores information (files) Many files x many users: OS management

COS 318: Operating Systems. NSF, Snapshot, Dedup and Review

Introduction to File Systems

ò Very reliable, best-of-breed traditional file system design ò Much like the JOS file system you are building now

NFS. Don Porter CSE 506

INTRODUCTION TO THE UNIX FILE SYSTEM 1)

Basic OS Programming Abstractions (and Lab 1 Overview)

Implementation should be efficient. Provide an abstraction to the user. Abstraction should be useful. Ownership and permissions.

File Systems Ch 4. 1 CS 422 T W Bennet Mississippi College

Operating System Labs. Yuanbin Wu

W4118 Operating Systems. Instructor: Junfeng Yang

File Systems: Naming

CS370 Operating Systems

1 / 22. CS 135: File Systems. General Filesystem Design

ECE 550D Fundamentals of Computer Systems and Engineering. Fall 2017

File Systems. Chapter 11, 13 OSPP

Files and the Filesystems. Linux Files

TDDB68 Concurrent Programming and Operating Systems. Lecture: File systems

Typical File Extensions File Structure

File System Interface. ICS332 Operating Systems

CSE 506: Opera.ng Systems. The Page Cache. Don Porter

Secure Software Programming and Vulnerability Analysis

ò Server can crash or be disconnected ò Client can crash or be disconnected ò How to coordinate multiple clients accessing same file?

Chapter Two. Lesson A. Objectives. Exploring the UNIX File System and File Security. Understanding Files and Directories

File I/O and File Systems

Files and File System

To understand this, let's build a layered model from the bottom up. Layers include: device driver filesystem file

Operating System Labs. Yuanbin Wu

Outline. File Systems. File System Structure. CSCI 4061 Introduction to Operating Systems

The UNIX File System

The Page Cache 3/16/16. Logical Diagram. Background. Recap of previous lectures. The address space abstracvon. Today s Problem.

Chapter 6. File Systems

File Systems. Kartik Gopalan. Chapter 4 From Tanenbaum s Modern Operating System

UNIT I Linux Utilities

Block Device Scheduling. Don Porter CSE 506

Block Device Scheduling

Chapter 11: File-System Interface

File Management 1/34

Page Frame Reclaiming

UNIX Files. How UNIX Sees and Uses Files

Exploring the file system. Johan Montelius HT2016

UNIX File System. UNIX File System. The UNIX file system has a hierarchical tree structure with the top in root.

Distributed File Systems

Network File System (NFS)

Chapter 8: Filesystem Implementation

Operating Systems Design Exam 2 Review: Fall 2010

File System Case Studies. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

Explicit Information Flow in the HiStar OS. Nickolai Zeldovich, Silas Boyd-Wickizer, Eddie Kohler, David Mazières

COS 318: Operating Systems. File Systems. Topics. Evolved Data Center Storage Hierarchy. Traditional Data Center Storage Hierarchy

CS 140 Project 4 File Systems Review Session

CS2028 -UNIX INTERNALS

CS370 Operating Systems

CS 1550 Project 3: File Systems Directories Due: Sunday, July 22, 2012, 11:59pm Completed Due: Sunday, July 29, 2012, 11:59pm

8. Files and File Systems

File Systems. CSE 2431: Introduction to Operating Systems Reading: Chap. 11, , 18.7, [OSC]

Input & Output 1: File systems

The UNIX Time- Sharing System

File System Definition: file. File management: File attributes: Name: Type: Location: Size: Protection: Time, date and user identification:

CS720 - Operating Systems

The UNIX File System

Announcements/Reminders

OPERATING SYSTEMS CS136

Long-term Information Storage Must store large amounts of data Information stored must survive the termination of the process using it Multiple proces

Directory. File. Chunk. Disk

CS140 Operating Systems Final December 12, 2007 OPEN BOOK, OPEN NOTES

A2 Design Considerations. CS161, Spring

Storage and File System

FILE SYSTEMS. Tanzir Ahmed CSCE 313 Fall 2018

V. File System. SGG9: chapter 11. Files, directories, sharing FS layers, partitions, allocations, free space. TDIU11: Operating Systems

Files and Directories

Network File System (NFS)

Network File System (NFS)

Files and File Systems

Motivation: I/O is Important. CS 537 Lecture 12 File System Interface. File systems

Motivation. Operating Systems. File Systems. Outline. Files: The User s Point of View. File System Concepts. Solution? Files!

File System: Interface and Implmentation

Chapter 11: File System Implementation. Objectives

Chapter 11: File-System Interface

UNIX File Hierarchy: Structure and Commands

5/8/2012. Creating and Changing Directories Chapter 7

EI 338: Computer Systems Engineering (Operating Systems & Computer Architecture)

EI 338: Computer Systems Engineering (Operating Systems & Computer Architecture)

Transcription:

Virtual File System Don Porter CSE 506

History ò Early OSes provided a single file system ò In general, system was pretty tailored to target hardware ò In the early 80s, people became interested in supporting more than one file system type on a single system ò Any guesses why? ò Networked file systems sharing parts of a file system transparently across a network of workstations

Modern VFS ò Dozens of supported file systems ò Allows experimentation with new features and designs transparent to applications ò Interoperability with removable media and other OSes ò Independent layer from backing storage ò Pseudo FSes used for configuration (/proc, /devtmps ) only backed by kernel data structures ò And, of course, networked file system support

User s perspective ò Single programming interface ò (POSIX file system calls open, read, write, etc.) ò Single file system tree ò A remote file system with home directories can be transparently mounted at /home ò Alternative: Custom library for each file system ò Much more trouble for the programmer

What the VFS does ò The VFS is a substantial piece of code, not just an API wrapper ò Caches file system metadata (e.g., file names, attributes) ò Coordinates data caching with the page cache ò Enforces a common access control model ò Implements complex, common routines, such as path lookup, file opening, and file handle management

FS Developer s Perspective ò FS developer responsible for implementing a set of standard objects/functions, which are called by the VFS ò Primarily populating in-memory objects from stable storage, and writing them back ò Can use block device interfaces to schedule disk I/O ò And page cache functions ò And some VFS helpers ò Analogous to implementing Java abstract classes

High-level FS dev. tasks ò Translate between volatile VFS objects and backing storage (whether device, remote system, or other/none) ò Potentially includes requesting I/O ò Read and write file pages

Opportunities ò VFS doesn t prescribe all aspects of FS design ò More of a lowest common denominator ò Opportunities: (to name a few) ò More optimal media usage/scheduling ò Varying on-disk consistency guarantees ò Features (e.g., encryption, virus scanning, snapshotting)

Core VFS abstractions ò super block FS-global data ò Early/many file systems put this as first block of partition ò inode (index node) metadata for one file ò dentry (directory entry) file name to inode mapping ò file a file handle refers to a dentry and a cursor in the file (offset)

Super blocks ò SB + inodes are extended by FS developer ò Stores all FS-global data ò Opaque pointer (s_fs_info) for fs-specific data ò Includes many hooks for tasks such as creating or destroying inodes ò Dirty flag for when it needs to be synced with disk ò Kernel keeps a circular list of all of these

Inode ò The second object extended by the FS ò Huge more fields than we can talk about ò Tracks: ò File attributes: permissions, size, modification time, etc. ò File contents: ò Address space for contents cached in memory ò Low-level file system stores block locations on disk ò Flags, including dirty inode and dirty data

Inode history ò Name goes back to file systems that stored file metadata at fixed intervals on the disk ò If you knew the file s index number, you could find its metadata on disk ò Hence, the name index node ò Original VFS design called them vnode for virtual node (perhaps more appropriately) ò Linux uses the name inode

Embedded inodes ò Many file systems embed the VFS inode in a larger, FS-specific inode, e.g.,: struct donfs_inode { int ondisk_blocks[]; /* other stuff*/ struct inode vfs_inode; } ò Why? Finding the low-level data associated with an inode just requires simple (compiler-generated) math

Linking ò An inode uniquely identifies a file for its lifespan ò Does not change when renamed ò Model: Inode tracks links or references ò ò Created by open file handles and file names in a directory that point to the inode Ex: renaming the file temporarily increases link count and then lower it again ò When link count is zero, inode (and contents) deleted ò There is no delete system call, only unlink

Linking, cont. ò Hard link (link system call/ln utility): creates a second name for the same file; modifications to either name changes contents. ò This is not a copy ò Common trick for temporary files: ò ò ò ò create (1 link) open (2 links) unlink (1 link) File gets cleaned up when program dies ò (kernel removes last link)

Inode stats ò The stat word encodes both permissions and type ò High bits encode the type: regular file, directory, pipe, char device, socket, block device, etc. ò Unix: Everything s a file! VFS involved even with sockets! ò Lower bits encode permissions: ò 3 bits for each of User, Group, Other + 3 special bits ò Bits: 2 = read, 1 = write, 0 = execute ò Ex: 750 User RWX, Group RX, Other nothing

Special bits ò For directories, Execute means search ò ò X-only permissions means I can find readable subdirectories or files, but can t enumerate the contents Useful for sharing files in your home directory, without sharing your home directory contents ò ò Setuid bit Lots of information in meta-data! ò ò Mostly relevant for executables: Allows anyone who runs this program to execute with owner s uid Crude form of permission delegation

More special bits ò Group inheritance bit ò In general, when I create a file, it is owned by my default group ò If I create in a g+s directory, the directory group owns the file ò Useful for things like shared git repositories ò Sticky bit ò Restricts deletion of files

File objects ò Represent an open file; point to a dentry and cursor ò Each process has a table of pointers to them ò The int fd returned by open is an offset into this table ò These are VFS-only abstractions; the FS doesn t need to track which process has a reference to a file ò Files have a reference count. Why? ò Fork also copies the file handles ò If your child reads from the handle, it advances your (shared) cursor

File handle games ò dup, dup2 Copy a file handle ò Just creates 2 table entries for same file struct, increments the reference count ò seek adjust the cursor position ò Obviously a throw-back to when files were on tapes ò fcntl Like ioctl (misc operations), but for files ò CLOSE_ON_EXEC a bit that prevents file inheritance if a new binary is exec ed (set by open or fcntl)

Dentries ò These store: ò A file name ò A link to an inode ò A parent pointer (null for root of file system) ò Ex: /home/porter/vfs.pptx would have 4 dentries: ò /, home, porter, & vfs.pptx ò Parent pointer distinguishes /home/porter from /tmp/porter ò These are also VFS-only abstractions ò Although inode hooks on directories can populate them

Why dentries? ò A simple directory model might just treat it as a file listing <name, inode> tuples ò Why not just use the page cache for this? ò FS directory tree traversal very common; optimize with special data structures ò The dentry cache is a complex data structure we will discuss in much more detail later

Summary of abstractions ò Super blocks FS- global data ò Inodes stores a given file ò File (handle) Essentially a <dentry, offset> tuple ò Dentry Essentially a <name, parent dentry, inode> tuple

More on the user s perspective ò Let s wrap today by discussing some common FS system calls in more detail ò Let s play it as a trivia game ò What call would you use to

Create a file? ò creat ò More commonly, open with the O_CREAT flag ò Avoid race conditions between creation and open ò What does O_EXCL do? ò Fails if the file already exists

Create a directory? ò mkdir ò But I thought everything in Unix was a file!?! ò This means that sometimes you can read/write an existing handle, even if you don t know what is behind it. ò Even this doesn t work for directories

ò rmdir Remove a directory

ò unlink Remove a file

Read a file? ò read() ò How do you change cursor position? ò lseek (or pread)

Read a directory? ò readdir or getdents

Shorten a file ò truncate/ftruncate ò Can also be used to create a file full of zeros of abritrary length ò Often blocks on disk are demand-allocated (laziness rules!)

What is a symbolic link? ò A special file type that stores the name of another file ò How different from a hard link? ò Doesn t raise the link count of the file ò Can be broken, or point to a missing file ò How created? ò symlink system call or ln s command

Let s step it up a bit

How does an editor save a file? ò Hint: we don t want the program to crash with a halfwritten file ò Create a backup (using open) ò Write the full backup (using read old/ write new) ò Close both ò Do a rename(old, new) to atomically replace

How does ls work? ò dh = open(dir) ò for each file (while readdir(dh)) ò Print file name ò close(dh)

What about that cool colored text? ò dh = open(dir) ò for each file (while readdir(dh)) ò stat(file, &stat_buf) ò if (stat & execute bit) color == green ò else if ò Print file name ò Reset color ò close(dh)

Summary ò Today s goal: VFS overview from many perspectives ò User (application programmer) ò FS implementer ò ò Key VFS objects Used many page cache and disk I/O tools we ve seen ò Important to be able to pick POSIX fs system calls from a line up ò Homework: think about pseudocode from any simple command-line file system utilities you type this weekend