※ 전남대학교 박태준 교수님의 운영체제 강의를 듣고, 정리한 내용입니다.
운영체제가 새 프로세스를 실행시키거나 실행 중인 프로세스가 메모리를 필요로 할 때, 물리 메모리를 할당해주어야 합니다.
여기서 고민해보아야 할 점은, 메모리를 할당해주는 건 좋지만, 메모리 어디에, 어떻게 올려할지 고민해봐야한다는 점입니다.


연속 vs 불연속 : Process Partitioning
가변 vs 고정 : Memory Partitioning

각 프로세스의 영역 ( 코드와 데이터 ) 을 연속된 메모리 공간에 배치하는 기법을 연속 메모리 할당 이라고 합니다.
고정 크기 : 메모리를 고정 크기의 파티션으로 나눔
가변 크기 : 각 프로세스에게 자신의 크기만한 크기의 파티션 할당

하드웨어 지원
운영체제 지원
연속 메모리 할당의 장단점
장점
단점

메모리의 빈 공간 중 어디에 프로세스를 넣을 것인지 결정하는 알고리즘이 홀 선택 알고리즘입니다.
홀 선택 알고리즘 / 동적 메모리 할당 : 운영체제는 할당 리스트 ( Allocation List ) 유지
할당 요청이 발생했을 때 홀 선택 전략 3가지
first - fit ( 최초 적합 )
best - fit ( 최적 적합 )
worst - fit ( 최악 적합 )
여러 방법이 존재하지만, 대개 큰 차이가 없기에 상황에 따라 어떤 방법을 선택할지는 얼마든지 달라질 수 있습니다.
메모리에 프로세스의 입출력이 발생하다 보면, 단편화가 발생하게 됩니다.
단편화란 쉽게 생각하면 조각난 공간들이라고 볼 수 있습니다.
파티션 안에 프로세스가 들어가면서 파티션의 공간보다 프로세스의 크기가 작을 경우 비어있는 공간이 나오게 되는데, 이 비어있는 공간을 단편화 라고 부릅니다.
→ 정확히는 내부 단편화 라고 부릅니다.
🖥️ 파티션 공간 > 프로세스 크기 : ( 파티션 공간 - 프로세스 크기 ) 만큼 단편화 발생!아래 그림의 경우 비어있는 공간보다 큰 프로세스가 들어갈 수 없으니, 이 경우도 단편화라고 볼 수 있습니다.
→ 정확히는 외부 단편화 라고 부릅니다.

프로세스에게 할당할 수 없는 조각 메모리 ( Hole ) 들이 생기는 현상을 단편화 라고 합니다.
외부 단편화 ( External Fragmentation )

내부 단편화 ( Internal Fragmentation )

조각 모음 ( De-fragmentation ) / 압축 ( Compaction )
굉장히 비싼 작업 중 하나..!!
메모리 할당의 Binary Search

가변 분할 방식처럼 메모리가 프로세스 크기대로 나뉨
고정 분할 방식처럼 하나의 구역에 다른 프로세스가 들어갈 수 없음
메모리의 한 구역 내부에 조각이 생겨 내부 단편화 발생
비슷한 크기의 조각이 서로 모여 작은 조각을 통합하기 때문에 큰 조각을 만들기 쉬움
세그먼테이션 ( Segmentation ) : 프로세스를 가변 크기의 세그먼트들로 분할
페이징 ( Paging ) : 프로세스를 고정 크기의 페이지들로 분할

가볍게 보면, 프로세스를 쪼개서 메모리에 할당하는 방식을 분할 메모리 할당이라고 볼 수 있습니다.

세그먼트 ( segment )
세그먼테이션 기법
프로세스의 주소 공간
논리 세그먼트와 물리 세그먼트의 매핑
외부 단편화 발생
