연속 메모리 할당은 무엇이며, 어떻게 운영될까?
연속 메모리 할당 (Contiguous Memory Allocation)
--
연속 메모리 할당은
각 프로세스의 크기만큼 메모리 주소를 할당받아 연속적으로 메모리에 배치하는 구조로
프로세스에 연속적인 메모리 공간을 할당하는 방식을 의미한다.

연속 메모리 할당 방식에는 크게 두 가지 문제를 가지고 있다.
1. 외부 단편화
2. 물리 메모리보다 큰 프로세스는 실행 불가
--
스와핑 (Swapping)
--
스와핑은
메모리상의 빈 공간에 또 다른 프로세스를 적재하여 실행하는 방식을 의미한다.
메모리에 적재된 프로세스들 중에는
현재 실행되지 않는 프로세스, 입출력 작업의 요구로 대기 상태가 된 프로세스 등
오랫동안 사용되지 않은 프로세스들을 메모리에서 (스왑 영역으로) 빼낸다.
- 스왑 영역 (Swap Space) : 보조기억장치의 일부 영역 (오랫동안 사용하지 않은 프로세스를 임시 저장하는 곳)
- 스왑 아웃 (Swap-Out) : 메모리 -> 스왑 영역으로 옮기는 행위
- 스왑 인 (Swap-In) : 스왑 영역 -> 메모리로 옮기는 행위

"스왑 인"이 동작할 때
"스왑 아웃"하기 전의 메모리 물리 주소와는 다른 주소에 적재될 수 있다.
(해당 주소에 다른 프로세스가 스와핑하여 사용 중 일 수 있기 때문)
"스왑 인", "스왑 아웃"은
운영체제가 자동으로 결정하고 관리하는 것으로
현재 메모리 상황과 프로세스의 상태를 고려하여 필요한 시점에 자동으로 스왑 작업을 수행한다.
스와핑을 이용하면
동시에 실행해야 하는 프로세스들이 요구하는 총 메모리 주소 공간의 크기가
실제 메모리 공간의 크기보다 큰 경우에도 동시에 실행할 수 있다.

- 프로세스 A를 메모리에 적재(실행)
- 프로세스 B를 메모리에 적재(실행)
- 프로세스 C를 메모리에 적재(실행)
- 프로세스 B를 스왑 아웃 & 프로세스 D를 메모리에 적재(실행)
- 프로세스 A를 스왑 아웃 & 프로세스 B를 스왑 인(실행)
위와 같은 방식으로 스왑 인/아웃을 적절하게 반복하여 총 4개의 프로세스가 실행되도록 구성한다.
사실 위 그림에서 알 수 있는 것처럼
"물리적인 관점"에서는 실제 메모리에 모든 프로세스가 동시에 적재되어 실행되는 것이 아니기에
모든 프로세스가 동시에 실행된다고 볼 수 없지만
"논리적인 관점"으로는 운영체제가 프로세스 전환을 빠르게 처리하여 사용자에게는
동시에 모든 프로세스가 실행되는 것처럼 보이게 만드므로 동시에 실행된다고 볼 수 있다.
즉, 프로세스들이 스와핑을 통해 교대로 실행되어 사용자나 시스템 입장에서는
여러 프로세스가 동시에 실행되는 것처럼 보이는 것이다.
--
메모리 할당
--
프로세스는 메모리 내의 빈 공간에 적재(할당)되어야 한다.
만약 메모리 내에 빈 공간이 여러 개가 존재할때는 여러 방법이 존재한다.
메모리의 빈 공간에 할당하는 대표적인 방법들
(연속 메모리 할당 방식 기준)
- 최초 적합 (First Fit) : 순서대로 탐색하여 적재할 수 있는 빈 공간 발견 시 바로 적재
- 최적 적합 (Best Fit) : 모든 빈 공간을 탐색 후 적재 가능한 공간 중 가장 작은 공간에 적재
- 최악 적합 (Worst Fit) : 모든 빈 공간을 탐색 후 적재 가능한 공간 중 가장 큰 공간에 적재

--
외부 단편화 (External Fragmentation)
--
외부 단편화는
메모리 관리에서 발생하는 문제로,
메모리 공간은 충분히 존재하지만, 사용할 수 있는 연속적인 메모리 블록이 부족하여
새로운 프로세스를 할당할 수 없는 상태를 의미한다.
즉, 연속 메모리 할당 방식에서 발생하는 문제점 중 하나다.

