코딩하는 둥둥

[ 쉽게 배우는 운영체제 ] 7-3. 단일 프로그래밍 환경에서의 메모리 할당 본문

Computer Science/쉽게 배우는 운영체제

[ 쉽게 배우는 운영체제 ] 7-3. 단일 프로그래밍 환경에서의 메모리 할당

둥둥 2022. 8. 26. 23:06
728x90

메모리 오버레이

지금은 메모리의 가격이 부담스럽지 않고 용량도 넉넉하여 문제가 없지만 과거에는 작은 메모리로 큰 프로그램을 어떻게 작동할 것인가가 문제였다.

이러한 문제를 해결하기 위해 프로그램의 크기가 실제 메모리(물리 메모리) 보다 클 때 전체 프로그램을 메모리에 가져오는 대신 적당한 크기로 잘라서 가져오는 기법을 메모리 오버레이(memory overlay)라고 한다.

메모리 오버레이는 프로그램을 몇 개의 모듈로 나누고 필요할 때마다 모듈을 메모리에 가져와 사용한다.

이런 식으로 프로세스를 필요할 때마다 메모리에 가져와 사용하면 프로그램 전체를 메모리에 올려놓고 실행하는 것보다 속도가 느리지만 메모리가 프로그램보다 작을 때에도 실행할 수 있어 유용하다.

 

메모리 오버레이에서 어떤 모듈을 가져오거나 내보낼지는 CPU 레지스터 중 하나인 프로그램 카운터 PC가 결정한다. 

프로그램 카운터는 앞으로 실행할 명령어의 위치를 가리키는 레지스터로, 해당 모듈이 메모리에 없으면 메모리 관리자에게 요청하여 메모리로 가져오게 한다.

 

메모리 오버레이의 의미

한정된 메모리에서 메모리보다 큰 프로그램의 실행이 가능하다. 이는 가상 메모리 시스템의 기본이 되는 개념이다.

프로그램 전체가 아닌 일부만 메모리에 올라와도 실행이 가능하다. 프로그램은 개념적으로 한 덩어리이지만 일부분만 가지고도 실행할 수 있어 메모리를 여러 조각으로 나누어 여러 프로세스에 할당할 수 있다.  


스왑 Swap

메모리가 모자라서 쫓겨난 프로세스는 저장장치의 특별한 공간에 모아두는데 이러한 영역을 스왑 영역이라고 부른다.

스왑 영역에서 메모리를 가져오는 작업은 스왑인(swap in), 메모리에서 스왑 영역으로 데이터를 내보내는 작업은 스왑 아웃(swap out)이라고 한다.

스왑 영역은 메모리에서 쫓겨났다가 다시 돌아가는 데이터가 머무는 곳이기 때문에 저장장치는 장소만 빌려주고 메모리 관리자가 관리한다.

 

메모리 오버레이에서는 메모리보다 큰 프로그램을 실행할 때 프로그램을 메모리보다 작은 크기의 모듈로 나눠서 사용한다.

여기에 스왑을 이용하면 스왑 영역의 크기가 메모리의 크기로 인식되기 때문에 사용자는 실제 메모리의 크기와 스왑 영역의 크기를 합쳐서 전체 메모리로 인식하고 사용할 수 있다.

이렇게 하면 실제 메모리의 모자란 부분을 보충하여 사용자 입장에서는 실제 메모리의 크기에 상관없이 큰 프로그램을 실행할 수 있다.

 

컴퓨터의 최대 절전모드는 현재 작업중인 상태 그대로 쉬게 하는 것으로, 사용 시 CPU와 메모리의 전력 공급을 끊기 때문에 메모리에 있는 내용이 모두 사라진다.

그러므로 원래 작업으로 복귀시키려면 현재 메모리에 있는 데이터를 스왑 영역으로 옮겨야 한다.


윈도우 운영체제는 스왑 영역을 분리된 파티션으로 따로 관리하지 않고 운영체제와 같은 파티션(대부분 C드라이브)에 넣고 파일 형태로 관리한다.

스왑 영역은 하드디스크에 존재하지만 메모리 관리자가 관리하기 때문에 디스크 관리자는 그 안에 어떤 내용이 있는지, 어떻게 관리되는지 알 수 없기 때문에 디스크 조각모음 시 '이동할 수 없는 파일'로 표시된다.

 

728x90