logo

Програма для алгоритму найгіршої відповідності в управлінні пам’яттю

Необхідна умова: Методи розподілу розділів
Worst Fit виділяє процес для розділу, який є достатнім найбільшим серед вільно доступних розділів, доступних в основній пам’яті. Якщо великий процес відбувається на пізнішому етапі, пам’ять не матиме місця для його розміщення.

приклад: 

Input : blockSize[] = {100 500 200 300 600}; processSize[] = {212 417 112 426}; Output: Process No. Process Size Block no. 1 212 5 2 417 2 3 112 5 4 426 Not Allocated


 



першої посадки' title=


 

  Implementation:   1- Input memory blocks and processes with sizes. 2- Initialize all memory blocks as free. 3- Start by picking each process and find the maximum block size that can be assigned to current process i.e. find max(bockSize[1] blockSize[2].....blockSize[n]) > processSize[current] if found then assign it to the current process. 5- If not then leave that process and keep checking the further processes.

Нижче наведено реалізацію вищевказаних кроків. 

C++
// C++ implementation of worst - Fit algorithm #include   using namespace std; // Function to allocate memory to blocks as per worst fit // algorithm void worstFit(int blockSize[] int m int processSize[]   int n) {  // Stores block id of the block allocated to a  // process  int allocation[n];  // Initially no block is assigned to any process  memset(allocation -1 sizeof(allocation));  // pick each process and find suitable blocks  // according to its size ad assign to it  for (int i=0; i<n; i++)  {  // Find the best fit block for current process  int wstIdx = -1;  for (int j=0; j<m; j++)  {  if (blockSize[j] >= processSize[i])  {  if (wstIdx == -1)  wstIdx = j;  else if (blockSize[wstIdx] < blockSize[j])  wstIdx = j;  }  }  // If we could find a block for current process  if (wstIdx != -1)  {  // allocate block j to p[i] process  allocation[i] = wstIdx;  // Reduce available memory in this block.  blockSize[wstIdx] -= processSize[i];  }  }  cout << 'nProcess No.tProcess SizetBlock no.n';  for (int i = 0; i < n; i++)  {  cout << ' ' << i+1 << 'tt' << processSize[i] << 'tt';  if (allocation[i] != -1)  cout << allocation[i] + 1;  else  cout << 'Not Allocated';  cout << endl;  } } // Driver code int main() {  int blockSize[] = {100 500 200 300 600};  int processSize[] = {212 417 112 426};  int m = sizeof(blockSize)/sizeof(blockSize[0]);  int n = sizeof(processSize)/sizeof(processSize[0]);  worstFit(blockSize m processSize n);  return 0 ; } 
Java
// Java implementation of worst - Fit algorithm public class GFG  {  // Method to allocate memory to blocks as per worst fit  // algorithm  static void worstFit(int blockSize[] int m int processSize[]   int n)  {  // Stores block id of the block allocated to a  // process  int allocation[] = new int[n];    // Initially no block is assigned to any process  for (int i = 0; i < allocation.length; i++)  allocation[i] = -1;    // pick each process and find suitable blocks  // according to its size ad assign to it  for (int i=0; i<n; i++)  {  // Find the best fit block for current process  int wstIdx = -1;  for (int j=0; j<m; j++)  {  if (blockSize[j] >= processSize[i])  {  if (wstIdx == -1)  wstIdx = j;  else if (blockSize[wstIdx] < blockSize[j])  wstIdx = j;  }  }    // If we could find a block for current process  if (wstIdx != -1)  {  // allocate block j to p[i] process  allocation[i] = wstIdx;    // Reduce available memory in this block.  blockSize[wstIdx] -= processSize[i];  }  }    System.out.println('nProcess No.tProcess SizetBlock no.');  for (int i = 0; i < n; i++)  {  System.out.print(' ' + (i+1) + 'tt' + processSize[i] + 'tt');  if (allocation[i] != -1)  System.out.print(allocation[i] + 1);  else  System.out.print('Not Allocated');  System.out.println();  }  }    // Driver Method  public static void main(String[] args)  {  int blockSize[] = {100 500 200 300 600};  int processSize[] = {212 417 112 426};  int m = blockSize.length;  int n = processSize.length;    worstFit(blockSize m processSize n);  } } 
Python3
# Python3 implementation of worst - Fit algorithm  # Function to allocate memory to blocks as  # per worst fit algorithm  def worstFit(blockSize m processSize n): # Stores block id of the block  # allocated to a process  # Initially no block is assigned  # to any process  allocation = [-1] * n # pick each process and find suitable blocks  # according to its size ad assign to it  for i in range(n): # Find the best fit block for  # current process  wstIdx = -1 for j in range(m): if blockSize[j] >= processSize[i]: if wstIdx == -1: wstIdx = j elif blockSize[wstIdx] < blockSize[j]: wstIdx = j # If we could find a block for  # current process  if wstIdx != -1: # allocate block j to p[i] process  allocation[i] = wstIdx # Reduce available memory in this block.  blockSize[wstIdx] -= processSize[i] print('Process No. Process Size Block no.') for i in range(n): print(i + 1 ' ' processSize[i] end = ' ') if allocation[i] != -1: print(allocation[i] + 1) else: print('Not Allocated') # Driver code  if __name__ == '__main__': blockSize = [100 500 200 300 600] processSize = [212 417 112 426] m = len(blockSize) n = len(processSize) worstFit(blockSize m processSize n) # This code is contributed by PranchalK 
C#
// C# implementation of worst - Fit algorithm  using System; class GFG  {   // Method to allocate memory to blocks   // as per worst fit algorithm   static void worstFit(int []blockSize int m   int []processSize int n)   {   // Stores block id of the block allocated to a   // process   int []allocation = new int[n];     // Initially no block is assigned to any process   for (int i = 0; i < allocation.Length; i++)   allocation[i] = -1;     // pick each process and find suitable blocks   // according to its size ad assign to it   for (int i = 0; i < n; i++)   {   // Find the best fit block for current process   int wstIdx = -1;   for (int j = 0; j < m; j++)   {   if (blockSize[j] >= processSize[i])   {   if (wstIdx == -1)   wstIdx = j;   else if (blockSize[wstIdx] < blockSize[j])   wstIdx = j;   }   }     // If we could find a block for current process   if (wstIdx != -1)   {   // allocate block j to p[i] process   allocation[i] = wstIdx;     // Reduce available memory in this block.   blockSize[wstIdx] -= processSize[i];   }   }     Console.WriteLine('nProcess No.tProcess SizetBlock no.');   for (int i = 0; i < n; i++)   {   Console.Write(' ' + (i+1) + 'ttt' + processSize[i] + 'ttt');   if (allocation[i] != -1)   Console.Write(allocation[i] + 1);   else  Console.Write('Not Allocated');   Console.WriteLine();   }   }     // Driver code  public static void Main(String[] args)   {   int []blockSize = {100 500 200 300 600};   int []processSize = {212 417 112 426};   int m = blockSize.Length;   int n = processSize.Length;     worstFit(blockSize m processSize n);   }  }  // This code has been contributed by 29AjayKumar 
JavaScript
<script> // Javascript implementation of // worst - Fit algorithm // Method to allocate memory to  // blocks as per worst fit // algorithm function worstFit(blockSize m   processSize n) {    // Stores block id of the block allocated  // to a process  let allocation = new Array(n);    // Initially no block is assigned  // to any process  for(let i = 0; i < allocation.length; i++)  allocation[i] = -1;    // Pick each process and find suitable blocks  // according to its size ad assign to it  for(let i = 0; i < n; i++)  {    // Find the best fit block  // for current process  let wstIdx = -1;  for(let j = 0; j < m; j++)  {  if (blockSize[j] >= processSize[i])  {  if (wstIdx == -1)  wstIdx = j;  else if (blockSize[wstIdx] <  blockSize[j])  wstIdx = j;  }  }    // If we could find a block for  // current process  if (wstIdx != -1)  {    // Allocate block j to p[i] process  allocation[i] = wstIdx;    // Reduce available memory in this block.  blockSize[wstIdx] -= processSize[i];  }  }    document.write('  
Process No.  '
+ ' Process Size  ' + ' Block no.
'
); for(let i = 0; i < n; i++) { document.write(' ' + (i + 1) + '     ' + '    ' + processSize[i] + '      '); if (allocation[i] != -1) document.write(allocation[i] + 1); else document.write('Not Allocated'); document.write('
'
); } } // Driver code let blockSize = [ 100 500 200 300 600 ]; let processSize = [ 212 417 112 426 ]; let m = blockSize.length; let n = processSize.length; worstFit(blockSize m processSize n); // This code is contributed by rag2127 </script>

Вихід
Process No. Process Size Block no. 1 212 5 2 417 2 3 112 5 4 426 Not Allocated 

Часова складність: O(N*M), де N – довжина processSize, а M – blockSize. 
Допоміжний простір: O(N)
 
 

Створіть вікторину