Embed
Email

unix-ch04-01

Document Sample
unix-ch04-01
Description

unix-ch04-01

Shared by: yagnesh darji
Categories
Stats
views:
1699
posted:
9/3/2009
language:
English
pages:
51
Chap 4. Internal Representation of Files



System Software Lab. Park Ho Byung r5me@information.soongsil.ac.kr



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

Chap 4. Internal Representation of Files 2



2009-09-03



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

Chap 4. Internal Representation of Files 3



2009-09-03



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

Chap 4. Internal Representation of Files 4



2009-09-03



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.



2009-09-03



Chap 4. Internal Representation of Files



5



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

2009-09-03 Chap 4. Internal Representation of Files 6



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



2009-09-03



Chap 4. Internal Representation of Files



7



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.



2009-09-03



Chap 4. Internal Representation of Files



8



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



2009-09-03



Chap 4. Internal Representation of Files



9



Contents 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



2009-09-03



Chap 4. Internal Representation of Files



10



In-core Inode Vs Buffer Header





In-core Inode









An inode is on the free list only if its reference count is 0 Kernel can reallocate the in-core inode to another disk inode No reference count It is on the free list if and only if it is unlocked

Chap 4. Internal Representation of Files 11







Buffer header









2009-09-03



Algorithm for Allocation of In-Core Inodes

algorithm iget input: file system inode number output: locked inode { while(not done){ if(inode in inode cache){ if(inode locked){ sleep(event inode becomes unlocked); coninue; } if(inode on inode free list) remove from free list; increment inode reference count reutrn(inode); }

2009-09-03 Chap 4. Internal Representation of Files 12



Algorithm for Allocation of In-Core Inodes

/*inode not in inode cache*/ if(no inodes on free list) return(error); remove new inode from free list; reset inode number and file system; remove inode from old hash queue,place on new one; read inode from disk(algorithm bread); initialize inode (e.g. reference count to 1); return(inode); }



}



2009-09-03



Chap 4. Internal Representation of Files



13



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 …



2009-09-03



Chap 4. Internal Representation of Files



14



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

2009-09-03 Chap 4. Internal Representation of Files 15



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. Kernel increase/decrease when reference is active/inactive Prevent the kernel from reallocating an active in-core inode

Chap 4. Internal Representation of Files 16







Reference count









2009-09-03



Releasing an Inode

algorithm iput /* release (put) access to in-core inode */ input: pointer to in-core inode output: none { lock inode if not already locked; decrement inode reference count; if(reference count ==0){ if(inode link count ==0){ free disk blocks for file (algorithm free, section 4.7); set file type to 0; free inode (algorithm ifree, section 4.6); } if(file accessed or inode changed or file changed) update disk inode; put inode on free list; } release inode lock; }

2009-09-03 Chap 4. Internal Representation of Files 17



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

Chap 4. Internal Representation of Files 18



2009-09-03



Direct and Indirect Blocks in Inode

Inode

direct0 direct1 direct2 direct3 direct4 direct5



Data Blocks



direct6

direct7 direct8 direct9 single indirect double indirect triple indirect

2009-09-03 Chap 4. Internal Representation of Files 19



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 (2 ), if file size field in inode is 32bits

Chap 4. Internal Representation of Files 20



32



2009-09-03



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)



2009-09-03



Chap 4. Internal Representation of Files



21



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;

2009-09-03 Chap 4. Internal Representation of Files 22



Block Layout of a Sample File and Its inode

0



4096 228 45423 0 0 11111

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



0

101

8



367 Data block



367 0 428 (10K+256K) 9156 824

0 331 75 3333



816th byte 3333 Data block Byte 350,000 in a file



11



9156 Double indirect



331 Single indirect



2009-09-03



Chap 4. Internal Representation of Files



23



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



2009-09-03



Chap 4. Internal Representation of Files



24



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 By expanding the inode to occupy an entire disk block The remainder can store the entire file







To store file data in the inode

 



2009-09-03



Chap 4. Internal Representation of Files



25



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

Chap 4. Internal Representation of Files 26



2009-09-03



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



2009-09-03



Chap 4. Internal Representation of Files



27



Directory Layout for /etc

Byte Offset in Directory

