ARMv8-A에서 TLB 및 ASID에 대해 빠른 질문이 있습니다.
페이지의 설명/블록 설명자 (리프 MMU 테이블 항목)에는 ASID 식별자가없고 nG (비전 역) 비트 만 포함되어 있습니다. 이 페이지에는 ASID를 사용해야합니다.
- 레지스터 값과 일치하는 실제 ASID 값은 TLB에 있습니다. 페이지 보행이 발생하고 해당 엔트리가 TLB에 추가되면 (현재 ASID와 함께, 후속 TLB 룩업이 새 ASID가 일치 하는지를 확인할 때) 설정됩니다.ARMv8-A의 TLB에만 ASID가있는 이유는 무엇입니까? TLB에서 꺼내지 만 테이블에있는 메모리에 대한 비화되지 않은 액세스를 피하는 방법은 무엇입니까?
문맥 전환시 표를 업데이트하지 않으려면 ASID를 사용하고 싶습니다. 각 프로세스에는 상주 ASID 값이 있습니다. 프로세스 1 vaddr에서 일부 데이터 a1
, 프로세스 2에서 vaddr a2
. 1에서 2로 컨텍스트 스위치. 실행 중에 a1
에 해당하는 TLB 항목이 꺼내집니다 (어떤 이유로). 프로세스 2는 a1
에 액세스하고 TLB 누락이 발생하며 페이지 워크가 발생하고 ASID2 값 을 사용하여 프로세스 1의 항목을 성공 및 저장하여 프로세스 1의 데이터에 대한 프로세스 2 액세스 권한을 부여합니다.
무엇을 이해하지 못합니까? 테이블 업데이트를 피하면서 ASID 메카닉이 프로세스 1과 2 사이의 보안을 제공하면 안됩니까?
선택 사항 : 모든 프로그램에 동일한 가상 주소 (적어도 모든 프로그램의 진입 점 주소는 동일) 인 경우 .text
섹션이있는 경우 컨텍스트 전환 시마다 테이블을 업데이트해야합니까, 아니면 여러 항목을 가질 수 있습니까? 서로 다른 ASID를 사용하여 동일한 vaddr과 일치합니까?
TLB의 ASID는 보안이 아니지만 지금 최적화하면 컨텍스트 스위치에서 전체 TLB를 플러시합니다. 모든 ** 프로세스는 고유 한 가상 - 물리적 메모리 매핑 **을 가지고 ASID OS가 없으면 프로세스 스위치에서 TLB의 모든 TLB 항목을 삭제합니다. ASID OS를 사용하면 경우에 따라 오래된 TLB 항목을 보관할 수 있습니다. – osgx
@osgx 그건 정확히 내 대답에 무슨 뜻이야.내가 이전에 그것을 이해하지 못했던 이유는 TLB를 플러시하는 비용 (매우 낮은 - 많은 후속 페이지 워크를 유발 함)과 페이지 전환 (매우 낮음 - 단 두 개의 L1 요청 만) 비용을 과대 평가했다는 것입니다. – maxbc
maxbc, 예, 요점은 * 최적화 *입니다. 자세한 내용은 [ "운영체제 : 세 개의 쉬운 부분"] (http://pages.cs.wisc.edu/~remzi/OSTEP/) (Remzi H Arpaci-Dusseau 및 Andrea C. Arpaci-Dusseau) ch. 19 "vm-tlb": http://pages.cs.wisc.edu/~remzi/OSTEP/vm-tlbs.pdf#page=9 "*이 오버 헤드를 줄이려면 주소 공간 식별자 (ASID) 필드를 TLB * " – osgx