File System Implementation in Operating System
A file is a collection of related information. The file system resides on secondary storage and provides efficient and convenient access to the disk by allowing data to be stored, located, and retrieved.
File system organized in many layers :
- I/O Control level –
Device drivers acts as interface between devices and Os, they help to transfer data between disk and main memory. It takes block number a input and as output it gives low level hardware specific instruction. - Basic file system –
It Issues general commands to device driver to read and write physical blocks on disk.It manages the memory buffers and caches. A block in buffer can hold the contents of the disk block and cache stores frequently used file system metadata. - File organization Module –
It has information about files, location of files and their logical and physical blocks.Physical blocks do not match with logical numbers of logical block numbered from 0 to N. It also has a free space which tracks unallocated blocks. - Logical file system –
It manages metadata information about a file i.e includes all details about a file except the actual contents of file. It also maintains via file control blocks. File control block (FCB) has information about a file – owner, size, permissions, location of file contents.
Advantages :
- Duplication of code is minimized.
- Each file system can have its own logical file system.
Disadvantages :
If we access many files at same time then it results in low performance.
We can implement file system by using two types data structures :
- 1. On-disk Structures –
- Boot Control Block –
It is usually the first block of volume and it contains information needed to boot an operating system.In UNIX it is called boot block and in NTFS it is called as partition boot sector. - Volume Control Block –
It has information about a particular partition ex:- free block count, block size and block pointers etc.In UNIX it is called super block and in NTFS it is stored in master file table. - Directory Structure –
They store file names and associated inode numbers.In UNIX, includes file names and associated file names and in NTFS, it is stored in master file table. - Per-File FCB –
It contains details about files and it has a unique identifier number to allow association with directory entry. In NTFS it is stored in master file table. - Mount Table –
It contains information about each mounted volume. - Directory-Structure cache –
This cache holds the directory information of recently accessed directories. - System wide open-file table –
It contains the copy of FCB of each open file. - Per-process open-file table –
It contains information opened by that particular process and it maps with appropriate system wide open-file. - Linear List –
It maintains a linear list of filenames with pointers to the data blocks.It is time-consuming also.To create a new file, we must first search the directory to be sure that no existing file has the same name then we add a file at end of the directory.To delete a file, we search the directory for the named file and release the space.To reuse the directory entry either we can mark the entry as unused or we can attach it to a list of free directories. - Hash Table –
The hash table takes a value computed from the file name and returns a pointer to the file. It decreases the directory search time. The insertion and deletion process of files is easy. The major difficulty is hash tables are its generally fixed size and hash tables are dependent on hash function on that size.
Generally they contain information about total number of disk blocks, free disk blocks, location of them and etc. Below given are different on-disk structures :
2. In-Memory Structure :
They are maintained in main-memory and these are helpful for file system management for caching. Several in-memory structures given below :
Directory Implementation :