Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

메모리 관리의 최적 맞춤 알고리즘을 위한 C++ 프로그램

<시간/>

블록 크기와 프로세스 크기를 포함하는 두 개의 배열이 제공됩니다. 작업은 메모리 관리에서 Best Fit 알고리즘에 따라 결과를 인쇄하는 것입니다.

최적 맞춤 알고리즘이란 무엇입니까?

Best Fit은 메모리 관리 알고리즘입니다. 요청 프로세스의 요구 사항을 충족하는 가장 작은 여유 파티션 할당을 처리합니다. 이 알고리즘에서 우리는 전체 메모리 블록을 찾고 프로세스에 가장 작고 가장 적합한 블록을 확인한 다음 적절한 프로세스를 수행하는 데 사용할 수 있는 인접 블록을 찾습니다.

따라서 블록 크기와 프로세스 크기를 가져와서 프로세스의 출력과 프로세스에 할당할 블록을 반환합니다.

메모리 관리의 최적 맞춤 알고리즘을 위한 C++ 프로그램

예시

Input: bsize[] = {100, 500, 200, 300, 400}
   psize[] = {112, 518, 110, 526}
Output:
Process No. Process Size Block no.
1            112          3
2            518          Not Allocated
3            110          4
4            526         Not Allocated

위의 문제를 해결하기 위해 접근 방식을 사용할 것입니다 -

  • 프로세스 광고 블록 크기를 입력합니다.
  • 처음에는 모든 메모리 블록을 여유 공간으로 설정합니다.
  • 각 프로세스를 취하여 블록에 할당할 수 있는 최소 블록 크기를 구하면 전체 블록 중 프로세스 크기보다 큰 최소 블록을 의미합니다.
  • 발견되면 현재 프로세스에 할당하고 그렇지 않으면 해당 프로세스를 종료하고 추가 프로세스를 확인합니다.

알고리즘

Start
Step 1-> In function void bestfit(int bsize[], int m, int psize[], int n)
   Declare int alloc[n]
   Call function memset(alloc, -1, sizeof(alloc))
   Loop For i=0 and i<n and i++
      Declare and Initialize bestIdx = -1
      Loop For j=0 and j<m and j++
         If bsize[j] >= psize[i] then,
            If bestIdx == -1 then,
               Set bestIdx = j
            Else If bsize[bestIdx] > bsize[j] then,
               Set bestIdx = j
            If bestIdx != -1 then,
               Set alloc[i] = bestIdx
               Set bsize[bestIdx] -= psize[i]
      Loop For i = 0 and i < n and i++
         Print i+1, psize[i]
         If alloc[i] != -1
            Print alloc[i] + 1
         Else
            Print "Not Allocated"
            Print newline
Step 2->In function int main()
   Declare and initialize bsize[] = {100, 500, 200, 300, 400}
   Declare and initialize psize[] = {112, 518, 110, 526}
   Set m = sizeof(bsize)/sizeof(bsize[0])
   Set n = sizeof(psize)/sizeof(psize[0])
   Call function bestfit(bsize, m, psize, n)
Stop

예시

#include <iostream>
#include <memory>
using namespace std;
// To allocate the memory to blocks as per Best fit
// algorithm
void bestfit(int bsize[], int m, int psize[], int n) {
   // To store block id of the block allocated to a
   // process
   int alloc[n];
   // Initially no block is assigned to any process
    memset(alloc, -1, sizeof(alloc));
   // 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 bestIdx = -1;
      for (int j=0; j<m; j++) {
         if (bsize[j] >= psize[i]) {
            if (bestIdx == -1)
               bestIdx = j;
            else if (bsize[bestIdx] > bsize[j])
               bestIdx = j;
         }
      }
      // If we could find a block for current process
      if (bestIdx != -1) {
         // allocate block j to p[i] process
         alloc[i] = bestIdx;
         // Reduce available memory in this block.
         bsize[bestIdx] -= psize[i];
      }
   }
   cout << "\nProcess No.\tProcess Size\tBlock no.\n";
   for (int i = 0; i < n; i++) {
      cout << " " << i+1 << "\t\t\t\t" << psize[i] << "\t\t\t\t";
      if (alloc[i] != -1)
         cout << alloc[i] + 1;
      else
         cout << "Not Allocated";
         cout << endl;
   }
}
// Driver code
int main() {
   int bsize[] = {100, 500, 200, 300, 400};
   int psize[] = {112, 518, 110, 526};
   int m = sizeof(bsize)/sizeof(bsize[0]);
   int n = sizeof(psize)/sizeof(psize[0]);
   bestfit(bsize, m, psize, n);
   return 0 ;
}

출력

Process No. Process Size    Block no.
 1              112             3
 2              518          Not Allocated
 3              110             4
 4              526          Not Allocated