Contiguous allocation in Operating Systems - Time & Space Complexity
When managing files in an operating system, contiguous allocation stores files in one continuous block on disk.
We want to understand how the time to find or allocate space grows as file size or disk size changes.
Analyze the time complexity of the following code snippet.
int find_contiguous_space(int disk[], int size, int file_size) {
for (int i = 0; i < size; i++) {
int count = 0;
while (count < file_size && i + count < size && disk[i + count] == 0) {
count++;
}
if (count == file_size) {
return i; // start index found
}
}
return -1; // no space found
}
This code searches the disk array to find a continuous free space block large enough for the file.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The outer loop scans each disk block, and the inner while loop checks consecutive blocks for free space.
- How many times: The outer loop runs up to the disk size, and the inner loop runs up to the file size for each position.
As the disk size grows, the search checks more starting points. For each, it may check up to the file size blocks.
| Input Size (disk size n) | Approx. Operations |
|---|---|
| 10 | Up to 10 * file_size checks |
| 100 | Up to 100 * file_size checks |
| 1000 | Up to 1000 * file_size checks |
Pattern observation: The total checks grow roughly by multiplying disk size and file size.
Time Complexity: O(n * m)
This means the time to find space grows proportionally to the disk size times the file size.
[X] Wrong: "The search time depends only on the disk size, not the file size."
[OK] Correct: Because for each disk position, the code checks up to the file size blocks to confirm continuous free space.
Understanding how searching for continuous space scales helps you reason about file system efficiency and resource management.
What if the disk was represented as a linked list instead of an array? How would the time complexity change?
Practice
contiguous allocation in operating systems?Solution
Step 1: Understand file storage methods
Contiguous allocation means storing a file in one continuous block of memory without breaks.Step 2: Compare with other methods
Other methods like linked or indexed allocation store files in scattered blocks or use pointers.Final Answer:
Files are stored in one continuous block of memory. -> Option AQuick Check:
Contiguous allocation = continuous block storage [OK]
- Confusing contiguous with linked allocation
- Thinking files are scattered in contiguous allocation
- Mixing indexed allocation with contiguous
Solution
Step 1: Identify the definition of contiguous allocation
Contiguous allocation means the entire file is stored in one continuous block of memory.Step 2: Eliminate incorrect options
Options A, B, and D describe other allocation methods like linked or indexed allocation.Final Answer:
Files occupy a single continuous block of memory. -> Option CQuick Check:
Continuous block = contiguous allocation [OK]
- Choosing linked or indexed allocation descriptions
- Confusing fixed-size blocks with contiguous storage
- Assuming pointers are used in contiguous allocation
Solution
Step 1: Understand starting block and file size
The file starts at block 50 and occupies 10 continuous blocks.Step 2: Calculate occupied blocks
Blocks occupied are from 50 up to 50 + 10 - 1 = 59.Final Answer:
Blocks 50 to 59 -> Option DQuick Check:
Start 50 + size 10 = blocks 50-59 [OK]
- Off-by-one errors in block range
- Starting count from 1 instead of 0
- Choosing blocks after the last block
Solution
Step 1: Understand contiguous allocation extension
Files must occupy continuous blocks; extension requires free blocks immediately after the file.Step 2: Analyze the problem
Since the next 5 blocks are occupied, the file cannot be extended contiguously.Final Answer:
File cannot be extended because contiguous space is not available. -> Option AQuick Check:
Extension needs free contiguous blocks [OK]
- Assuming scattered blocks can be linked in contiguous allocation
- Ignoring fragmentation issues
- Thinking file can grow without moving
Solution
Step 1: Identify free block sizes
Free blocks are 5 at 0-4, 3 at 10-12, and 7 at 20-26.Step 2: Find a continuous free space of at least 6 blocks
Only blocks 20-26 have 7 continuous free blocks, enough for 6 blocks.Final Answer:
Blocks 20-25, because they have enough continuous free blocks. -> Option BQuick Check:
Need ≥6 continuous blocks, only 20-26 fits [OK]
- Choosing smaller free blocks that don't fit file size
- Ignoring the need for continuous blocks
- Assuming scattered free blocks can be combined
Ready to prove it?
Pass the test and this pattern moves unknown
