본문 바로가기
공부/CS

기술 면접 대비 정리 - 1.4 메모리 관리 전략

by son_i 2024. 3. 3.
728x90

다수의 프로세스를 실행하려면 한정된 메모리 공간에 많은 프로세스를 로드할 수 있어야 한다.

그래서 메모리 공간을 더 효율적으로 활용하기 위한 여러 방안이 고안되었다.

연속 메모리 할당, 페이징, 세그먼테이션 등의 작동 방식과 장단점을 이해하고 있어야 이후의 가상 메모리를 더 쉽게 이해할 수 있다.

 

1.4.1 논리 메모리와 물리 메모리

CPU가 프로세스를 처리할 때 보는 주소 값과 실제 메모리의 주소 값은 다르다.

 

프로세스가 보는 메모리 영역 논리 메모리 영역(logical memory address space) / 가상 메모리 영역(virtual memory)

실제로 사용되는 메모리 영역 물리 메모리 영역

 

CPU가 프로세스를 실행하며 보는 주소 값 :  논리주소 / 가상주소

실제 메모리에서 사용되는 주소 : 물리주소

 

CPU가 프로세스를 실행할 때 사용하는 주소 값과 실제 주소 값이 달라서 논리 -> 물리 주소 변환이 필요하다.

이 동작을 하는 하드웨어 장치를 메모리 관리 장치(MMU, Memory Management Unit)이라고 한다.

 

MMU는 CPU에 위치하며, CPU에서 메모리에 접근하기 전에 MMU를 거쳐 논리 주소에 해당하는 물리 주소를 얻는다.

MMU는 보호해야 하는 메모리 영역에 대한 접근을 제한해 메모리를 보호하는 역할을 한다.

 

다음 그림은 MMU의 작동 방식

 


1.4.2 연속 메모리 할당

연속 메모리 할당은 멀티 프로세스 환경에서 여러 프로세스를 메모리에 연속적으로 로드하는 방법이다.

연속 메모리 할당은 2가지 방식이 있다.

 

고정 분할 방식

고정 분할은 메모리 영역을 분할한 뒤 각 영역에 프로세스를 할당하는 방식.

이때 분할된 영역의 크기는 서로 다를 수 있으며, 분할된 크기는 고정된다.

 

단점 : 메모리에 올릴 수 있는 프로세스 수와 각 프로세스 크기가 제한된다는 단점이 있고, 단편화 문제가 발생할 수 있다.

오른쪽 그림에서 8MB의 공간과 2MB의 공간을 합치면 프로세스 7에 공간을 할당할 수 있지만

고정 분할이라 할당하지 못 한다.

이런 경우를 외부 단편화라고 한다.

 

그리고 프로세스 3과 4처럼 분할된 크기보다 작은 프로세스가 할당되어서 메모리 공간이 남는 경우를 내부 단편화 라고 한다.

 

가변 분할 방식

가변 분할은 할당할 프로세스의 크기에 따라 메모리 공간을 분할하는 방식이다.

 

이 방식은 메모리 할당 알고리즘을 이용해 가용 메모리 공간에서 프로세스가 로드될 수 있는 메모리 공간을 찾는다.

메모리 할당 알고리즘으로는 최초 적합, 최적 적합, 최악 적합 등이 있다.

 

1. 최초 적합(first-fit)

가용 메모리 공간에서 프로세스 크기만큼 비어 있는 메모리 공간을 찾아 차례대로 프로세스를 로드하는 방식이다.

 

해당 프로세스가 할당될 수 있는 공간을 찾으면 더이상 탐색을 진행하지 않는다.

프로세스 4는 6MB의 공간에 배치되는게 제일 좋지만 18MB의 공간을 찾게 되면 탐색을 종료하고 그 부분에 할당되게 된다.

 

2. 최적 적합(best-fit)

할당하려는 프로세스 크기 이상인 가용 메모리 공간 중에서 가장 작은 공간에 프로세스를 할당하는 방식.

이 방식은 가용 메모리 공간을 모두 탐색해야함.

 

3. 최악 적합(worst-fit)

할당하려는 프로세스 크기보다 큰 가용 메모리 공간 중에서 가장 큰 공간에 프로세스를 할당하는 방식.

최적 적합 방식과 마찬가지로 가용 메모리 공간을 모두 탐색해야 한다.

프로세스 4를 할당할 수 있는 가용 메모리 공간 18MB 와 6MB를 모두 탐색하고 이중에서 가장 큰 18MB의 메모리 공간에 프로세스 4가 할당된다.

 

외부 단편화 문제를 해결하는 방법으로 메모리 압축(memory compaction)이 있다.
메모리 압축은 프로세스가 사용 중인 메모리 공간을 재배치해서 흩어져 있는 가용 메모리 공간을 하나로 합치는 것으로 메모리 집약이라고도 한다.

흩어져있는 가용 메모리 중에서 프로세스 7이 들어갈 수 있는 공간은 없지만 메모리 압축을 수행하면 14MB의 가용 공간이 생기므로 외부 단편화 문제를 해결하고 프로세스 7을 메모리에 로드할 수있다.

 


