메모리 낭비 방지 기법
동적 적재 (Dynamic Loading)
프로그램 실행에 반드시 필요한 루틴/데이터만 적재
ex) 오류 처리 루틴은 오류가 발생하면 그때 적재한다.
동적 연결 (Dynamic Linking)
여러 프로그램에 공통 사용되는 라이브러리의 루틴 연결을 실행 시(런타임)에 진행
- cf) 정적 연결 (Static Linking) : 실행파일이 만들어지기 전(컴파일 타임)에 링킹
스와핑(Swapping)
메모리에 적재되어 있으나 현재 사용되지 않고 있는 프로세스 이미지를 하드디스크의 특정공간인 Backing Store (= Swap Device)로 이동
- swap-out : 메모리 -> Backing Store
- swap-in : Backing Store -> 메모리
연속 메모리 할당
고정 분할 vs 가변 분할
고정 분할
- OS가 동일한 크기로 메모리 파티션을 나누어 할당한다.
- 실행하고자 하는 프로세스의 크기가 파티션 크기보다 크면 해당 프로세스는 실행될 수 없다.
- 프로세스에 할당된 파티션은 남은 공간이 있을지라도 다른 프로세스 할당을 위한 영역으로 쓰일 수 없다.
가변 분할(동적 분할)
- OS가 일정 크기의 메모리 파티션을 나누지 않고 동적으로 메모리를 할당한다
- 비어있는 연속 메모리 공간을 hole이라 하는데, 프로세스를 실행하고자 할 때 OS는 해당 프로세스가 들어설 수 있는 크기의 hole을 찾아 앞부분부터 차곡차곡 넣는다.
- 프로세스가 할당되고도 남은 hole 공간은 다른 프로세스의 할당 공간으로 사용될 수 있다.
👉 hole 선택 기준은?
- 최초 적합(First-Fit)
- 첫번째로 찾은 적정 hole을 선택하고 조건에 부합하는 hole을 찾았으면 탐색을 중단한다.
- 최적 적합(Best-Fit)
- 프로세스 크기에 가장 꼭 맞는 hole을 선택한다. 프로세스가 할당되고도 남을 잔여 공간이 제일 작아야 한다.
- 최악 적합(Worst-Fit)
- 프로세스가 들어서고도 남을 잔여 공간이 제일 큰 hole을 선택한다.
🐾 성능 비교
속도 : 최초 적합 👍
메모리 이용률 : 최초 적합, 최적 적합 👍
메모리 단편화 (Memory Fragmentation)
- 프로세스의 적재와 해제가 반복되면서 Hole 들이 불연속하게 흩어져있는(Scattered Hole) 현상
🐾 내부 단편화 (Internal Fragementation)
프로세스에 할당되었으나, 프로세스가 사용하지 않아 메모리 공간이 낭비되었을 경우
🐾 외부 단편화(External Fragmentation)
프로세스에 할당되지 않았으나, 메모리 공간 크기가 작아서 프로세스가 적재될 수 없는 경우
참고 및 이미지 출처 : KOCW 운영체제 12: 동적 적재, 동적 연결, 연속 메모리 할당, 메모리 단편화 | 작성자 큐 Queue