이 내용이 x86에서 어떻게 작동하는지 말할 수 있습니다.
비 64 비트 모드의 모든 프로그램은 segment selector
(간단히 "선택자"가 텍스트에서 생략되어 혼동 될 수 있음) 및 offset
의 두 항목이 결합 된 주소로 작동합니다. 이 selector:offset
쌍을 logical address
이라고합니다.
CPU가 특정 명령어 또는 특정 명령어 인코딩을 가진 선택기를 포함하는 세그먼트 레지스터의 "기본"연관을 가지고 있기 때문에 선택기 부분이 항상 명시 적으로 지정되거나 코드에서 조작되는 것은 아닙니다. 또한 32 비트 모드에서 셀렉터를 조작하는 경우는 드물지만 16 비트 코드에서는 매우 자주 필요합니다.
virtual address
은 (
8086 virtual
real
또는 모드) 논리 어드레스 중 "직접"형성 또는 "간접적"(
protected
모드)이다.
"Direct" virtual address
= selector
* 16 + offset
.
"Indirect" virtual address
= SegmentDescriptorTable [selector
].베이스 + offset
.
SegmentDescriptorTable은 Global Descriptor Table
(AKA GDT
) 또는 로컬 설명자 표 (AKA LDT
)입니다. OS에 의해 설정되며 다양한 메모리 세그먼트의 위치와 크기를 설명합니다. selector
은 표에서 세그먼트를 선택하는 데 사용됩니다. Base
테이블 항목은 세그먼트의 시작 (가상 주소)을 알려줍니다. Limit
항목은 세그먼트 크기를 알려주며 (일반적으로 세부 사항은 좀 더 복잡합니다).
는 프로그램 세그먼트 (CPU가
offset
및
Limit
비교)에서, CPU는
exception
을 생성하여 OS를 통상 프로그램을 종료하여, 그 처리의 종료 이후 오프셋 생성 액세스 메모리에 액세스하려고하는 경우.
는, BTW real/v86
모드, 가상 주소가 selector:offset
에서 직접 형성된다하더라도, 여전히 메모리 64KB의 이상에 액세스하기 위해 다른 선택을 사용해야하는 이유는 오프셋 (offset)에 부과되는 16 비트 Limit
,있다.
세그먼트 설명 자의 항목은 나머지 세그먼트 (여기서는 Limit
이 유용함)에서 세그먼트를 분리하거나 전체 세그먼트를 임의의 가상 주소에 배치하거나 이동할 때 사용할 수 있습니다 (또는 많이) 프로그램에 속합니다 (세그먼트를 움직이면 데이터는 분명히 메모리에서 이동해야합니다). 기본적으로 재배치 목적으로 사용될 수 있습니다. 재배치를위한 real/v86
모드에서 selector
이 변경되었습니다.
virtual address
은 CPU가 protected mode
에서 실행 중이고 page tables
으로 설정된 경우 physical address
으로 더 번역 될 수 있습니다. 페이지 테이블이없는 경우 실제 주소는 가상 주소와 동일합니다. 변환은 실제 메모리 블록과 주소 범위 인 pages
(대개 4KB) 단위로 이루어집니다.
x86 CPU에는 전용 재배치 레지스터가 없습니다. 재배치 조정에 의해 달성 될 수있다 : CPU 레지스터 또는 프로그램의 코드에서
- 세그먼트 셀렉터를
- 오프셋 프로그램의 코드에서 GDT/LDT에
- 세그먼트 기본 주소 페이지 테이블에
- 실제 주소
virtual address : reside in the hard disk , as a pages
에 대해 정확히 말하고 싶은 것은 무엇인지 모르겠지만 실제 주소 변환에 가상 주소가 있기 때문에 가상 온 디어가 있다는 것을 의미하지는 않습니다. sk 메모리. 가상 온 디스크 메모리 외에 번역을위한 다른 용도가 있습니다. 그리고 주소는 CPU와 당신의 (그리고 OS) 코드가 디스크에 기록 할 때마다 있어야하며, 반드시 디스크에있는 것은 아닙니다.
1) "가상"및 "논리적"주소는 모두 거의 항상 동일한 것을 의미하는 특수 용어입니다. 둘 다 내 OS 교과서는 동일한 용어 (프로세스에 의해 생성 된 주소)에 대해 두 용어를 모두 사용합니다. 2) 페이징은 메모리 관리를위한 현대적인 표준이지만 다양한 구형 시스템은 재배치 레지스터 또는 그 개념의 변형을 사용합니다. 때로는이 계획을 "기본 및 경계"또는 "기본 및 제한"이라고합니다. 페이징에는 많은 노력이 필요하지만 기본 및 경계에는 단 두 개의 레지스터가 필요합니다 (경계 검사를하지 않는 경우 하나만 필요함). – David
가상 주소와 논리 주소가 요즘 같은 것은 아닙니다. 안드로이드를 목격하십시오. 실제/논리/가상 구별은 운영 체제를 이해하는 데있어서 핵심적인 요소입니다. – user3344003
가상 주소와 논리적 주소의 차이점에 대한 답이나 의견을 명확히하지 않았습니다. 고전적으로 가상 주소와 논리적 주소를 구별하지 않습니다. 가상 주소와 실제 주소간에 추가 번역이 필요한 특정 시스템 (예 : 세분화 시스템)이 있지만 예외는 아니고 표준이며 일부 주소 유형을 나타내지는 않습니다. 이 답변과 이것을 더 많은 upvotes 농장있다 : http://stackoverflow.com/questions/15851225/difference-between-physical-logical-virtual-memory-address – David