1.4.3 비연속 메모리 할당

비연속 메모리 할당은 프로세스의 메모리 영역을 나눠서 메모리 공간에 저장하는 방법으로, 페이징과 세그먼테이션이라는 2가지 방법이 있다.

 

페이징

페이징 기법은 프로세스의 논리 메모리 영역과 물리 메모리 영역을 각각 일정한 크기의 페이지프레임으로 나눈다.

이때 페이지와 프레임 크기는 동일하다.

(논리 메모리 영역을 -> 페이지로 나누고, 물리 메모리 영역을 프레임으로 나눔)

 

페이지와 프레임에는 각각 번호를 할당해 프로세스의 페이지와 메모리의 프레임을 매핑한다.

 

페이지와 프레임을 매핑하는 데는 페이지 테이블을 사용한다.

페이지 테이블은 프로세스의 페이지 정보와 페이지에 매핑하는 프레임의 주소 값을 저장한다.

페이지 테이블은 각 프로세스의 PCB에 저장된다.

 

페이징 기법이 작동하는 방식

페이징 기법을 사용하면 페이지를 물리 메모리에 연속적으로 할당할 필요가 없어서 외부 단편화 문제를 해결할 수 있다. 하지만 프로세스 크기가 페이지 수로 나누어 떨어지는 보장하지 않는다.

 

=> 따라서 프로세스의 마지막 페이지가 페이지 크기보다 작을 수 있으므로 내부 단편화 문제가 발생할 수 있다.

 

페이징 기법의 단점 : 프로세스 크기가 페이지 수로 나누어 떨어진다는 보장이 없어 내부 단편화 문제 발생 가능성.

   또한 페이지 테이블을 저장하기 위한 메모리 공간이 추가로 필요.

 

페이징 기법은 3가지 존재.
- 계층적 페이징 : 페이지 테이블을 다시 페이지로 나눠 페이지 테이블 자체를 페이징 하는 방식으로, 멀티 레벨 페이징 이라고도 한다.
- 해시 페이지 테이블 : 해시 테이블의각 항목에 저장된 연결 리스트에 페이지 번호를 해싱한 뒤에 첫 번째 요소와 가상 페이지 번호를 비교하는 방식이다.
- 역 페이지 테이블 : 프레임을 이용해 페이지를 찾는 방식이다. 페이지로 프레임을 찾는 기존 방식과 반대다. 

 

세그먼테이션

세그먼테이션 기법은 프로세스의 메모리 영역을 논리적 단위인 세그먼트로 분할해 메모리를 할당한다.

여기서 논리적 단위는 파일 내 함수 단위나 프로세스의 스택, 힙과 같은 영역을 의미하기도 한다.

 

이 기법은 세그먼테이션 테이블을 사용해 세그먼트의 논리 주소를 물리 주소로 매핑한다.

세그먼트 테이블은 세그먼트 번호를 인덱스로 사용하며, 세그먼트 별 시작 주소인 base와 세그먼트 길이인 limit를 저장한다.

세그먼테이션 기법은 프로세스의 메모리 영역을 논리적 단위로 나눠 저장하므로 단위별로 데이터를 보호하기 쉽다는 장점이 있다.

 

하지만 세그먼트의 크기가 균등하지 않아서 프로세스의 할당 / 해제를 반복하는 과정에서 외부 단편화 문제가 발생할 수 있다.

또한, 메모리에 로드된 스택 세그먼트 영역에서 오버플로가 발생하면 다른 프로세스와 메모리 영역이 겹칠 수 있다.

그러면 다른 프로세스의 세그먼트나 스택 오버 플로가 발생한 세그먼트를 디스크로 스왑 아웃해야 하는 단점이 있다.

 


예상 질문

1. OS의 메모리 관리 전략 중 페이징과 세그먼테이션을 비교해서 설명해보세요.

페이징과 세그먼테이션은 비연속 메모리 할당 방식으로, 프로세스가 메모리에 연속적으로 할당될 때 발생할 수 있는 문제(단편화)를 보완하는 기법이다. 

페이징은 프로세스의 논리 메모리 영역을 페이지 단위로, 물리 메모리 영역을 프레임으로 나누고 (페이지 크기 == 프레임 크기) 페이징 테이블을 두어 서로를 매핑해 사용하는 방식이다. 이 기법은 메모리 할당 문제를 해결할 수 있지만, 프로세스의 크기가 페이지 수로 나눠 떨어지지 않을 경우 내부 단편화가 발생할 수 있고 페이지 테이블을 위한 저장공간이 추가로 필요하다는 단점이 있다.

반면 세그먼테이션은 프로세스를 논리적 단위로 분할한다. 프로세스의 메모리 영역을 분할 했기 때문에 메모리 보호가쉽지만, 외부 단편화 문제가 발생할 수 있다.

TIP) OS의 메모리 관리 전략 중 비연속 메모리 할당인 페이징과 세그먼테이션의 차이점을 알고 있어야 한다. 또한 각각 내부 단편화와 외부 단편화라는 단점이 있다는 것을 알고있으면 좋다.