개발/코드로 알아보는 ARM 리눅스 커널 TIL
20240627 - ARMv8아키텍처 (p34)
clucle
2024. 11. 9. 16:59
tcr : translation control register
t0sz : tfanslation table 0 size
1:1 매핑 위해서 가상 메모리에서 쓰는 비트수 조정
extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
extern pgd_t idmap_pg_dir[PTRS_PER_PGD];
TTBR0: 일반적으로 사용자 모드와 커널 모드에서의 주소 변환에 사용됩니다.
TTBR1: 가상화 환경에서의 주소 변환이나, 커널 모드 내에서의 보조 페이지 테이블을 위한 주소 변환에 사용됩니다.
pgd_offset_raw : 해당 엔트리의 주소
pgd_index : 엔트리 리턴 (9bit 라면 512까지)
커널 메모리 가상 주소 vs 커널 이미지 가상 주소
pgtable 레벨에 따라 분기되는 코드가 있음 예를들면 pud 주소 fixmap_pud
3 레벨 pte
비트 | 명칭 | 설명 |
63 | PXN | 특권 모드에서 실행 금지 |
62 | XN | 사용자 모드에서 실행 금지 |
61 | Contiguous | 연속 페이지 플래그 |
60 | DBM | 더티 비트 관리 |
59 | AF | 접근 플래그 |
58:55 | SH | 공유 속성 (Shareability) |
54:52 | AttrIndx | 메모리 속성 인덱스 |
51:12 | Output address | 물리 페이지 프레임 번호 (PFN), PAGE_SHIFT로 맞춰 조정 |
11 | nG | 글로벌 비트 |
10 | Reserved | 예약됨 |
9 | Reserved | 예약됨 |
8 | Reserved | 예약됨 |
7:6 | AP | 접근 권한 (Access Permissions) |
5 | NS | 비-Secure |
4:2 | AttrIndx | 메모리 속성 인덱스 (속성 선택) |
1 | Valid | 유효 비트 (PTE가 유효한지 여부) |
0 | Table | 이 엔트리가 테이블을 가리키는지 여부 |