컴퓨터/운영체제

[운영체제] 메모리 관리(Memory Management)

sidedoor 2024. 1. 23. 15:30

메모리 관리는 컴퓨터 시스템의 핵심 부분으로 시스템의 성능과 효율성에 큰 영향을 미친다.

메모리 계층 구조에는 여러 종류의 메모리가 있고 각각은 속도, 용량, 비용 등에서 서로 다른 특성을 가지고 있다.

메모리 종류:

  1. 레지스터 (Register)
    CPU 내부에 위치한 매우 빠른 메모리로 현재 실행 중인 명령어와 필요한 데이터를 저장한다.
    접근 속도가 가장 빠른 메모리지만 매우 제한된 용량을 가진다.

  2. 캐시 메모리 (Cache Memory)
    CPU와 주 메모리 사이에 위치한 고속 메모리로 자주 사용되는 데이터와 명령어를 저장하여 빠른 접근을 가능하게 한다.
    레지스터보다는 느리지만 용량이 크고, 주 메모리보다는 빠르지만 용량이 작다.

  3. 주 메모리 (Main Memory / RAM)
    시스템의 주요 메모리로 실행 중인 프로그램과 그 데이터를 저장한다.
    캐시보다는 느리지만, 세컨더리 메모리보다는 빠른 접근 속도를 가진다.
    전원이 꺼지면 데이터가 사라지는 휘발성 메모리이다.

  4. 세컨더리 메모리 (Secondary Memory / Hard Disk)
    하드 디스크 드라이브(HDD) 또는 솔리드 스테이트 드라이브(SSD)와 같은 저장 매체로 프로그램, 파일, 운영 체제 등을 영구적으로 저장한다.
    주 메모리보다 접근 속도가 느리지만, 데이터를 영구적으로 저장할 수 있는 비휘발성 메모리입니다.

Partitioning

시스템 메모리를 관리하는 방법 중 하나로 크게 연속 메모리 할당과 비연속 메모리 할당으로 나눌 수 있다. 

 

연속 메모리 할당 (Contiguous Memory Allocation)

  1. 고정 파티션 (Fixed Partitioning)
    메모리가 고정된 크기의 파티션으로 나뉘며 각 프로세스는 하나의 파티션에 할당된다.
    파티션 크기가 프로세스 크기보다 클 경우 남는 공간이 발생하는데 이를 내부 단편화라고 하고 이 메모리 공간은 낭비되는 공간이다.

  2. 동적 파티션 (Dynamic Partitioning)
    프로세스가 요구하는 메모리 크기에 따라 파티션 크기가 동적으로 결정된다.
    동적 파티션 방식에서는 프로세스에 필요한 만큼의 메모리만 할당되기 때문에 일반적으로 내부 단편화가 발생하지 않는다.
    다만, 시간이 지남에 따라 작은 빈 공간들이 여러 개 생겨 충분한 크기의 연속 공간을 찾기 어려워질 수 있어 외부 단편화를 발생시키고 메모리 할당에 문제를 야기한다.

    외부 단편화 해결 방법은 시간이 지남에 따라 메모리에 존재하는 빈 공간들을 하나의 큰 빈 공간으로 합치는 방법인 모리 압축을 사용하면된다.
    하지만 이 방법은 비용이 많이 들고 시스템 성능에 영향을 줄 수 있다.

비연속 메모리 할당 (Non-contiguous Memory Allocation)

메모리를 연속적으로 할당하는 것의 제한을 극복하고 메모리를 보다 효율적으로 관리하는 데 도움을 준다.

 

페이지화 (Paging)
가상 메모리 시스템에서 메인 메모리를 고정된 크기의 블록인 프레임으로 나누고, 프로세스를 메모리에 저장되기 전과 같은 크기의 페이지로 분할하여 메모리를 관리한다.
각 페이지는 메모리의 임의의 프레임에 할당되는데 이 매핑은 페이지 테이블을 통해 관리된다.

 

프레임은 고유한 주소를 가지며 페이지화 시스템에서 페이지를 저장하는 물리적 위치로 사용된다.

그리고 모든 프레임은 크기가 동일하며 이 크기는 시스템마다 다르다.

 

페이지는 프로세스의 데이터와 코드는 페이지 단위로 구성되며 각 페이지는 물리적 메모리의 프레임에 매핑된다.

페이지의 크기는 프레임의 크기와 일치하며 이를 통해 물리적 메모리에 효율적으로 할당된다.

 

Paging을 사용하면 각 페이지는 메모리의 연속적인 공간에 위치할 필요가 없기 때문에 프로세스의 크기가 메모리의 크기에 구애받지 않고 외부 단편화 문제를 해결한다.

하지만 페이지의 크기가 프로세스의 크기와 정확히 일치하지 않을 경우 마지막 페이지의 일부 공간이 낭비될 수 있다.

 

세그멘테이션 (Segmentation)

프로세스의 주소 공간을 서로 다른 크기의 논리적 단위인 세그먼트분할하여 메모리를 관리하는 기법이다.

 

세그먼트는 프로세스의 주소 공간을 구성하는 논리적인 단위로 코드, 데이터, 스택 등으로 구분할 수 있다.

각 세그먼트는 시작 주소와 길이를 가지며 이를 세그먼트 테이블에 저장한다.

그리고 각각의 세그먼트는 가변 크기를 가지는데 함수, 배열, 객체등의 프로세스의 다양한 부분이 필요로 하는 메모리의 양에 따라 크리가 결정된다.

 

Segmentation은 함수나 데이터 구조를 별도의 세그먼트로 관리할 수 있기 때문에 프로그램의 논리적 구조를 더 잘 반영할 수 있다.

하지만 가변 크기의 세그먼트 할당으로 인해 메모리에 빈 공간이 발생할 수 있다.

가상 메모리(Virtual Memory)

실제 메모리보다 더 큰 메모리 공간을 프로그램에 제공하는 시스템으로 물리적 메모리의 크기에 제한받지 않고, 프로그램이 필요로 하는 메모리를 효율적으로 사용할 수 있게 해준다.

 

가상 메모리는 각 프로그램에게 실제 물리적 메모리보다 큰 메모리 공간을 제공하기 때문에 더 많은 프로그램을 동시에 메모리에 로드할 수 있어 degree of multi-programming을 증가시킨다.

 

그리고 Memory Overcommitment을 통해서 시스템이 필요한 경우 실제 물리적 메모리에 저장하지 않고 디스크에 일부 데이터를 저장하여 실제 사용 가능한 메모리보다 더 많은 프로그램을 실행할 수 있다.

 

가상 메모리 시스템은 현재 활성화된 프로세스에 필요한 부분만 메모리에 유지되기 때문에 비활성화된 프로세스의 메모리 영역을 디스크에 임시 저장하여 메모리를 보다 효율적으로 사용할 수 있게 한다.