메모리 할당 : 불연속 할당(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)
기법을 통해 필요한 페이지만 메모리에 로드하여 메모리 사용을 최적화할 수 있음
- 이는 메모리 사용의 효율성을 극대화하며 다수의 프로그램이 동시에 실행될 수 있도록 지원