y0u_bat
[64비트멀티코어OS] 3.3 운영모드와 메모리 관리기법 본문
메모리 관리 기법 - 세그먼테이션, 페이징
세그먼테이션,페이징의 공통점 - 주소 공간을 특정 영역으로 나눔
리얼모드의 메모리관리방식
- 최대 1mb 주소공간 사용, 세그먼테이션만 지원
- 세그먼트 크기는 64kb 고정
- 세그먼테이션에서 세그먼트의 시작주소는 코드나 메모리 접근할대 기준 Base address로 사용
리얼모드에서 물리주소 계산
- 세그먼트 레지스터의 값에 16(0x10)을 곱한값을 세그먼트의 기준 주소로 사용 -> 1mb영역 까지 사용가능
보호모드에서 주소계산방법
- 리얼모드에서 물리주소 계산과 동일 하지만 결과는 선형주소, 선형주소를 기반으로 물리주소 계산
- 리얼모드와 달리 세그먼트 크기를 지정 가능, 세그먼트 크기는 해당 세그먼트의 어드레스에 접근할때 참조, 기준주소에 더해질값(범용레지스터값)은 세그먼트 크기를 넘을수없음. 넘으면 예외처리
GDT (Global Descriptor Table) - 연속된 디스크립터의 집합, 최대 8192개 디스크립터를 포함할수있는 테이블 형태의 자료구조
- 관련레지스터: GDTR
페이징
- 물리메모리를 페이지라고 불리는 일정한 크기로 나누고 선형주소와 물리주소를 나눠 놓은 페이지를 연결하는 방식
- 물리 메모리 크기보다 더 큰 영역의 선형주소도 물리페이지만 연결하면 사용가능하여 주소공간을 더 넓게 사용가능한 장점
- 물리페이지를 여러 선형주소에 연결함으로써 응용프로그램끼리 공유하는 메모리를 손쉽게 처리 가능
- 독립적인 주소공간을 보장하고 싶으면 페이징 자료구조를 따로 생성하고 물리메모리 중복안되게 연결
- 응용프로그램에 독립된 주소공간 보장, 공유메모리, 요구페이징, 공유라이브러리 등등 기능 구현중
- 페이징에는 CR3 컨트롤 레지스터가 있음
보호모드에서 페징은 페이지 크기에 따라 크게 두가지 방식으로 구분
- 물리메모리를 4kb 크기로 나누고 선형주소를 3단계로 구분하는 방식
- 물리메모리를 3kb 크기로 나누고 선형주소를 2단계로 구분하는 방식
CR3 컨트롤 레지스터
- 페이지 디렉터리의 시작주소를 가르키며, 페이지 디렉터리 엔트리의 위치 계산에 사용
'OS' 카테고리의 다른 글
[64비트멀티코어] 부트로더 제작 (2) (0) | 2016.04.12 |
---|---|
[64비트멀티코어] 부트로더 제작 (1) (0) | 2016.04.10 |
[64비트멀티코어OS] 3.2 레지스터 (0) | 2016.02.21 |