메모리할당은 연속 로딩 기법(단일, 다중 분할 할당)과 분산 로딩 기법(페이징, 세그먼테이션)으로 나눌 수 있다.
단일분할 할당
- 한 순간에 하나만 주기억장치의 USER영역을 사용하는 기법
- 초기 운영체제에서 사용하던 기법으로 가장 단순하며, 운영체제가 사용하는 KERNEL영역과 해당 프로세스의 USER영역을 구분하는 경계레지스터를 사용한다.
- 오버레이 기법과 스와핑기법을 사용한다.
오버레이
- 프로그램의 메모리가 주 기억장치보다 클 때의 문제를 해결하기 위한 기법
- 하나의 프로그램을 여러 개의 조각으로 분할한 후 필요한 조각을 순서대로 주기억장치에 적재하여 프로그램을 실행한다.
- 실행 중에 주기억장치의 메모리가 부족하면 불필요한 조각이 있는 곳에 새로운 조각을 중첩하여 적재한다.
스와핑
- 주기억장치에 적재한 하나의 프로그램과 보조기억장치에 적재한 다른 프로그램의 메모리를 교체하는 기법
- Swap Out : 주기억장치에 있는 프로그램이 보조기억장치로 이동
- Swap In : 보조기억장치에 있는 프로그램이 주기억장치로 이동
- 가상기억장치의 페이징 기법으로 발전하였다.
다중분할 할당
- 고정 분할 할당과 동적 분할 할당이 있다.
다중분할 할당
- 주기억장치의 USER영역을 여러개의 고정 크기로 분할하여 사용하는 기법으로 프로그램 전체가 주기억장치에 적재한다.
- 프로그램이 분할 영역보다 크면 분할 영역을 사용할 수 없어서 빈 공간으로 남은 전체 영역을 사용하는 외부 단편화가 발생한다.
- 분할 영역보다 크기가 작은 프로그램을 적재하였을 때 내부 단편화가 발생한다.
- 초기 다중 프로그래밍을 위해 사용했던 방법이며, 정적할당기법으로도 불린다.
가변분할 할당
- 프로그램을 주기억장치에 적재할 때 필요한 크기로 영역을 분할하는 기법이다.
- 고정 분할 기법의 단편화를 줄이기 위한 방법으로 나왔지만, 영역 사이에 단편화는 발생할 수도 있다.
버디 시스템
- 2의 지수승으로 커널 프로세스에 메모리를 할당하는 방식
- 요청된 메모리 크기를 수용할 수 있는 최소 크기로 메모리를 쪼개어 할당하며 그러한 메모리 조각을 buddy라고 부른다.
- 작업 종료 후 원본 buddy와 합치기 좋다는 장점이 있다
- 단점으로는 buddy로 인해 internal fragmentation이 생길 수도 있다는점과 buddy 생성 시 오버헤드가 크다는 점이 있다.