2012-03-06 4 views
3

MMU (메모리 관리 장치)의 주소 변환 프로세스에 대한 나의 이해기준 레지스터, 제한 레지스터 및 재배치 레지스터는 어떻게 사용됩니까?

-> 논리 주소 : cpu.programmer가이 주소와 관련이 있는지 확인하십시오.

-> 가상 주소 : 페이지로 하드 디스크에 상주합니다.

-> 실제 주소 : RAM에 있습니다. 실제 주소입니다.

1 : CPU가 논리 주소를 생성하여 MMU로 보냅니다.

2 : MMU는 논리 주소를 가상 주소로 변환 한 다음 실제 주소로 변환하고 실제 주소를 RAM으로 보냅니다.

3 : RAM이 가득 차면 빠르게 사용되지 않는 페이지가 하드 디스크로 반환되어 다른 페이지 (프로세스)에 메모리를 할당합니다.

나의 질문은 : 1) 재배치 레지스터의 가치는 어디에 추가됩니까? 2) 누가 재배치 등록부의 가치를 결정합니까? 3) 기본 레지스터 및 제한 레지스터를 사용하는 방법, 사용 방법은 무엇입니까? 4) 논리 주소가 꺼지는 위치?

신체가 답변 할 수 있다면 나에게 감사 할 것입니다. 이 항목의 모든 오해를 알려주십시오. -thanks

답변

4

이 내용이 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가 offsetLimit 비교)에서, 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 레지스터 또는 프로그램의 코드에서

  1. 세그먼트 셀렉터를
  2. 오프셋 프로그램의 코드에서 GDT/LDT에
  3. 세그먼트 기본 주소 페이지 테이블에
  4. 실제 주소

virtual address : reside in the hard disk , as a pages에 대해 정확히 말하고 싶은 것은 무엇인지 모르겠지만 실제 주소 변환에 가상 주소가 있기 때문에 가상 온 디어가 있다는 것을 의미하지는 않습니다. sk 메모리. 가상 온 디스크 메모리 외에 번역을위한 다른 용도가 있습니다. 그리고 주소는 CPU와 당신의 (그리고 OS) 코드가 디스크에 기록 할 때마다 있어야하며, 반드시 디스크에있는 것은 아닙니다.

0

설명에는 많은 실수가 있으며 그 대부분은 부정확 한 문서 및 일반적인 사용으로 인한 결과 일 수 있습니다.

우선 가상 주소과 같은 것은 없습니다. 물리적 주소와 논리적 주소가 있습니다. 슬프게도, 용어 가상 주소는이 무엇을 의미하는지입니다 논리 주소 ..

는 CPU의 명령어 스트림은 항상 논리적 주소를 작동 할 때 사용 (심지어 하드웨어 설명서) (값은 물리적 주소로 참조 할 수 있습니다) 자주있다.

CPU가 논리 주소에 액세스해야 할 때 MMU는이를 물리적 주소로 변환하려고 시도합니다. 페이지 테이블에서 주소를 조회하여이를 수행합니다.

여러 가지가 그 시점에서 일어날 수 :

  1. 는 주소 => 액세스 위반에 대한 페이지 테이블 엔트리가되지 않을 수 있습니다.
  2. 페이지 테이블 항목에 잘못된 => 액세스 위반으로 표시되어 있습니다.
  3. 페이지 테이블 항목은 물리적 메모리가 매핑되지 않았 음을 나타냅니다. => 페이지 오류. (모드 액세스 확인 생략). 가상 메모리가 작동하는 마지막 단계입니다. 이 시점에서 운영 체제의 페이지 오류 처리기는 해당 페이지가 디스크에 저장된 위치를 찾아서로드하고 페이지 테이블을 업데이트 한 다음 명령을 다시 시작해야합니다.

운영 체제에서 디스크에 쓰기 가능한 메모리를 페이징하여 사용 가능한 물리적 메모리 (즉 변경)을 (다시 기록 할 필요가 없습니다 만 데이터를 읽을) 물리적 메모리에 대한 수요가있을 때 관리합니다.

전에 "재배치 등록기"에 대해 들어 본 적이 없습니다. 그러나 GOOGLE 검색을 수행하면 일부 학술 자료가이를 혼란스러운 교육적 개념 (즉, 현실과 관련 없음)으로 사용한다는 것을 알 수 있습니다.

일부 시스템은 기본 및 제한 레지스터를 사용하여 페이지 테이블을 정의합니다. 기본 레지스터는 페이지 테이블이 메모리에서 시작하는 위치를 나타내며 (물리적 또는 논리적 주소 일 수 있음) 제한 레지스터는 테이블의 측면을 나타냅니다.

레지스터는 일반적으로 직접로드되지 않습니다. 그 값은 일반적으로 하드웨어 Process Context Block (PCB)에 기록됩니다. 프로세스 컨텍스트가로드되면 페이지 테이블 기본과 한계가 자동으로로드됩니다.

일부 시스템에는 여러 페이지 테이블이 있습니다. 시스템 및 사용자 페이지 테이블이있는 경우 사용자 페이지 테이블은 시스템 공간의 논리 주소를 참조 할 수 있으며 시스템 페이지 테이블은 실제 주소를 나타냅니다.

+0

1) "가상"및 "논리적"주소는 모두 거의 항상 동일한 것을 의미하는 특수 용어입니다. 둘 다 내 OS 교과서는 동일한 용어 (프로세스에 의해 생성 된 주소)에 대해 두 용어를 모두 사용합니다. 2) 페이징은 메모리 관리를위한 현대적인 표준이지만 다양한 구형 시스템은 재배치 레지스터 또는 그 개념의 변형을 사용합니다. 때로는이 계획을 "기본 및 경계"또는 "기본 및 제한"이라고합니다. 페이징에는 많은 노력이 필요하지만 기본 및 경계에는 단 두 개의 레지스터가 필요합니다 (경계 검사를하지 않는 경우 하나만 필요함). – David

+0

가상 주소와 논리 주소가 요즘 같은 것은 아닙니다. 안드로이드를 목격하십시오. 실제/논리/가상 구별은 운영 체제를 이해하는 데있어서 핵심적인 요소입니다. – user3344003

+0

가상 주소와 논리적 주소의 차이점에 대한 답이나 의견을 명확히하지 않았습니다. 고전적으로 가상 주소와 논리적 주소를 구별하지 않습니다. 가상 주소와 실제 주소간에 추가 번역이 필요한 특정 시스템 (예 : 세분화 시스템)이 있지만 예외는 아니고 표준이며 일부 주소 유형을 나타내지는 않습니다. 이 답변과 이것을 더 많은 upvotes 농장있다 : http://stackoverflow.com/questions/15851225/difference-between-physical-logical-virtual-memory-address – David