v
FILE
ALLOCATION METHODS:
1. Contiguous Allocation:
o The
contiguous allocation method requires each file to occupy a set of contiguous
blocks on the disk.
o Disk
address defines a linear ordering on the disc. With this ordering assuming that
only one job is accessing the disk assessing block b+1 after block ‘b’ normally requires no head
movement.
o When
head movement is needed it is only one track.
So the number of disc seeks required for assessing contiguously
allocated files is minimal as is seek time when seek is finally needed.
o The
IBM VM/CMS OS uses contiguous allocation because it provides such good
performance.
o Contiguous
allocation of a file is defined by the disc address and length of the first
block.
o If
the file is ‘n’ blocks long and starts
at location ‘b’, then it occupies blocks
b,b+1,b+2,...,b+n-1.
o The
directory entry for each file indicates the address of the starting block and
length of the area allocated for this file.
(Contiguous
allocation of disk space)
o Contiguous
allocation has some problems however. One difficulty is finding a space for new
file.
o Simulations
have shown that both first fit and a best fit are more efficient than worst fit
in terms of both time and storage utilization.
Neither first fit nor best fit is clearly based in terms of storage utilization
but first fit is generally faster.
o The
algorithms suffer from the problem of external fragmentation. As files are allocated and deleted the free
disk space is broken into little pieces.
o External
fragmentation exists whenever free space is broken into chunks. It becomes a
problem when the largest contiguous chunk is insufficient for a request;
storage is recommended into number of holes, no one of which is large enough to
store the data.
o Another
problem with contiguous allocation is determining how much space is needed for
a file. When the file is created, the
total amount of space it will need must be found and allocated. If we allocate too little space to a file, we
may find that the file cannot be extended.
o Even
if the total amount of space needed for a file is known in advance,
pre-allocation maybe inefficient. A file
that grows slowly over a long period must be allocated a space for its final
size even though much on that space may be induced for a long time. The file
therefore has a large amount of internal fragmentation.
o To
minimize drawbacks some use a modified contiguous allocation scheme in which a
contiguous chunk of space is allocated initially and then when that amount is
not large enough another chunk of continuous space, an extent, is added to the
initial allocation.
2. Linked Allocation:
o Linked
allocation solves all problems of contiguous allocation. With linked allocation
a file is a linked list of disc blocks, the disk blocks may be scattered
anywhere on the disc.
o The
directory contains a pointer to the first and last blocks of the file.
o Each
block contains a pointer to the next block.
These pointers are not made available to the user.
o To
create a new file, we simply create a new entry in the directory.
o With
linked allocation, each directory entry has a pointer to the first disc block
of the file. This pointer is initialized
to nil to signify an empty file. The size field is also set to 0.
o Write
to the file causes every block to be found by the free space management system
and this new block is then written to and is linked to the end of the file.
o To
read a file, we simply read blocks by following the pointers from block to
block. There is no external fragmentation with linked allocation and any free
block on the free space list can be used to satisfy a request.
o The
size of a file does not need to be declared when that file is created. A file can continue to grow as long as free
blocks are available.
o The
major problem is that it can be used effectively only for sequential access
files.
o To
find the ‘ith’ block of a file, we must start at the beginning of
that file and follow the pointers until we get to the ‘ith’ block.
o Each
access to a pointer requires a disk read and sometimes a disk seek. Consequently it is inefficient to support a
direct access capability for a linked allocation files.
o The
usual solution to this problem is to collect blocks into multiples called
clusters and allocate the clusters rather than blocks. This method allows the logical to physical
block mapping to remain simple but improve disk throughput and decreases the
space needed for a block allocation and free list management.
o Yet
another problem of linked allocation is reliability. Since the files are linked together by
pointers scattered all over the disc consider what would happen if a pointer
were lost or damaged.
o Partial
solutions are to use doubly linked list or to store the filename and relative
block number in each block; however these schemes require even more overhead
for each file.
o An
important variation on the linked allocation method is the use of file
allocation table (FAT). This simple but
efficient method of disk space allocation is used by MS DOS and OS/2 operating
systems.
o A
section of disc at the beginning of each partition is set aside to contain the
table. The table has one entry for each
disk block and is indexed by block number.
The FAT is used much as is a linked list. The directory entry contains the block number
of the first block of the file. The
table entry indexed by that block number then contains the block number of the
next block in the file. This chain
continues until the last block which has a special end of file value as the
table entry. Unused blocks are indicated
by a 0 table value.
(Linked
allocation of disk space)
3. Indexed Allocation:
o Linked
allocation solves the external fragmentation and size declaration problems of
contiguous allocation.
o However
in the absence of a FAT, linked allocation cannot support efficient direct
access since the pointers to the blocks are scattered with the blocks
themselves all over the disk and need to be retrieved in order.
o Indexed
allocation solves this problem by bringing all the pointers together into one
location: the index block.
o Each
file has its own index block which is an array of disk block addresses. The ‘ith’
entry in the index block points to the ‘ith’ block of the file. The
directory contains the addresses of the index block.
(Indexed
allocation of disk space)
o To
read the ith block, we use the pointer in the ith index
block entry to find and read the desired block.
o When
the file is created, all pointers in the index block are set to nil. When the ith block is first
written, a block is obtained from the free space manager, and its address is
put in the ith index block entry.
o Indexed
allocation supports direct access without suffering from external fragmentation
because any free block on the disk may satisfy a request for more space.
o Indexed
allocation does suffering from wasted space.
The pointer overhead of the index block is generally greater than the
pointer overhead of linked allocation.
o If
the index block is too small, however it will not be able to hold enough
pointers for a large file and a mechanism will have to be available to deal
with this issue.
No comments:
Post a Comment