시작하기 전에
저번에 스케줄링을 살펴봤으니 메모리 관리 전략으로 넘어가 봅시다.
다수의 프로세스를 실행하려면 한정된 메모리 공간에 많은 프로세스를 로드할 수 있어야 하는데, 어떻게 가능할까?
논리 메모리와 물리 메모리
- 우선 CPU가 프로세스를 처리할 때 보는 주소 값과 실제 메모리의 주소 값은 다르다.
- 프로세스가 보는 메모리 영역을 논리 메모리 영역이라고 하고, CPU가 프로세스를 실행하며 보는 주소 값을 논리 주소라고 한다.
- 실제로 사용되는 메모리 영역(RAM)을 물리 메모리 영역이라고 하고, 실제 메모리에서 사용되는 주소는 물리 주소라고 한다.
이렇게 주소 값이 다르기 때문에 논리 주소를 물리 주소로 변환해 줘야 하고, 메모리 관리 장치(MMU, Memory Management Unit)가 그 동작을 하는 하드웨어다.
메모리 할당 방식은 연속과 비연속 메모리 할당 방식으로 나뉜다.
연속 메모리 할당은 멀티 프로세스 환경에서 여러 프로세스를 메모리에 연속적으로 로드하는 방법이다. 방식에는 2가지가 있는데, 고정 분할 방식과 가변 분할 방식이다. 이들을 살펴보자.
고정 분할 방식
메모리 영역을 분할한 뒤 각 영역에 프로세스를 할당하는 방식이다. 분할된 크기는 고정된다.
메모리에 올릴 수 있는 프로세스 수와 각 프로세스 크기가 제한되며, 단편화(fragmentation) 문제가 발생할 수 있다는 단점이 있다.
위의 그림을 예로 들면, 8MB의 메모리 공간과 2MB의 메모리 공간을 합치면 프로세스 7에 공간을 할당할 수 있지만, 고정 분할 때문에 할당하지 못한다. 이런 경우를 외부 단편화라고 한다.
그리고 프로세스 3과 프로세스 4처럼 분할된 크기보다 작은 프로세스가 할당되어 메모리 공간이 남는 경우를 내부 단편화라고 한다.
가변 분할 방식
할당할 프로세스의 크기에 따라 메모리 공간을 분할하는 방식이다.
메모리 할당 알고리즘을 이용해 가용 메모리 공간에서 프로세스가 로드될 수 있는 메모리 공간을 찾는다.
메모리 할당 알고리즘으로 최초 적합(first-fit), 최적 적합(best-fit), 최악 적합(worst-fit)이 있다.
1. 최초 적합(first-fit)
가용 메모리 공간에서 프로세스 크기만큼 비어 있는 메모리 공간을 찾아 차례대로 프로세스를 로드하는 방식이다.
- 20MB의 프로세스 1이 56MB의 가용 메모리 공간에 할당된다.
- 18MB의 프로세스 2가 36MB의 가용 메모리 공간에 할당된다.
- 12MB의 프로세스 3이 18MB의 가용 메모리 공간에 할당된다.
- 메모리 영역에서 프로세스 2의 할당이 해제된다.
- 6MB의 프로세스 4를 할당할 수 있는 가용 메모리 공간을 찾으면 '가장 먼저' 18MB의 메모리 공간이 탐색된다. 그러면 더 이상 탐색을 진행하지 않고 프로세스 4를 해당 메모리 공간에 할당한다.
2. 최적 적합(best-fit)
가용 메모리 공간 중에서 가장 작은 공간에 프로세스를 할당하는 방식이다.
이 방식은 가용 메모리 공간을 모두 탐색해야 한다.
- 20MB의 프로세스 1이 56MB의 가용 메모리 공간에 할당된다.
- 18MB의 프로세스 2가 36MB의 가용 메모리 공간에 할당된다.
- 12MB의 프로세스 3이 18MB의 가용 메모리 공간에 할당된다.
- 메모리 영역에서 프로세스 2의 할당이 해제된다.
- 6MB의 프로세스 4를 할당할 수 있는 가용 메모리 공간을 찾으면 18MB와 6MB의 공간이 탐색된다. 이 중에서 '가장 작은' 6MB의 메모리 공간에 프로세스 4가 할당된다.
3. 최악 적합(worst-fit)
가용 메모리 공간 중에서 가장 큰 공간에 프로세스를 할당하는 방식이다.
마찬가지로 가용 메모리 공간을 모두 탐색해야 한다.
- 20MB의 프로세스 1이 56MB의 가용 메모리 공간에 할당된다.
- 18MB의 프로세스 2가 36MB의 가용 메모리 공간에 할당된다.
- 12MB의 프로세스 3이 18MB의 가용 메모리 공간에 할당된다.
- 메모리 영역에서 프로세스 2의 할당이 해제된다.
- 6MB의 프로세스 4를 할당할 수 있는 가용 메모리 공간을 찾으면 18MB와 6MB의 공간이 탐색된다. 이 중에서 '가장 큰' 18MB의 메모리 공간에 프로세스 4가 할당된다.
다음은 비연속 메모리 할당이다. 이는 프로세스의 메모리 영역을 나눠서 메모리 공간에 저장하는 방법으로, 페이징과 세그먼테이션이라는 2가지 방식이 있다. 알아보자.
페이징(Paging)
프로세스의 가상 메모리 영역과 물리 메모리 영역을 각각 일정한 크기의 페이지(page)와 프레임(frame)으로 나눈다. 이때 페이지와 프레임 크기는 동일하다.
페이지와 프레임을 매핑하는 데는 페이지 테이블(page table)을 사용한다. 페이지 테이블은 프로세스의 페이지 정보와 페이지에 매핑하는 프레임의 주소 값을 저장한다. 이는 각 프로세스의 PCB에 저장된다.
- 페이징 기법을 사용하면 페이지를 물리 메모리에 연속으로 할당할 필요가 없어 외부 단편화 문제를 해결할 수 있다.
- 하지만 프로세스 크기가 페이지 수로 나누어 떨어지는지는 보장할 수 없기 떄문에 프로세스의 마지막 페이지가 페이지 크기보다 작으면 내부 단편화 문제가 발생할 수 있다.
- 또한, 페이지 테이블을 저장하기 위한 메모리 공간이 추가로 필요하다.
세그먼테이션(Segmentation)
프로세스의 메모리 영역을 논리적 단위인 세그먼트로 분할해 메모리를 할당한다. 논리적 단위는 파일 내 함수 단위나 프로세스의 스택, 힙과 같은 영역을 의미하기도 한다.
세그먼테이션 테이블(segmentation table)을 사용해 세그먼트의 논리 주소를 물리 주소로 매핑한다. 세그먼트 테이블은 세그먼트 번호를 인덱스로 사용하며, 세그먼트별 시작 주소인 base와 세그먼트 길이인 limit를 저장한다.
- 메모리 영역을 논리적 단위로 나눠 저장하므로 단위별로 데이터를 보호하기 쉽다는 장점이 있다.
- 하지만 세그먼트의 크기가 균등하지 않아서 프로세스의 할당/해제를 반복하는 과정에서 외부 단편화 문제가 발생할 수 있다.
- 또한, 메모리에 로드된 스택 세그먼트 영역에서 오버플로가 발생하면 다른 프로세스와 메모리 영역이 겹칠 수 있고, 그러면 다른 프로세스의 세그먼트나 스택 오버플로가 발생한 세그먼트를 디스크로 스왑 아웃해야 하는 단점이 있다.
메모리 공간이 한정되어 있으므로 사용자는 동시에 많은 프로그램을 실행하고 싶어한다. 이런 메모리 공간의 한계를 극복하기 위해 등장한 가상 메모리라는 개념을 다음 글에서 알아보자.
'📖 Computer Science > 운영체제' 카테고리의 다른 글
[CS Study] 운영체제 (4) - 가상 메모리 (0) | 2025.05.08 |
---|---|
[CS Study] 운영체제 (2) - 스케줄링 (0) | 2025.05.08 |