unix file systems (chap 4. in the book “the design of the unix os”) acknowledgement : soongsil...
TRANSCRIPT
UNIX File Systems(Chap 4. in the book “the design of the UNIX OS”)
Acknowledgement : Soongsil Univ. Presentation Materials
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
23年 4月 18日 7
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
23年 4月 18日 8
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
23年 4月 18日 9
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
23年 4月 18日 10
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.
23年 4月 18日 11
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
23年 4月 18日 12
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
23年 4月 18日 13
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.
23年 4月 18日 14
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
23年 4月 18日 15
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
23年 4月 18日 16
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 …
23年 4月 18日 17
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
23年 4月 18日 18
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
23年 4月 18日 19
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
23年 4月 18日 20
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
23年 4月 18日 21
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
23年 4月 18日 22
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)
23年 4月 18日 23
Conversion of Byte Offset to Block Number Algorithm bmap /* block map of logical file byte offset to file system block */Input : inode, byte offsetOutput: (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;
23年 4月 18日 24
Block Layout of a Sample File and Its inode
4096
228
45423
0
0
11111
0
101
367
0
428
9156
824
331 3333
331Single indirect9156
Double indirect
3333Data block
367Data block
0 75
Byte 9000 in a file -> 8block 808th byte
Byte 350,000 in a file
0
88
11
(10K+256K)
816th byte
23年 4月 18日 25
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
23年 4月 18日 26
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
23年 4月 18日 27
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
23年 4月 18日 28
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
23年 4月 18日 29
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
23年 4月 18日 30
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
23年 4月 18日 31
Algorithm for Conversion of a Path Name to an Inode
Algorithm namei /* convert path name to inode */Input : path nameOutput : 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;…
23年 4月 18日 32
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);
}
23年 4月 18日 33
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
23年 4月 18日 34
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
23年 4月 18日 35
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
23年 4月 18日 36
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)
23年 4月 18日 37
Algorithm for Assigning New InodesAlgorithm ialloc /* allocate inode */Input : file systemOutput : 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;
}
23年 4月 18日 38
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}
23年 4月 18日 39
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
23年 4月 18日 40
Assigning Free Inode – Super Block List Empty
index
470 empty
array1
Super Block Free Inode List
index
0
535 free inodes 476 475 471
array2Super Block Free Inode List
048 49 50
remembered inode
23年 4月 18日 41
Algorithm for Freeing Inode
Algorithm ifree /* inode free */Input : file system inode numberOutput : 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;
}
23年 4月 18日 42
Placing Free Inode Numbers Into the Super Block
535 476 475 471
free inodesremembered inode
Original Super Block List of Free Inodes
index
Free Inode 499
499 476 475 471
free inodesremembered inode index
Free Inode 601
499 476 475 471
free inodesremembered inode index
23年 4月 18日 43
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
23年 4月 18日 44
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
23年 4月 18日 45
Algorithm for Allocating Disk BlockAlgorithm alloc /* file system block allocation */Input : file system numberOutput : 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);
}…
23年 4月 18日 46
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;
}
23年 4月 18日 47
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
23年 4月 18日 48
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
23年 4月 18日 49
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
23年 4月 18日 50
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