메모리 할당 : 불연속 할당(Non-continuous Allocation)
불연속 할당(Non-continuous Allocation)이란?
- 프로세스를 물리 메모리의 연속된 공간에 할당하는 대신 분리된 여러 블록에 나누어 할당하는 방법
- 이 방식은 메모리 단편화를 줄이고 메모리 이용 효율을 높이는 데 도움
페이징(Paging)

- 페이징은 메모리를 같은 크기의 블록으로 나누는 방식으로 각각의 블록을 페이지(Page)라고 함
- 페이지(Page) : 프로세스의 논리 메모리를 같은 크기의 블록으로 나눈 것
- 프레임(Frame) : 물리 메모리를 페이지와 같은 크기의 블록으로 나눈 것
- 페이지 테이블(Page Table) : 논리 메모리의 각 페이지가 물리 메모리의 어는 프레임에 매핑되는지 기록한 테이블
특징
- 내부 단편화 : 마지막 페이지가 채워지지 않을 때 발생할 수 있음
- 외부 단편화 없음 : 모든 페이지와 프레임이 동일한 크기이므로 외부 단편화가 발생하지 않음
- 주소 변환 : 논리 주소를 물리 주소로 변환하기 위해 페이지 테이블을 사용
세그멘테이션(Segmentation)
- 프로세스를 논리적인 단위인 세그먼트(Segment)로 나누어 할당하는 방식
- 세그먼트는 프로그램의 논리적인 구조(예: 함수, 배열, 변수 등)에 따라 크기가 다름
- 세그먼트(Segment) : 프로그램의 논리적인 단위로 각각의 세그먼트는 고유한 크기를 가짐
- 세그먼트 테이블(Segment Table) : 각 세그먼트가 물리 메모리의 어느 위치에 있는지 기록한 테이블
특징
- 외부 단편화 : 세그먼트의 크기가 다르기 때문에 외부 단편화가 발생할 수 있음
- 내부 단편화 없음 : 세그먼트는 필요한 크기만큼 할당되므로 내부 단편화가 발생하지 않음
- 주소 변환 : 세그먼트 번호와 오프셋(offset)을 사용하여 논리 주소를 물리 주소로 변환
페이지드 세그멘테이션(Paged Segmentation)
- 세그멘테이션과 페이징을 결합한 방식
- 세그먼트는 논리적인 단위로 나뉘어지지만, 각 세그먼트는 다시 페이지로 나뉨
- 세그머트(Segment) : 프로그램의 논리적인 단위로 나뉜 부분
- 페이지(Page) : 각 세그먼트가 다시 동일한 크기의 페이지로 나뉨
- 세그먼트 테이블 : 각 세그먼트의 페이지 테이블을 가리킴
- 페이지 테이블 : 각 페이지가 물리 메모리의 어느 프레임에 매핑되는지 기록한 테이블
특징
- 내부 단편화 : 마지막 페이지가 채워지지 않을 때 발생할 수 있음
- 외부 단편화 감소 : 세그먼트가 페이지로 나뉘어 있기 때문에 외부 단편화가 줄어듦
- 주소 변환 : 세그먼트 번호, 페이지 번호, 오프셋을 사용하여 논리 주소를 물리 주소로 변환
현대의 OS에서 페이징 기법이 주로 쓰이는 이유?
- 페이징 기법은 메모리 관리에서 효율성과 단순성을 제공하며 내부 단편화를 상대적으로 쉽게 관리할 수 있기 때문
- 외부 단편화 방지
페이징 기법은 물리 메모리를 동일한 크기의 페이지로 나누어 사용하기 때문에 외부 단편화가 발생하지 않음, 모든 페이지와 프레임이 동일한 크기이므로 프로세스가 할당되거나 해제될 때마다 메모리 공간이 불연속적으로 분할되어도 문제가 되지 않음
- 반면,
세그멘테이션은 서로 다른 크기의 세그먼트를 사용하므로 외부 단편화가 발생할 수 있음, 외부 단편화는 메모리 블록들이 불연속적으로 분포되어 있어 충분한 총 메모리 공간이 존재하더라도 연속된 하나의 큰 블록을 사용할 수 없게 만드는 문제를 일으킴
- 내부 단편화 관리의 용이성
- 페이징 기법에서는 내부 단편화가 발생할 수 있음, 이는 프로세스의 마지막 페이지가 완전히 채워지지 않을 때 발생함
- 하지만, 내부 단편화는 외부 단편화에 비해 관리하기가 더 쉬움
- 내부 단편화는 각 페이지 내에서 발생하는 비어 있는 공간이므로 운영 체제는 페이지 단위로 메모리를 관리하면서 이러한 작은 공간 낭비를 쉽게 감수할 수 있음
- 반면, 외부 단편화는 메모리 블록 전체에 걸쳐 불연속적으로 발생하므로 이를 해결하기 위해
메모리 압축(compaction)같은 복잡한 작업이 필요함
- 단순한 메모리 관리
- 페이징 기법은 메모리 관리가 단순함, 페이지 테이블을 통해 논리 주소를 물리 주소로 변환하기 때문에 프로세스가 사용하는 메모리 공간을 일관되게 관리할 수 있음
- 페이지 테이블은 각 페이지가 물리 메모리의 어느 프레임에 매핑되는지를 기록하여 프로세스가 필요한 메모리 블록을 쉽게 찾을 수 있도록 함
- 세그멘테이션의 경우 각 세그먼트가 크기와 위치가 달라서 메모리 관리가 복잡해짐
- 세그먼트 테이블을 사용하더라도 외부 단편화 문제를 해결하기 어려움
- 가상 메모리 지원
- 페이징 기법은 가상 메모리 시스템을 효과적으로 지원함, 가상 메모리는 물리 메모리보다 큰 주소 공간을 제공하여 프로그램이 실제 메모리 크기에 구애받지 않고 실행될 수 있게 함
페이지 폴트(page fault)와 스왑(swap)기법을 통해 필요한 페이지만 메모리에 로드하여 메모리 사용을 최적화할 수 있음
- 이는 메모리 사용의 효율성을 극대화하며 다수의 프로그램이 동시에 실행될 수 있도록 지원