2014-02-19 2 views
2

응용 프로그램은 가상 메모리에서 작동합니다. 이것은 좋은 개념입니다. 연속적인 블록처럼 취급 할 수 있으며 물리적 RAM에 연속적으로 있는지 또는 하드 디스크에 있는지 여부를 신경 쓸 필요가 없습니다.변환 참조 버퍼 작성

내가 아는 한 가상 주소와 실제 주소 간의 매핑은 변환 lookaside 버퍼를 사용하여 CPU (또는 최소한 하드웨어)에서 직접 수행됩니다.

나는 커널이 어떻게 든 TLB의 내용을 유지하지만 여기에 내가 조금 붙어있어 어디 있다고 가정, 그래서 나는 3 개 질문이 있습니다, 쿼리 읽고에 대한 특정 어셈블러 지침은 무엇

을 TLB의 내용 작성?이 주제와 관련된 opcode에 대한 인터넷 검색 결과가 좋지 않았습니다. 방금 INVLPG와 TLBWI를 찾았습니다. 나는 그 수준의 깊이에 익숙하지 않기 때문에 잘못된 검색 용어를 사용하기도합니다. 검색 결과를 즉시 찾으면 어떤 검색어를 사용합니까?

모든 어셈블러 지침에 권한 CPU 모드가 필요합니까?

TLB의 초기 내용은 무엇입니까? TLB가 처음에 비어 있다면 운영 체제의 맨 처음 어셈블러 지침이 실제 메모리 (즉 가상 주소 == 실제 주소)에 직접 매핑된다는 것을 의미합니까?

+1

는 (내 생각) - 한 모든 매핑을 지정하는 기본, 실제 메모리에 상주하는 구조. TLB는 커널이 변경 될 때만 유효해야합니다 (다시 생각합니다). – Linuxios

+1

TLB의 내용에 대해 모르겠지만 x86 머신은 모두 [* 리얼 모드 *] (http://en.wikipedia.org/wiki/Real_mode) – ArjunShankar

+0

@Linuxios :로 부팅됩니다. 이유는 그것이 버퍼라고합니다. 실제 RAM의 실제 페이지 테이블을 절대로 스왑하지 않으면 이해하기 쉽습니다. –

답변

2

이 커뮤니티 위키 포스트의 의견과 현재의 이해를 요약하고 싶습니다. 추상적 인 관점에서 페이지 테이블과 변환 룩어 사이드 버퍼에 대해 알기 시작할 때를 대비하여 읽을 수 있습니다. 그러나이 게시물은 비트 및 바이트의 100 % 정확성을 보장 할 수 없습니다.

real mode의 PC를

I386 PC를 부팅 부팅. 이 모드는 실제 메모리 만 사용하며 가상 메모리는 아직 신경 쓰지 않습니다. 모든 지침은 높은 권한으로 실행됩니다. 우리는 이것을 커널 모드로 생각할 수 있습니다.

운영 체제 (Linux 또는 Windows의 운영 체제)는이 모드에서 실행됩니다. 페이지 테이블을 설정 한 다음 CPU를 protected mode으로 전환합니다. 페이지 테이블

page table 작성을위한

; set PE bit 
mov eax, cr0 
or eax, 1 
mov cr0, eax 
; far jump (cs = selector of code segment) 
jmp cs:@pm 
@pm: 
; Now we are in protected mode. 

오피 코드 실제 메모리에 상주하고 디스크로 스왑되지 않습니다. 페이지 테이블이 변환 룩어 사이드 버퍼에 없으므로 mov과 같은 간단한 메모리 쓰기 명령어를 사용하여 페이지 테이블을 채울 수 있습니다. 페이지 테이블을 설정하기위한 특정 어셈블러 명령어가 필요하지 않습니다.

번역 색인 버퍼가 페이지 테이블에 대한 단지 캐시 인 변환 색인 버퍼. "정상적인"캐시와 혼합하지 않으려면 CPU의 다른 부분에 있어야합니다.

운영 체제가 (캐시가 아닌 RAM의) 페이지 테이블에 기록하는 경우 CPU가 다시 읽히도록 TLB를 지우려면 모든 CPU에 하나 이상의 특정 어셈블러 명령어가 있어야합니다 메모리로부터의 페이지 테이블

단일 페이지 만 디스크로 스왑 될 수 있기 때문에 전체 TLB를 지우는 것은 성능 낭비 일 수 있습니다. 따라서 i486 어셈블러 명령어 invlpg은 단일 페이지 만 무효화합니다.

권한있는 TLB 연산 코드입니까?

TLB를 지우는 것은 응용 프로그램에별로 중요하지 않은 것처럼 보입니다. 사용자 모드에서 명령을 실행하는 것이 가능할지라도 CPU는 원래 페이지 테이블을 다시 읽습니다. 그러나 커널 만이 페이지 테이블에 쓸 수 있기 때문에 TLB를 지우는 어셈블러 명령어가 높은 권한 명령어 인 것 같습니다. TLB를

초기 내용

초기 내용이 정말 중요하지 않습니다. 페이지 테이블 단지 캐시를 OS는 페이지 테이블을 설정하고 다음

  • 분명히 TLB는
  • 스위치 보호 모드로 CPU는 TLB는