• 22. 단일 프로그래밍 환경에서의 메모리 할당

    2021. 9. 22.

    by. ahntree

    728x90

    1. 메모리 오버레이

    이전에 비해 범용적으로 사용하는 메모리의 용량이 늘었지만, 여전히 메모리보다 큰 프로그램을 돌리는 상황이 발생하곤 한다.

     

    한 번에 처리할 수 없기 때문에 프로그램을 적당한 크기로 나눠서 가져와야 하는데 이 기법을 메모리 오버레이(memory overlay)라고 한다. 하나의 메모리에 여러 프로그램을 겹겹이 쌓아놓고 실행한다고 해서 붙여진 이름이다.

     

    프로그램을 몇 개의 모듈로 나눈 뒤 필요할 때마다 해당 모듈을 메모리에 가져와 사용한다. 중요한 모듈은 메모리에 상주시키고 부수적인 모듈들은 필요할 때만 호출하는 것이다.

     

    메모리 오버레이에서 어떤 모듈을 가져오거나 내보낼지는 프로그램 카운터가 결정한다. 프로그램 카운터는 앞으로 실행할 명령어의 위치를 가리키는 레지스터로, 해당 모듈이 메모리에 없으면 메모리 관리자에게 요청한다.

     

    메모리 오버레이는 다음과 같은 중요한 의미가 있다.

     

    • 한정된 메모리에서 메모리보다 큰 프로그램의 실행이 가능하다.
    • 프로그램 전체가 아니라 일부만 메모리에 올라와도 실행이 가능하다. 이는 메모리 또한 여러 조각으로 나누어 여러 프로그램에 할당할 수 있다는 의미이기도 하다.

     

     

     

    2. 스왑

    메모리 오버레이를 사용하다 보면 이미 실행하고 있는 모듈을 메모리에서 제거해야 하는 경우가 있다. 원래 하드디스크에 돌려 놓아도 되지만, 아직 작업이 끝나지 않았거나 추후에 다시 사용할 수도 있기 때문에 저장장치의 별도 공간에 보관해야 한다. 이 공간을 스왑 영역(swap area)이라고 한다. 또한 스왑 영역에서 메모리로 데이터를 가져오는 것을 스왑인, 내보내는 것을 스왑아웃이라고 한다.

     

    스왑 영역은 메모리 관리자가 관리한다. 저장장치는 장소만 제공한다. 사용자는 실제 메모리 + 스왑 영역을 실제 메모리 영역인 것처럼 인식한다. 실제 메모리가 그 크기인 것보다는 속도가 느리겠지만 실제 메모리의 모자란 부분을 보충할 수 있다.

     

    최대 절전 모드처럼 현재 작업 중인 내용을 저장했다가 복귀해야 할 필요가 생기는데, 이 때 사용되는 영역이 스왑 영역이다.

    728x90

    댓글