UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ......

50
UNIX File Systems (Chap 4. in the book “the design of the UNIX OS”)

Transcript of UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ......

Page 1: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

UNIX File Systems (Chap 4. in the book “the design of the UNIX OS”)

Page 2: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

File System

Abstraction used by the kernel to represent and organize the system’s storage resources

Properties Hierarchical structure Ability to create and delete files Dynamic growth of files Protection of file data Treatment of peripheral devices as files

Page 3: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

UNIX File System Overview

Page 4: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

UNIX File System Overview

Page 5: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

File System Layout

Page 6: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Sample File System

Page 7: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Table of Contents Inodes Structure of a regular file Directories Conversion of a path name to an Inode Super block Inode assignment to a new file Allocation of disk blocks Other file types Summary

Page 8: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Summary Inode is the data structure that describes the attributes of a file,

including the layout of its data on disk. Two version of the inode

Disk copy : store the inode information when file is not in use In-core copy : record the information about active files.

ialloc/ifree : assignment of a disk inode iget/iput : allocation of in-core inodes bmap : locate disk blocks of a file, according to byte offset Directories : files that correlate file name components to inode

numbers namei : convert file names to inodes alloc/free : assignment of new disk blocks to a file

Page 9: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Table of Contents Inodes Structure of a Regular File Directories Conversion of a Path Name to an Inode Super Block Inode Assignment to a New File Allocation of Disk Blocks Other File Types Summary

Page 10: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Definition of Inodes

Every file has a unique inode Contain the information necessary for a process

to access a file Exist in a static form on disk Kernel reads them into an in-core inode to

manipulate them.

Page 11: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Contents of Disk Inodes File owner identifier (individual/group owner) File type (regular, directory,..) File access permission (owner,group,other) File access time Number of links to the file (chap5) Table of contents for the disk address of data in a file

(byte stream vs discontiguous disk blocks) File size * Inode does not specify the path name that access the

file

Page 12: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Sample Disk Inode File owner identifier File type File access permission File access time Number of links to the file Table of contents for the disk

address of data in a file File size

Owner mjb Group os

Type regular file Perms rwxr-xr-x

Accessed Oct 23 1984 1:45 P.M Modified Oct 22 1984 10:3 A.M

Inode Oct 23 1984 1:30 P.M Size 6030 bytes Disk addresses

Page 13: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Distinction Between Writing Inode and File

File change only when writing it. Inode change when changing the file, or when

changing its owner, permisson,or link settings. Changing a file implies a change to the inode, But, changing the inode does not imply that the file

change.

Page 14: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Contents of The In-core copy of The Inode

Fields of the disk inode Status of the in-core inode, indicating whether

Inode is locked Process is waiting for the inode to become unlocked Differ from the disk copy as a result of a change to the data

in the inode Differ from the disk copy as a result of a change to the file

data File is a mount point

Page 15: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Logical device number of the file system Inode number (linear array on disk, disk inode not

need this field) Pointers to other in-core inodes Reference count

Contents of The In-core copy of The Inode

Page 16: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Accessing Inodes

Kernel identifies inodes by their file system and inode number

Allocate in-core inodes at the request of higher-level algorithms (in-core inode, by iget algorithm)

Kernel maps the device number & inode number into a hash queue

Search the queue for the inode …

Page 17: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Block Number & Byte Offset

Computing logical disk block number Block number = ((inode number –1) / number of inodes per block) + start block inode list

Computing byte offset of the inode in the

block ((inode number –1) mod (number of inodes per block)) * size of disk inode

Page 18: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Inode Lock and Reference Count

Kernel manipulates them independently Inode lock

Set during execution of a system call to prevent other processes from accessing the inode while it is in use.

Kernel releases the lock at the conclusion of the system call Inode is never locked across system calls.

Reference count Kernel increase/decrease when reference is active/inactive Prevent the kernel from reallocating an active in-core inode

Page 19: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Table of Contents Inodes Structure of a Regular File Directories Conversion of a Path Name to an Inode Super Block Inode Assignment to a New File Allocation of Disk Blocks Other File Types Summary

Page 20: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Direct and Indirect Blocks in Inode

direct0

direct1

direct2

direct3

direct4

direct5

direct6

direct7

direct8

direct9

single indirect

double indirect

triple indirect

Inode Data Blocks

Page 21: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Byte Capacity of a File

System V UNIX. Assume that Run with 13 entries 1 logical block : 1K bytes Block number address : a 32 bit (4byte) integer

