Non-Contiguous Allocation in Operating System
Prerequisite – Variable Partitioning, Fixed Partitioning
Paging and Segmentation are the two ways that allow a process’s physical address space to be non-contiguous. It has the advantage of reducing memory wastage but it increases the overheads due to address translation. It slows the execution of the memory because time is consumed in address translation.
In non-contiguous allocation, the Operating system needs to maintain the table which is called the Page Table for each process which contains the base address of each block that is acquired by the process in memory space. In non-contiguous memory allocation, different parts of a process are allocated to different places in Main Memory. Spanning is allowed which is not possible in other techniques like Dynamic or Static Contiguous memory allocation. That’s why paging is needed to ensure effective memory allocation. Paging is done to remove External Fragmentation.
There are five types of Non-Contiguous Allocation of Memory in the Operating System:
- Multilevel Paging
- Inverted Paging
- Segmented Paging
Here a process can be spanned across different spaces in the main memory in a non-consecutive manner. Suppose process P of size 4KB. Consider main memory has two empty slots each of size 2KB. Hence total free space is, 2*2= 4 KB. In contiguous memory allocation, process P cannot be accommodated as spanning is not allowed.
In contiguous allocation, space in memory should be allocated to the whole process. If not, then that space remains unallocated. But in Non-Contiguous allocation, the process can be divided into different parts and hence filling the space in the main memory. In this example, process P can be divided into two parts of equal size – 2KB. Hence one part of process P can be allocated to the first 2KB space of main memory and the other part of the process can be allocated to the second 2KB space of main memory. The below diagram will explain in a better way:
But, in what manner we divide a process to allocate them into main memory is very important to understand. The process is divided after analysing the number of empty spaces and their size in the main memory. Then only we do divide our process. It is a very time-consuming process. Their number as well as their sizes changing every time due to execution of already present processes in main memory.
In order to avoid this time-consuming process, we divide our process in secondary memory in advance before reaching the main memory for its execution. Every process is divided into various parts of equal size called Pages. We also divide our main memory into different parts of equal size called Frames. It is important to understand that:
Size of page in process = Size of frame in memory
Although their numbers can be different. Below diagram will make you understand it in a better way: consider empty main memory having a size of each frame is 2 KB, and two processes P1 and P2 are 2 KB each.
Resolvent main memory,
Concluding, we can say that Paging allows the memory address space of a process to be non-contiguous. Paging is more flexible as only pages of a process are moved. It allows more processes to reside in main memory than Contiguous memory allocation.