메모리 관리 전략이란?
메모리 용량이 이전보다 증가하고 있지만 프로그램의 크기 또한 계속 증가하고 있기 때문에 메모리는 언제나 부족한 상황이다.
이러한 상황에서 제한된 물리 메모리의 효율적인 사용과 메모리 참조 방식을 제공하기 위한 전략을
메모리 관리 전략이라고 한다.
메모리 관리 배경
각각의 프로세스는 독립된 메모리 공간을 갖고, 운영체제 혹은 다른 프로세스의 메모리 공간에 접근할 수 없는 제한이 걸려있다. 단지, 운영체제만이 운영체제 메모리 영역과 사용자 메모리 영역의 접근에 제약을 받지 않는다.
Swapping
메모리의 관리를 위해 사용되는 기법. 표준 Swapping 방식으로는 Round Robin과 같은 스케줄링의 다중 프로그래밍 환경에서 CPU 할당 시간이 끝난 프로세스의 메모리를 보조 기억장치로 내보내고 다른 프로세스에 메모리를 할당할 수 있다.
위와 같은 과정을 Swap (스왑시킨다) 이라 한다. 주기억장치(RAM)으로 불러오는 과정을 Swap in, 보조기억장치로 내보내는 과정을 Swap out이라 한다. Swap에는 큰 디스크 전송시간이 필요하기 때문에 현재에는 메모리 공간이 부족할 때 Swapping 이 시작된다.
단편화 (Fragmentation)
프로세스들이 메모리에 적재되고 제거되는 일이 반복되다보면 프로세스들이 차지하는 메모리 틈 사이에 사용하지 못할 만큼의 작은 자유공간들이 늘어가게 되는데, 이것이 단편화이다. 단편화는 2가지 종류로 나뉜다.
- 외부 단편화
- 물리 메모리(RAM)에서 사이사이 남는 공간들을 모두 합치면 충분히 공간이 되는 부분들이 분산되어 있을 때 발생
- 여유 공간이 충분함도 불구하고 이러한 여유 공간들이 조각으로 흩어져 있어(Scattered Holes) 메모리에 프로세스를 적재하지 못해 메모리가 낭비되는 현상
- 내부 단편화
프로세스가 사용하는 메모리 공간에 포함된 남는 부분. 예를 들어 메모리 분할 자유 공간이 10,000B 있고 Process A가 9,998B 사용하게 되면 2B 라는 차이가 존재하고, 이를 내부 단편화라 칭한다.
압축
외부 단편화를 해소하기 위해 프로세스가 사용하는 공간들을 한쪽으로 몰아 자유공간을 확보하는 방법론. 작업 효율이 좋진 않다. 위의 메모리 현황을 압축 작업을 하게 된다면 아래와 같이 바뀐다.
효과적인 메모리 관리를 위한 전략
- 배치 전략을 통한 메모리 관리
- 페이징
- 세그멘테이션
- 메모리 풀 사용
1. 배치 전략
새로 적재되어야 할 데이터를 주기억장치 영역중 어느 곳에 배치할지를 결정하는 전략
- 최초 적합 전략 (first-fit)
- 사용 가능한 공간을 검색하고 첫 번째에 해당하는 곳에 할당하는 방식
- 맨 앞(혹은 지난번 탐색이 끝난 곳)에서부터 가능한 첫 번째 공간을 선택
- 장점 : 가용 공간에 대한 정렬이 필요 없음
- 단점 : 큰 공간을 쪼개어 사용하게 될 수도 있음
- 최적 적합 전략 (best-fit)
- 사용 가능한 공간들 중에서 가장 작은 것을 선택하는 방식
- 가용 공간을 정렬하여 필요한 크기 이상의 공간 중 가장 작은것을 할당하는 방법
- 장점 : 큰 공간을 쪼개어 사용하는 일이 적음
- 단점 : 정렬이 필요
- 최악 적합 전략(worst-fit)
- 사용 가능한 공간들 중에서 가장 큰 것을 선택하는 방식
- 가용 공간을 정렬하여 수용 가능한 공간 중 가장 큰 곳을 할당하는 방법
- 장점 : 남은 공간이 커서 다른 프로세스가 사용 가능
- 단점 : 정렬 필요, 공간 낭비 발생
2. Paging (페이징)
하나의 프로세스가 사용하는 메모리 공간이 연속적이어야 한다는 제약을 없애는 메모리 관리 방법이다. 외부 단편화와 압축 작업을 해소하기 위해 생긴 방법론으로, 물리 메모리는 Frame이라는 고정 크기로 분리되어 있고, 논리 메모리(프로세스가 점유하는)는 페이지라 불리는 고정 크기의 블록으로 분리된다. (페이지 교체 알고리즘에 들어가는 페이지)
페이징 기법을 사용함으로써 논리 메모리는 물리 메모리에 저장될 때, 연속되어 저장될 필요가 없고 물리 메모리의 남는 프레임에 적절히 배치됨으로 외부 단편화를 해결할 수 있는 큰 장점이 있다.
하나의 프로세스가 사용하는 공간은 여러개의 페이지로 나뉘어서 관리되고(논리 메모리에서), 개별 페이지는 순서에 상관없이 물리 메모리에 있는 프레임에 mapping되어 저장된다고 볼 수 있다.
단점
내부 단편화의 문제의 비중이 늘어난다. 예를 들어 페이지 크기가 1,024B이고 Process A가 3,172B의 메모리를 요구한다면 3개의 페이지 프레임(1,024 * 3 = 3,072)하고도 100B가 더 필요하기에 총 4개의 페이지 프레임이 필요한 것이다. 결론적으로 4번쩨 페이지 프레임에는 924B(1,024 - 100)의 여유공간이 남게 되는 내부 단편화 문제가 발생한다.
3. Segmentation (세그멘테이션)
페이징에서처럼 논리메모리와 물리메모리를 같은 크기의 블록이 아닌 서로 다른 크기의 논리적 단위인 세그먼트(Segment)로 분할. 사용자가 두 개의 주소고 지정(세그먼트 번호 + 변위). 세그먼트 테이블에는 각 세그먼트의 기준(세그먼트의 시작 물리주소)와 한계(세그먼트의 길이)를 저장.
단점
서로 다른 크기의 세그먼트들이 메모리에 적재되고 제거되는 일이 반복되다보면, 자유 공간들이 많은 수의 작은 조각들로 나누어져 못쓰게 될 수 있다. (외부 단편화)
4. 메모리 풀 사용
필요한 메모리 공간을 필요한 크기, 개수 만큼 사용자가 직접 지정하여 미리 할당받아 놓고 필요할 때마다 사용하고 반납하는 기법
장점 : 메모리 풀 없이 동적할당과 해제를 반복하면 메모리의 랜덤 한(실제로는 알고리즘에 의한) 위치에 할당과 해제가 반복되면서 단편화를 일으킬 수 있겠지만 미리 공간을 할당해놓고 가져다 쓰고 반납하기 때문에 할당과 해제로 인한 외부 단편화가 발생하지 않는다. 또한 필요한 크기만큼 할당을 해놓기 때문에 내부 단편화 또한 생기지 않는다.
단점 : 단편화로 인한 메모리 낭비량보다 메모리 풀을 만들고 쓰지 않았을 때의 메모리 양이 더 클 경우 사용하지 않아야 한다.
출처
'CS 지식 > 운영체제' 카테고리의 다른 글
[운영체제] 가상 메모리 (0) | 2023.04.27 |
---|---|
[운영체제] 데드락(DeadLock) 관련 면접대비 질문정리 (0) | 2023.03.23 |
[운영체제] 데드락(DeadLock)이란? (0) | 2023.03.23 |
[운영체제] 동기 / 비동기 (0) | 2023.03.13 |
[운영체제] 스케줄링 관련 면접 대비 질문 정리 (0) | 2023.02.20 |