Deadlocks - Bangladesh University of Engineering and

Download Report

Transcript Deadlocks - Bangladesh University of Engineering and

Chapter 4.
INTERNAL REPRESENTATION
OF FILES
THE DESIGN OF THE UNIX OPERATING SYSTEM
Maurice J. bach Prentice Hall
1
contents
•
•
•
•
•
•
Inodes
Structure of a regular file
Conversion of a path name to an inode
Super block
Inode assignment to a new file
Delete Inode
2
File System Algorithms
namei
alloc free
iget
ialloc ifree
iput
buffer allocation algorithms
getblk
brelse
bread
bwrite
Lower Level File system Algorithms
3
4.1 Inode
• contains the information necessary for a process to
access a file
• exits in a static form on disk and the kernel reads
them into an in-core inode
4
4.1 Inodes
• consists of
- file owner identifier
- file type
- file access permissions
- file access times
- number of links to the file
- table of contents for the disk address of data in a
file
- file size
5
4.1 Inodes
• in-core copy of the inode contains
- status of the in-core inode
- logical device number of file system
- inode number
- pointers to other in-core inodes
- reference count
6
iget (inode_no) //getIncoreInode
• while (not done)
– if (inode in inode cache)
• if (inode locked)
– sleep(event inode becomes unlocked)
– continue
• if (inode on inode free list)
– remove from free list
– return locked inode
–
–
–
–
–
–
–
if (no inode on free list) return error
remove new inode from free list
set inode number
remove inode from old hash queue and place on new one
read inode from disk
set reference count 1
return locked indoe
7
iput (inode_no) //releaseIncoreInode
– lock inode if not locked
– decrement inode refernece count
– if (refernce count==0)
• if (inode link==0)
– free disk block
– set file type to 0
– free inode
• if (file accessed or inode changed or file changed)
– update disk inode
• put inode on free list
– Release inode lock
8
4.2 Structure of a regular file
Inode
Data Blocks
direct0
direct1
direct2
direct3
direct4
direct5
direct6
direct7
direct8
direct9
single indirect
double indirect
triple indirect
9
4.2 Structure of a regular file
Suppose System V UNIX
Assume that a logical on the file system holds 1K bytes and that a block
number is addressable by a 32 bit integer, then a block can hold up to 256
block numbers
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 bytes
10
4.4 Path conversion to an inode
• if (path name starts with root)
– working inode= root inode
• else
– working inode= current directory inode
• while (there is more path name)
– read next component from input
– read directory content
– if (component matches an entry in directory)
• get inode number for matched component
• release working inode
• working inode=inode of matched component
– else
– return no inode
• return (working inode)
11
4.4 Conversion of a path name
to an inode
• algorithm namei
- If path name starts from root, then the kernel assigns root inode(iget) to
working inode
- Otherwise, the kernel assigns current directory inode to working inode
- While there is more path name, the kernel reads next path name
component from input, and verifies that working inode is of directory,
access permissions OK
• If working inode is of root and component is ‘..’, then the kernel checks
whether there is more path name or not
• Otherwise the kernel reads directory by repeated use of
bmap,bread,brelse
12
4.5 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
13
4.6 Inode assignment to a new file
Super Block Free Inode List
free inodes
83
18
19
48
empty
20
array1
index
Super Block Free Inode List
free inodes
83
18
19
empty
20
array2
index
Assigning Free Inode from Middle of List
14
4.6 Inode assignment to a new file
Super Block Free Inode List
470
empty
0
array1
index
remembered
inode
Super Block Free Inode List
535
free inodes
0
array2
476 475 471
48
49
50
index
Assigning Free Inode – Super Block List Empty
15
4.6 Inode assignment to a new file
535
476 475 471
remembered inode
free inodes
index
Original Super Block List of Free Inodes
499
remembered inode
476 475 471
free inodes
Free Inode 499
499
remembered inode
index
476 475 471
free inodes
index
Free Inode 601
16
4.6 Inode assignment to a new file
• Locked inode illoc()
– while (not done)
• If (super block locked)
– Sleep (event super block becomes free)
– Continue
• If (inode list in super block empty)
– Lock super block
– Get remember inode for free inode search
– Search until super block full or no more free inode
– Unlock super block and wake up (event super block free)\
– If no free inode found on disk return error
– Set remmbered inode for next free inode search
• Get inode number from super block inode list
• Get inode
• Write inode to disk
• Decrement free inode count
• Return inode
17
Freeing inode
• ifree(inode_no)
– Increment free inode count
– If super block locked return
– If (inode list full) //at super block
• if (inode number <remembered inode)
– Set remembered inode as input inode
– Else
• Store inode number in inode list
– return
18
4.7 Allocation of disk blocks
109 106 103 100 …………………………..
109
211 208 205 202 ……………………
112
211
310 307 304 301
214
……………………
310
409 406 403 400 ……………………
313
linked list of free disk block number
19
4.7 Allocation of disk blocks
• algorithm alloc
- The kernel wants to allocate a block from a file system
it allocates the next available block in the super block list
- Once allocated , the block cannot be reallocated until it becomes free
- If the allocated block is the last block , the kernel treats it as a pointer to a
block that contains a list of free blocks
• The kernel locks super block, reads block jut taken from
free list, copies block numbers in block into super
block, releases block buffer,and unlocks super block
- Otherwise,
• The kernels gets buffer for block removed from super
block list , zero buffer contents, decrements total count
of free blocks, and marks super block modified
20
4.7 Allocation of 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
21
4.7 Allocation of 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
22