1 block can hold up to 256 block number (1024byte / 4byte) 10 direct blocks with 1K bytes each=10K bytes 1 indirect block with 256 direct blocks= 1K*256=256K bytes 1 double indirect block with 256 indirect blocks=256K*256=64M bytes 1 triple indirect block with 256 double indirect blocks=64M*256=16G

Size of a file : 4G (232), if file size field in inode is 32bits

Page 22: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Byte Offset and Block Number

Process access data in a file by byte offset. The file starts at logical block 0 and continues to a

logical block number corresponding to the file size Kernel accesses the inode and converts the logical file

block into the appropriate disk block (bmap algorithm)

Page 23: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Conversion of Byte Offset to Block Number Algorithm bmap /* block map of logical file byte offset to file system block */ Input : inode, byte offset Output: (1)block number in file system, (2)byte offset into block, (3)bytes of I/O in block, (4)read ahead block number

calculate logical block number in file from byte offset; calculate start byte in block for I/O; /* output 2 */ calculate number of bytes to copy to user; /* output 3 */ check if read-ahead applicable, mark inode; /* output 4*/ determine level of indirection; while(not at necessary level of indirection) calculate index into inode or indirect block from logical block number in file; get disk block number from inode or indirect block; release buffer from previous disk read, if any (algorithm brelse); if(no more levels of indirection) return (block number); read indirect disk block (algorithm bread); adjust logical block number in file according to level of indirection;

Page 24: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Block Layout of a Sample File and Its inode 4096

228

45423

0

0

11111

0

101

367

0

428

9156

824

331

3333

331 Single indirect 9156

Double indirect

3333 Data block

367 Data block

0 75

Byte 9000 in a file -> 8block 808th byte

Byte 350,000 in a file

0

8 8

11

(10K+256K)

816th byte

Page 25: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Block Entry in the Inode is 0

Logical block entry contain no data. Process never wrote data into the file at that byte

offset No disk space is wasted Cause by using the lseek and write system call

Page 26: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Two Extensions to the inode Structure

4.2 BSD file system The more data the kernel can access on the disk in a single

operation, the faster file access becomes But it increase block fragmentation Solution : one disk block can contain fragments belonging to

several files To store file data in the inode

By expanding the inode to occupy an entire disk block The remainder can store the entire file

Page 27: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Table of Contents Inodes Structure of a Regular File Directories Conversion of a Path Name to an Inode Super Block Inode Assignment to a New File Allocation of Disk Blocks Other File Types Summary

Page 28: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Directories A directory is a file Its data is a sequence of entries, each consisting of an

inode number and the name of a file contained in the directory

Path name is a null terminated character string divided by “/”

Each component except the last must be the name of a directory, last component may be a non-directory file

Page 29: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Directory Layout for /etc

Byte Offset in Directory

Inode Number (2 bytes)

File Names

0 16 32 48 ... 224 240 256

83 2

1798 1276

... 0

95 188

. .. init fsck … crash mkfs inittab

Page 30: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Table of Contents Inodes Structure of a Regular File Directories Conversion of a Path Name to an Inode Super Block Inode Assignment to a New File Allocation of Disk Blocks Other File Types Summary

Page 31: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Algorithm for Conversion of a Path Name to an Inode