[1]
모든 프로세스가 연속적으로 차근차근 메모리에 적재되어 실행 중인 상태다.
[2]
프로세스 B와 D는 모든 작업이 완료되어 메모리 공간을 반납한 상태다. (30MB, 20MB 빈 공간 발생)
[2-1]
현재 메모리에 빈 공간은 총 50MB가 존재하지만 50MB짜리 프로세스를 적재할 수는 없다.
[2-2]
25MB짜리 프로세스를 30MB의 빈 공간에 적재한 상태로 5MB의 빈 공간이 생겼다.
즉, 프로세스들이 메모리에 연속적으로 할당되는 환경에서는
실행과 종료를 반복하면서 메모리 사이 사이에 빈 공간들이 생기게 되고
총 빈 공간은 크더라도 각 빈 공간보다 큰 프로세스를 적재하기는 어려운 상황이 온다.
결국 메모리 낭비로 이어지며 "외부 단편화"현상이 벌어진다.
"외부 단편화"를 해결할 수 있는 대표적인 방안으로는 "압축(Compaction)"하는 방법이 존재한다.
[2-3]처럼 흩어져 있는 빈 공간들을 하나로 모으는 방식으로 "메모리 조각 모음"이라고도 부른다.
다만, 해당 방법 또한 여러 단점들이 존재한다.
- 작은 빈 공간들을 하나로 모으는 동안 시스템은 하던 일을 중지해야 함
- 메모리에 존재하는 내용을 옮기는 작업은 많은 오버헤드를 발생
- 어떤 프로세스를 어떻게 움직어야 오버헤드를 최소화할 수 있는지에 대한 명확한 방법을 결정하기 어려움
--
'CS > 운영체제' 카테고리의 다른 글
[메모리 관리] 요구 페이징의 페이지, 프레임 관리 기법 (+ 페이지 교체, 프레임 할당) (0) | 2024.10.03 |
---|---|
[메모리 관리] 페이징을 통한 가상 메모리 관리 (+ 연속 메모리 문제점 해결) (0) | 2024.10.02 |
교착 상태 (0) | 2024.09.30 |
프로세스 동기화 (0) | 2024.09.29 |
CPU 스케줄링 알고리즘 종류 (1) | 2024.09.28 |
연속 메모리 할당은 무엇이며, 어떻게 운영될까?
연속 메모리 할당 (Contiguous Memory Allocation)
--
연속 메모리 할당은
각 프로세스의 크기만큼 메모리 주소를 할당받아 연속적으로 메모리에 배치하는 구조로
프로세스에 연속적인 메모리 공간을 할당하는 방식을 의미한다.

연속 메모리 할당 방식에는 크게 두 가지 문제를 가지고 있다.
1. 외부 단편화
2. 물리 메모리보다 큰 프로세스는 실행 불가
--
스와핑 (Swapping)
--
스와핑은
메모리상의 빈 공간에 또 다른 프로세스를 적재하여 실행하는 방식을 의미한다.
메모리에 적재된 프로세스들 중에는
현재 실행되지 않는 프로세스, 입출력 작업의 요구로 대기 상태가 된 프로세스 등
오랫동안 사용되지 않은 프로세스들을 메모리에서 (스왑 영역으로) 빼낸다.
- 스왑 영역 (Swap Space) : 보조기억장치의 일부 영역 (오랫동안 사용하지 않은 프로세스를 임시 저장하는 곳)
- 스왑 아웃 (Swap-Out) : 메모리 -> 스왑 영역으로 옮기는 행위
- 스왑 인 (Swap-In) : 스왑 영역 -> 메모리로 옮기는 행위

"스왑 인"이 동작할 때
"스왑 아웃"하기 전의 메모리 물리 주소와는 다른 주소에 적재될 수 있다.
(해당 주소에 다른 프로세스가 스와핑하여 사용 중 일 수 있기 때문)
"스왑 인", "스왑 아웃"은
운영체제가 자동으로 결정하고 관리하는 것으로
현재 메모리 상황과 프로세스의 상태를 고려하여 필요한 시점에 자동으로 스왑 작업을 수행한다.
스와핑을 이용하면
동시에 실행해야 하는 프로세스들이 요구하는 총 메모리 주소 공간의 크기가
실제 메모리 공간의 크기보다 큰 경우에도 동시에 실행할 수 있다.

