Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 배우는 운영체제의 고정 분할(Fixed Partitioning)

이 튜토리얼에서는 운영체제의 메모리 관리 기법 중 하나인 고정 분할(Fixed Partitioning)에 대해 알아보겠습니다.

고정 분할이란?

고정 분할은 운영체제에서 메모리를 관리하는 전통적인 기법 중 하나입니다. 이 기법은 전체 메모리를 크기가 같은 여러 개의 블록(파티션)으로 나누며, 각 블록의 크기는 시스템이 시작되기 전에 미리 정해지기 때문에 실행 중에는 변경할 수 없습니다.

각 파티션에는 하나의 프로세스만 할당될 수 있으며, 프로세스는 연속된(contiguous) 메모리 공간에 배치됩니다. 프로세스의 크기가 파티션 크기보다 작으면 그만큼의 빈 공간이 낭비되는데, 이를 내부 단편화(Internal Fragmentation)라고 합니다.

C++ 예제 코드

다음은 프로세스의 크기에 따라 메모리 블록을 할당하는 예제 프로그램입니다.

#include<iostream>
using namespace std;
int main() {
   int blockNumber = 5, processesNumber = 3;
   int blockSize[5] = {4, 4, 4, 4, 4}, processSize[3] = {1, 2, 3};
   int flags[5], allocation[5];
   for(int i = 0; i < 5; i++) {
      flags[i] = 0;
      allocation[i] = -1;
   }
   // allocating the blocks to processes
   for(int i = 0; i < processesNumber; i++) {
      for(int j = 0; j < blockNumber; j++) {
         if(flags[j] == 0 && blockSize[j] >= processSize[i]) {
            allocation[j] = i;
            flags[j] = 1;
            break;
         }
      }
   }
   for (int i = 0; i < blockNumber; i++) {
      if (flags[i] == 1) {
         cout << "Process " << processSize[allocation[i]] << " is allocated" << endl;
      }
   }
   return 0;
}

코드 설명

  • blockSize: 각 메모리 블록의 크기를 저장하는 배열입니다. 이 예제에서는 모든 블록의 크기가 4로 동일합니다.
  • processSize: 각 프로세스의 크기를 저장하는 배열입니다.
  • flags: 해당 블록이 이미 할당되었는지 여부를 표시합니다. 0은 미할당, 1은 할당됨을 의미합니다.
  • allocation: 각 블록에 어떤 프로세스가 할당되었는지 인덱스를 저장하며, 초기값은 -1입니다.

이중 반복문을 통해 각 프로세스에 대해 아직 사용되지 않았고(flags[j] == 0) 크기가 충분한(blockSize[j] >= processSize[i]) 첫 번째 블록을 찾아 할당합니다. 이러한 방식을 최초 적합(First Fit) 방식이라고 합니다.

실행 결과

위 프로그램을 실행하면 다음과 같은 결과를 얻을 수 있습니다.

Process 1 is allocated
Process 2 is allocated
Process 3 is allocated

크기가 1, 2, 3인 세 개의 프로세스가 각각 크기 4인 블록에 순서대로 성공적으로 할당된 것을 확인할 수 있습니다.

고정 분할의 장단점

장점

  • 구현이 매우 간단하고 이해하기 쉽습니다.
  • 관리 오버헤드가 적어 초찾기 운영체제에서 널리 사용되었습니다.

단점

  • 프로세스가 파티션보다 작을 경우 내부 단편화로 인해 메모리가 낭비됩니다.
  • 동시에 실행할 수 있는 프로세스의 수가 파티션의 개수로 제한됩니다.
  • 파티션 크기가 고정되어 있어 다양한 크기의 프로세스에 유연하게 대응하기 어렵습니다.

마무리

고정 분할은 메모리 관리의 가장 기본적인 형태로, 이후 가변 분할(Variable Partitioning)이나 페이징(Paging) 같은 더 발전된 기법들의 기반이 됩니다. 이 튜토리얼에 대해 궁금한 점이 있다면 댓글로 남겨주세요.