Algorithm namei /* convert path name to inode */ Input : path name Output : locked inode { if(path name starts from root) working inode = root inode (algorithm iget); else working inode = current directory inode (algorithm iget); while(there is more path name){ read next path name component from input; verify that working inode is of directory,access permission OK; if(working inode is of root and component is “..”) continue; /* loop back to while */ read directory (working inode) by repeated use of algorithms bmap,bread and brelse; …

Page 32: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Algorithm for Conversion of a Path Name to an Inode

if(component matches an entry in directory (working inode)){ get inode number for matched component; release working inode (algorithm iput); working inode=inode of matched component(algorithm iget);

} else /* component not in directory return (no inode); } return (working inode); }

Page 33: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Table of Contents Inodes Structure of a Regular File Directories Conversion of a Path Name to an Inode Super Block Inode Assignment to a New File Allocation of Disk Blocks Other File Types Summary

Page 34: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Super block File System Consists of

the size of the file system the number of free blocks in the file system a list of free blocks available on the file system the index of the next free block in the free block list the size of the inode list the number of free inodes in the file system a list of free inodes in the file system the index of the next free inode in the free inode list lock fields for the free block and free inode lists a flag indicating that the super block has been modified

boot block super block inode list data blocks

Page 35: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Table of Contents Inodes Structure of a Regular File Directories Conversion of a Path Name to an Inode Super Block Inode Assignment to a New File Allocation of Disk Blocks Other File Types Summary

Page 36: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Inode Assignment to a New File

File system contains a linear list of inodes Inode is free : its type field is zero (0) Super block contains an array to cache the numbers of

free inodes in the file system (to improve performance)

Page 37: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Algorithm for Assigning New Inodes Algorithm ialloc /* allocate inode */ Input : file system Output : locked inode { while(not done){ if(super block locked) { sleep(event super block becomes free); continue; } if(inode list in super block is empty){ lock super block; get remembered inode for free inode search; search disk for free inodes until super block full, or no more free inodes (bread and brelese); unlock super block; wake up (event super block becomes free); if(no free inodes found on disk) return (no inode); set remembered inode for next free inode search; }

Page 38: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Algorithm for Assigning New Inodes

/* there are inodes in super block inode list */ get inode number from super block inode list; get inode (algorithm iget); if(inode not free after all) { write inode to disk; release inode (algorithm iput); continue; /* while loop */ } /* inode is free */ initialize inode; write inode to disk; decrement file system free inode count; return (inode); } // end of while }

Page 39: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Assigning Free Inode from Middle of List

free inodes 83 48 empty

18 19 20 array1

Super Block Free Inode List

index

free inodes 83 empty

18 19 20 array2

Super Block Free Inode List

index

Page 40: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Assigning Free Inode – Super Block List Empty

index

470 empty

array1

Super Block Free Inode List

index

0

535 free inodes 476 475 471

array2 Super Block Free Inode List

0 48 49 50

remembered inode

Page 41: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Algorithm for Freeing Inode Algorithm ifree /* inode free */ Input : file system inode number Output : none { increment file system free inode count; if(super block locked) return; if(inode list full){ if(inode number less than remembered inode for search) set remembered inode for search = input inode number; } else store inode number in inode list; return; }

Page 42: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Placing Free Inode Numbers Into the Super Block

535 476 475 471

free inodes remembered inode

Original Super Block List of Free Inodes

index

Free Inode 499

499 476 475 471

free inodes remembered inode index

Free Inode 601

499 476 475 471

free inodes remembered inode index

Page 43: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Table of Contents Inodes Structure of a Regular File Directories Conversion of a Path Name to an Inode Super Block Inode Assignment to a New File Allocation of Disk Blocks Other File Types Summary

Page 44: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Linked List of Free Disk Block Numbers

109 106 103 100 …………………………..

211 208 205 202 …………………… 112

109

310 307 304 301 …………………… 214

211

409 406 403 400 …………………… 313

310

Super block list

Page 45: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Algorithm for Allocating Disk Block Algorithm alloc /* file system block allocation */ Input : file system number Output : buffer for new block { while(super block locked) sleep (event super block not locked); remove block from super block free list; if(removed last block from free list){ lock super block; read block just taken from free list (algorithm bread); copy block numbers in block into super block; release block buffer (algorithm brelse); unlock super block; wake up processes (event super block not locked); } …

Page 46: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Algorithm for Allocating Disk Block

… get buffer form block removed from super block list (algorithm getblk); zero buffer contents; decrement total count of free blocks; mark super block modified; return buffer; }

Page 47: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Requesting and Freeing Disk Blocks

109 …………………………………………………………

211 208 205 202 …………………………….. 112

109 949 …………………………………………………..

211 208 205 202 ………………………………. 112

super block list

original configuration

109

109

After freeing block number 949

Page 48: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

211 208 205 202 ……………………………… 112

344 341 338 335 ………………………………. 243

After assigning block number(109)

replenish super block free list

211

109 ………………………………………………………..

211 208 205 202 ………………………………. 112

109

After assigning block number(949)

Requesting and Freeing Disk Blocks

Page 49: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Table of Contents Inodes Structure of a regular file Directories Conversion of a path name to an Inode Super block Inode assignment to a new file Allocation of disk blocks Other file types Summary

Page 50: UNIX File Systems - Registration - · PDF fileUNIX File Systems (Chap 4. in the book ... ialloc/ifree : assignment of a disk inode ... Algorithm ialloc /* allocate inode */ Input :

Other File Types

Pipe fifo(first-in-first-out) Its data is transient: once data is read from a pipe, it cannot be

read again Use only direct block (not the indirect block)

Special file block device, character device The inode contains the major and minor device number Major number indicates a device type such as terminal or disk Minor number indicates the unit number of the device