Title: UNIX File Systems (Chap 4. in the book
1UNIX File Systems(Chap 4. in the book the
design of the UNIX OS)
Acknowledgement Soongsil Univ. Presentation
Materials
2File System
- Abstraction used by the kernel to represent and
organize the systems 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
3UNIX File System Overview
4UNIX File System Overview
5File System Layout
6Sample File System
7Table 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
8Summary
- 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
9Table 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
10Definition 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.
11Contents 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
12Sample 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 145 P.M
- Modified Oct 22 1984 103 A.M
- Inode Oct 23 1984 130 P.M
- Size 6030 bytes
- Disk addresses
13Distinction 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.
14Contents 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
15Contents of The In-core copy of The Inode
- 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
16Accessing 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
17Block 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
18Inode 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
19Table 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
20Direct and Indirect Blocks in Inode
21Byte 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 each10K bytes
- 1 indirect block with 256 direct blocks
1K256256K bytes - 1 double indirect block with 256 indirect
blocks256K25664M bytes - 1 triple indirect block with 256 double indirect
blocks64M25616G - Size of a file 4G (232), if file size field in
inode is 32bits
22Byte 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)
23Conversion 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
24Block Layout of a Sample File and Its inode
0
Byte 9000 in a file -gt 8block 808th byte
8
8
816th byte
(10K256K)
Byte 350,000 in a file
11
25Block 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
26Two 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
27Table 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
28Directories
- 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
29Directory 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
30Table 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
31Algorithm 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
-
32Algorithm 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 inodeinode of matched
component(algorithm iget) else / component
not in directory - return (no inode)
-
- return (working inode)
-
33Table 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
34Super 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
35Table 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
36Inode 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)
37Algorithm 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 -
38Algorithm 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
39Assigning Free Inode from Middle of List
40Assigning Free Inode Super Block List Empty
41Algorithm 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
42Placing Free Inode Numbers Into the Super Block
43Table 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
44Linked List of Free Disk Block Numbers
45Algorithm 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) -
-
46Algorithm 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
47Requesting and Freeing Disk Blocks
super block list
109
109
211 208 205 202 .. 112
original configuration
109 949 ..
109
211 208 205 202 . 112
After freeing block number 949
48Requesting and Freeing Disk Blocks
109 ..
109
211 208 205 202 . 112
After assigning block number(949)
211 208 205 202 112
211
344 341 338 335 . 243
After assigning block number(109) replenish
super block free list
49Table 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
50Other 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