0 16 32 48 ... 224 240 256

2009-09-03



Inode Number (2 bytes)

83 2 1798 1276 ... 0 95 188



File Names

. .. init fsck … crash mkfs inittab

28



Chap 4. Internal Representation of Files



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

Chap 4. Internal Representation of Files 29



2009-09-03



Algorithm for Conversion of a Path Name to an Inode

Algorithm namei Input : path name Output : locked inode { /* convert path name to 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; …

2009-09-03 Chap 4. Internal Representation of Files 30



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); }



2009-09-03



Chap 4. Internal Representation of Files



31



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

Chap 4. Internal Representation of Files 32



2009-09-03



Super block

 



File System

boot block super block inode list data blocks



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

Chap 4. Internal Representation of Files 33



2009-09-03



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

Chap 4. Internal Representation of Files 34



2009-09-03



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)



2009-09-03



Chap 4. Internal Representation of Files



35



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; }

2009-09-03 Chap 4. Internal Representation of Files 36



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 }

2009-09-03 Chap 4. Internal Representation of Files 37



Assigning Free Inode from Middle of List

Super Block Free Inode List free inodes 83 18 19 48 20 index Super Block Free Inode List free inodes 83 18 19 20 index

2009-09-03 Chap 4. Internal Representation of Files 38



empty array1



empty array2



Assigning Free Inode – Super Block List Empty

Super Block Free Inode List 470 empty 0 index remembered inode array2 476 475 471 array1



Super Block Free Inode List 535 free inodes 0



48



49



50



index



2009-09-03



Chap 4. Internal Representation of Files



39



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; }

2009-09-03 Chap 4. Internal Representation of Files 40



Placing Free Inode Numbers Into the Super Block

535 remembered inode 476 475 471



free inodes

index



Original Super Block List of Free Inodes 499 remembered inode 476 475 471



free inodes

Free Inode 499 index



499

remembered inode Free Inode 601

2009-09-03



476 475 471

free inodes index



Chap 4. Internal Representation of Files



41



Race Condition in Assigning Inodes

Process A Assigns inode I from super block Process B Process C



Sleeps while reading inode(a)



Tries to assign inode from super block Super block empty(b) Search for free inodes on disk, puts inode I in super block (c)



Inode I in core Does usual activity Completes search, assigns another inode(d)



Assigns inode I from super block I is in use! Assign another inode(e)



2009-09-03



Chap 4. Internal Representation of Files



42



Race Condition in Assigning Inodes

Time (a) I



(b)



empty



(c)



Free inodes



J



I K



(d)



Free inodes



J



I



(e)



Free inodes



L



2009-09-03



Chap 4. Internal Representation of Files



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

Chap 4. Internal Representation of Files 44



2009-09-03



Linked List of Free Disk Block Numbers

Super block list



109 106 103 100 ………………………….. 109 211 208 205 202 …………………… 211 310 307 304 301



112



……………………



214



310 409 406 403 400 ……………………



313



2009-09-03



Chap 4. Internal Representation of Files



45



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); } …

2009-09-03 Chap 4. Internal Representation of Files 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; }



2009-09-03



Chap 4. Internal Representation of Files



47



Requesting 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

2009-09-03 Chap 4. Internal Representation of Files 48



Requesting 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

2009-09-03 Chap 4. Internal Representation of Files 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

Chap 4. Internal Representation of Files 50



2009-09-03



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

Chap 4. Internal Representation of Files 51



2009-09-03




Other docs by yagnesh darji
unix-ch02-01
Views: 67  |  Downloads: 6
unix-ch10-04
Views: 78  |  Downloads: 5
ASP_NET_XP_01
Views: 64  |  Downloads: 1
unix-ch03-01
Views: 156  |  Downloads: 3
unix-ch09-03
Views: 35  |  Downloads: 3
unix-ch10-01
Views: 390  |  Downloads: 24
bach
Views: 130  |  Downloads: 3
unix-ch02-03
Views: 92  |  Downloads: 2
Project Slides
Views: 28  |  Downloads: 0
unix-ch06-03
Views: 380  |  Downloads: 24
By registering with docstoc.com you agree to our
privacy policy

You are almost ready to download!

You are almost ready to download!