Search

페이지드 세그먼테이션

class
운영체제
상태
완료
날짜
목차

페이지드 세그먼테이션

페이지드 세그먼테이션은 메모리 관리를 위해 사용되는 방법 중 하나입니다.
이 방법은 메모리를 작은 고정 크기의 블록인 페이지로 나누어 관리합니다.

기본 원리

페이지드 세그멘테이션은 페이지와 세그멘테이션의 장점을 결합한 것입니다.
세그멘테이션은 프로그램을 의미 있는 세그멘트로 분할하고, 각 세그멘트가 다른 크기를 가질 수 있게 합니다. 페이지 기법은 이 세그멘트들을 더 작은 고정 크기의 페이지로 나누어 메모리를 효율적으로 관리할 수 있도록 합니다.
의미 있는 세그먼트로 분할한다는 것은, 메모리를 고정크기로 나누는 것이 아니라 코드 영역, 스택 영역, 혹은 읽기, 쓰기 권한이 있는 영역과 같이 논리적인 흐름에 따라 나눈 것을 말합니다.

작동 방식

1.
세그먼테이션 : 프로그램은 다양한 크기의 여러 세그먼트로 나뉩니다. 각 세그먼트는 특정 유형의 데이터나 프로그램 코드를 담고 있습니다.
2.
페이징 : 각 세그먼트는 고정된 크기의 페이지로 나뉩니다. 이 페이지들은 메모리에 연속적으로 할당될 필요가 없으며, 물리적 메모리의 어느 곳에나 위치할 수 있습니다.
3.
주소 변환 : 프로세스가 실행될 때, 가상 메모리 주소는 먼저 세그먼트 번호와 오프셋으로 나뉘고, 이후 오프셋은 페이지 번호와 페이지 내 오프셋으로 다시 계산됩니다. 페이지 테이블과 세그먼트 테이블을 통해 최종적인 물리적 주소로 변환됩니다.

페이지드 세그먼테이션 장,단점

장점

보호 및 보안 : 각 세그먼트는 독립적인 보호 속성을 가질 수 있으므로, 코드 세그먼트는 읽기/실행 가능하고 데이터 세그먼트는 읽기/쓰기 가능하도록 설정할 수 있습니다.
효율적인 메모리 사용 : 페이지 기법을 사용함으로써 메모리 단편화 문제를 줄이고 메모리 사용을 최적화할 수 있습니다.
유연성 : 프로세스의 크기가 변경되어도 세그먼트의 크기를 조절하거나 페이지를 추가 및 제거하기 쉽습니다.

단점

복잡한 관리 : 세그먼트와 페이지를 모두 관리해야 하므로 주소 변환과 메모리 관리가 복잡해질 수 있습니다.
성능 저하 : 두 단계의 주소 변환 과정이 필요하기 때문에 메모리 접근 시간이 길어질 수 있습니다.

페이지드 세그먼테이션 예시

1. 세그먼테이션 테이블

세그먼테이션 테이블은 각 세그먼트의 시작 주소, 세그먼트 크기, 권한 및 기타 속성을 나타냅니다.
세그먼트 번호
세그먼트 종류
시작 주소 (페이지 테이블 포인터)
세그먼트 크기 (KB)
권한
0
코드
0x0001
4 KB
R-X
1
데이터
0x0004
2 KB
RW-
2
스택
0x0006
2 KB
RW-
권한
R : 읽기 가능
W : 쓰기 가능
X : 실행 가능
- : 해당 권한 없음

2. 페이징 테이블

각 세그먼트는 별도의 페이징 테이블을 가지며, 이 테이블은 각 페이지의 물리적 주소와 상태를 나타냅니다.

코드 세그먼트의 페이징 테이블

페이지 번호
물리적 주소
페이지 상태
0
0x2000
할당됨
1
0x2001
할당됨
2
0x2002
할당됨
3
0x2003
할당됨

데이터 세그먼트의 페이징 테이블

페이지 번호
물리적 주소
페이지 상태
0
0x3000
할당됨
1
0x3001
할당됨

스택 세그먼트의 페이징 테이블

페이지 번호
물리적 주소
페이지 상태
0
0x4000
할당됨
1
0x4001
할당됨
세그먼트의 가상 주소 0x01003에 접근하려 한다고 가정해봅시다.

주소 해석

가상 주소 0x01003을 해석하는 첫 번째 단계는 세그먼트 번호와 오프셋을 추출하는 것입니다.
0x01은 세그먼트 번호를 나타냅니다 (데이터 세그먼트).
0x003은 세그먼트 내의 오프셋을 나타냅니다.

세그먼트 테이블 참조

세그먼트 테이블을 참조하여 세그먼트 번호 1에 해당하는 데이터 세그먼트의 정보를 확인합니다. 데이터 세그먼트는 페이징 테이블 포인터 0x0004와 세그먼트 크기 2 KB가 정의되어 있습니다.

페이징 테이블 참조

오프셋 0x0033바이트를 나타내므로, 페이지 번호는 페이지 크기(1KB = 1024 바이트)로 나누어 계산합니다. 이 경우, 오프셋은 페이지 0 내에 위치합니다.
페이징 테이블에서 페이지 번호 0의 물리적 주소를 찾습니다. 이 주소는 0x3000입니다.

물리적 주소 계산

페이지 내 오프셋은 3바이트이므로, 최종 물리적 주소는 페이지의 시작 주소에 오프셋을 더한 0x3003이 됩니다.