- 프로세스 A를 메모리에 적재(실행)
- 프로세스 B를 메모리에 적재(실행)
- 프로세스 C를 메모리에 적재(실행)
- 프로세스 B를 스왑 아웃 & 프로세스 D를 메모리에 적재(실행)
- 프로세스 A를 스왑 아웃 & 프로세스 B를 스왑 인(실행)
위와 같은 방식으로 스왑 인/아웃을 적절하게 반복하여 총 4개의 프로세스가 실행되도록 구성한다.
사실 위 그림에서 알 수 있는 것처럼
"물리적인 관점"에서는 실제 메모리에 모든 프로세스가 동시에 적재되어 실행되는 것이 아니기에
모든 프로세스가 동시에 실행된다고 볼 수 없지만
"논리적인 관점"으로는 운영체제가 프로세스 전환을 빠르게 처리하여 사용자에게는
동시에 모든 프로세스가 실행되는 것처럼 보이게 만드므로 동시에 실행된다고 볼 수 있다.
즉, 프로세스들이 스와핑을 통해 교대로 실행되어 사용자나 시스템 입장에서는
여러 프로세스가 동시에 실행되는 것처럼 보이는 것이다.
--
메모리 할당
--
프로세스는 메모리 내의 빈 공간에 적재(할당)되어야 한다.
만약 메모리 내에 빈 공간이 여러 개가 존재할때는 여러 방법이 존재한다.
메모리의 빈 공간에 할당하는 대표적인 방법들
(연속 메모리 할당 방식 기준)
- 최초 적합 (First Fit) : 순서대로 탐색하여 적재할 수 있는 빈 공간 발견 시 바로 적재
- 최적 적합 (Best Fit) : 모든 빈 공간을 탐색 후 적재 가능한 공간 중 가장 작은 공간에 적재
- 최악 적합 (Worst Fit) : 모든 빈 공간을 탐색 후 적재 가능한 공간 중 가장 큰 공간에 적재

--
외부 단편화 (External Fragmentation)
--
외부 단편화는
메모리 관리에서 발생하는 문제로,
메모리 공간은 충분히 존재하지만, 사용할 수 있는 연속적인 메모리 블록이 부족하여
새로운 프로세스를 할당할 수 없는 상태를 의미한다.
즉, 연속 메모리 할당 방식에서 발생하는 문제점 중 하나다.

[1]
모든 프로세스가 연속적으로 차근차근 메모리에 적재되어 실행 중인 상태다.
[2]
프로세스 B와 D는 모든 작업이 완료되어 메모리 공간을 반납한 상태다. (30MB, 20MB 빈 공간 발생)
[2-1]
현재 메모리에 빈 공간은 총 50MB가 존재하지만 50MB짜리 프로세스를 적재할 수는 없다.
[2-2]
25MB짜리 프로세스를 30MB의 빈 공간에 적재한 상태로 5MB의 빈 공간이 생겼다.
즉, 프로세스들이 메모리에 연속적으로 할당되는 환경에서는
실행과 종료를 반복하면서 메모리 사이 사이에 빈 공간들이 생기게 되고
총 빈 공간은 크더라도 각 빈 공간보다 큰 프로세스를 적재하기는 어려운 상황이 온다.
결국 메모리 낭비로 이어지며 "외부 단편화"현상이 벌어진다.
"외부 단편화"를 해결할 수 있는 대표적인 방안으로는 "압축(Compaction)"하는 방법이 존재한다.
[2-3]처럼 흩어져 있는 빈 공간들을 하나로 모으는 방식으로 "메모리 조각 모음"이라고도 부른다.
다만, 해당 방법 또한 여러 단점들이 존재한다.
- 작은 빈 공간들을 하나로 모으는 동안 시스템은 하던 일을 중지해야 함
- 메모리에 존재하는 내용을 옮기는 작업은 많은 오버헤드를 발생
- 어떤 프로세스를 어떻게 움직어야 오버헤드를 최소화할 수 있는지에 대한 명확한 방법을 결정하기 어려움
--
'CS > 운영체제' 카테고리의 다른 글
[메모리 관리] 요구 페이징의 페이지, 프레임 관리 기법 (+ 페이지 교체, 프레임 할당) (0) | 2024.10.03 |
---|---|
[메모리 관리] 페이징을 통한 가상 메모리 관리 (+ 연속 메모리 문제점 해결) (0) | 2024.10.02 |
교착 상태 (0) | 2024.09.30 |
프로세스 동기화 (0) | 2024.09.29 |
CPU 스케줄링 알고리즘 종류 (1) | 2024.09.28 |