운영 체제의 가장 핵심적 역할은
- 프로세스 관리
- 메모리 관리
성능과 아주 관련이 큼.
연속 메모리 할당

- 연속 메모리 할당은 프로세스에 연속적인 메모리 공간을 할당.
- 이러한 방식에 대한 고려사항과 잠재적인 문제사항들이 있다.
1. 스와핑(swapping)
- 현재 사용하지 않는 프로세스들을 보조기억장치의 일부 영역으로 쫓아내고 생긴 빈 공간에 새 프로세스를 적재하는 것!

보조기억 장치 스왑영역에서 보관이 되며
프로세스가 메모리에서 나가서 스왑영역에 보관되면 스왑 아웃
반대로 스왑영역에서 나가고 메모리에 적재된다면 스왑 인 이다.
그렇다면 스와핑을 적용하는 이유는?
- 프로세스들이 요구하는 메모리 공간 크기 > 실제 메모리 크기

스왑영역 크기 확인 : 윈도우 경우, 명령프롬포트에서 systeminfo
윈도우

- 실제 메모리는 8GB * 2 를 사용하기 때무넹 16GB
- 가상메모리 크기는 22GB 이다.
2. 메모리 할당
- 프로세스는 메모리 내의 빈 공간에 할당되어야 한다.
- 빈공간이 여러개 있다면..??

그래서 메모리 공간에 프로세스를 연속적으로 할당하는 방식은
최초 적합, 최적 적합, 최악 적합 세가지 방식이 있다.
최초 적합(first fit)

- 운영체제가 메모리 내의 빈공간을 순서대로 검색하다 적재할 수 있는 공간을 발견하면 그 공간에 프로세스를 바로 배치하는 방식
- 장점은 검색 최소화, 빠른 할당.
최적 적합(best fit)
- 운영체제가 빈 공간을 모두 검색해본 뒤 적재할 프로세스가 적합한 가장 작은 메모리 공간에 할당

최악 적합(worst fit)
- 운영체제가 빈공간 모두 검색 후, 적재 가능한 가장 큰 메모리 공간에 할당

연속 메모리 할당은 비효율적인 방식이다.
왜냐? 그이유는 외부 단편화 때문이다
3. 외부 단편화(external fragmentation)
- 프로세스를 할당하기 어려울 만큼 작은 메모리 공간들로 인해 메모리가 낭비되는 현상

- 사용자 영역 200MB
- Process A 50MB,
- Process B 30MB,
- Process C 100MB,
- Process D 20MB
이상황 에서 Process B 와 Process D가 작업이 끝났다면

이 상황에서는 50MB인 프로세스 할당이 불가능하다.
즉, 프로세스들이 실행되고 종료되면서 메모리 사이사이에 빈공간들이 발생해서, 메모리가 낭비되고 만다. 즉 외부 단편화 현상이 발생한다.
외부 단편화 예시


해결방법 1. 메모리 압축(compaction)
- 메모리 조각 모음 이라고도 한다.
- 여기저기 흩어져 있는 빈 공간들을 하나로 모으는 방식,
- 프로세스를 적당히 재배치시켜 흩어져 있는 작은 공간을 합쳐 큰 빈공간으로 만드는 방식
- 부작용은 하나로 합치는 과정에서 오버헤드가 발생하고, 프로세스들의 작업이 지연된다.
메모리 조각모음을 하는동안에
시스템은 하던 일을 중지해야하고,
메모리를 옮기는 작업은 많은 오버헤드를 야기,
또한 프로세스를 옮기는 최적화된 방법이나, 오버헤드를 최소화하게 압축할 수 있는 명확한 방법을 결정하기 어려움.
그래서 가장 대중화된 방법은 다음과 같다.
해결방법 2. 가상 메모리 기법, 페이징
다음글에 작성