[커널 19차] 7주차
2022.07.02 16:52
2022/06/25 7주차 스터디 내용
코드로 알아보는 ARM 리눅스 커널
시작
ARMv8-A 64bit 실행 상태 = AArch64, 32bit 실행 상태 = AArch32 (※ AArch32는 ARMv7과 호환)
AArch32 → AArch64 : EL0 → EL1, AArch64 → AArch32 : EL1 → EL0 에서만 가능 합니다.
Normal world와 Secure world간 전환은 SMC instruction (Secure Monitor Call)을 수행하여 TrustZone으로 전환해야 합니다.
아래와 같은 EL0에서 발생한 exception은 EL1 이상의 Exception level에서 처리 후 ERET로 다시 EL0로 복귀 되어야 합니다.
-
IRQ/FIQ interrupt
-
Memory system abort
-
Undefined instruction
-
System call
-
Security monitor or Hypervisor trap
System Register
MSR (Move to System coprocessor register from ARM register)
MRS (Move to ARM register from system coprocessor register)
MSR TTBR0_EL1, x0
MRS x0, TTBR0_EL1
※ 자주 사용되는 중요한 System Register
레지스터 |
전체 명칭 |
사용법 |
SCTLR |
System ConTroL Register |
MMU, Cache, alignment 검사 같은 아키텍쳐의 주요 기능을 제어 |
ACTLR |
Auxiliary ConTroL Register |
Processor 관련 주요 기능을 제어 |
SCR |
Secure Configuration Register |
Secure State와 EL3로 exception이 trap되는 세부 동작을 설정 |
ESR |
Exception Syndrome Register |
Exception 원인 정보 |
FAR |
Fault Address Register |
fault의 virtual address |
HCR |
Hypervisor Configuration Register |
Virtualization Setting과 EL2로 trap되는 세부 동작을 설정 |
MIDR |
Main ID Register |
SW가 실행될 때 Processor 관련 정보를 얻어 옴(version 정보) |
MPIDR |
MultiProcessor Affinity Register |
Core와 Cluster ID를 멀티 코어 시스템에서 식별 |
CTR |
Cache Type Register |
Cache와 관련된 정보를 식별 |
TCR |
Translation Control Register |
controls the stage of address translation |
1.3. ARM Exception Type
1. Service call
SVC (Supervisor Call)
HVC (Hypervisor Call)
SMC (Secure Monitor Call)
2. Abort Exception
Instruction fetch failed
Data access failed
3. Reset Exception
4. Interrupt Exception
IRQ
FIQ
AArch64 Exception Vector Table
VBAR (Vector Based Address Register)_EL1/2/3 : Each vector table entry 128bytes
❑ Synchronous
❑ IRQ/vIRQ
❑ FIQ/vFIQ
❑ SError/vSError
❑ Current Exception level with SP_EL0
❑ Current Exception level with SP_ELx, x>0
❑ Lower Exception level, ... using AArch64
❑ Lower Exception level, ... using AArch32
❑ Current Exception level with SP_EL0
"SP0_EL0는 익셉션 레벨에 상관없이 같은 스택 포인터를 사용한다"라는 의미입니다.
리눅스와 같은 범용 운영체제에서는 "Current EL with SP0" 타입의 익셉션이 유발되지 않도록 설정하거나, 유발돼도 유효하지 않은 익셉션으로 처리하도록 익셉션 핸들러를 구현합니다. Armv8 아키텍처에서 다양한 조건과 설정으로 익셉션을 사용할 수 있게 옵션으로 제공하는 것이라 볼 수 있습니다.
❑ Current Exception level with SP_ELx, x>0
"SP_ELx"는 각 익셉션 레벨 별로 지정한 스택 포인터 주소를 뜻합니다.
❑ Lower Exception level(AArch64)
AArch64 EL0가 동작 중에 발생한 exception
❑ Lower Exception level(AArch32)
AArch32 EL0가 동작 중에 발생한 exception
1.4 Cache
1.4.1 cache 구조
tag : cache line과 연결된 memory address를 식별하는 데 사용
cache line : 효율적으로 read/write 하기 위해서 여러 word를 묶어서 입출력 진행
index : cache line을 찾기 위한 memory address의 일부 bit
way & set : 효율적인 cache 운영을 위해 동일 index에 해당하는 tag/cache line 쌍을 여러개 가짐
offset : cache line을 찾은 뒤 해당 cache line에 접근할 바이트 위치 정보
1.4.2 cache controller
1.4.3 cache policy
cache allocation policy - write allocation, read allocation
cache refill policy - write-back, write-through
1.4.4 cache coherency
PoC : 다른 core, DSP, DMA 모두 일관성 유지
PoU : instruction cache와 data cache 간 일관성 유지
1.4.5 cache 관리
software가 cache를 clean 하거나 invalidate
1.4.6 cache 탐색
cache set/way 또는 virtual address를 지정해서 동작
1.5 MMU
TTBR1 register -> kernel 주소공간 page table -> physical memory
TTBR0 register -> user 주소공간 page table -> physical memory
48bit address의 경우:
0x00000000_00000000 ~ 0x0000ffff_ffffffff의 범위의 주소 공간을 차지하게 된다.
TTBR register -> 1st page table -> 2st page table -> 3st page table -> physical address
PGD(1st) -> PUD(2st) -> PMD(3st) -> PTE(4st)
1.6 Memory ordering
Processor가 성능 최적화를 위해서 memory access 명령을 read 또는 write 단위로 재배치 할 수 있다. cache나 buffer를 활용해 processor와 memory 사이의 요구 대역폭을 줄임, 이로 인해 program 상의 instruction order가 달라질 수 있음.
Memory ordering issue:
-
device driver에 의한 hardware 제어
-
Multi thread API를 통한 Multi core간 상호작용
-
OS에서 page table 수정
-
JIT compiler
1.6.1 memory type
-
normal memory type : shareable memory attribute, cacheable memory attribute
-
device memory type : non-cacheable memory attribute, outer-shareable memory attribute
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | [공지] 스터디 정리 노트 공간입니다. | woos | 2016.05.14 | 629 |
148 | [커널 17차] 103주차 | ㅇㅇㅇ | 2022.08.28 | 35 |
147 | [커널 18차] 66주차 | kkr | 2022.08.27 | 77 |
146 | [커널 17차] 101~102주차 | ㅇㅇㅇ | 2022.08.21 | 47 |
145 | [커널 18차] 65주차 | kkr | 2022.08.20 | 28 |
144 | [커널 18차] 64주차 | kkr | 2022.08.13 | 75 |
143 | [커널 17차] 100주차 [1] | ㅇㅇㅇ | 2022.08.06 | 100 |
142 | [커널 18차] 63주차 | kkr | 2022.08.06 | 102 |
141 | [커널 17차] 99주차 | ㅇㅇㅇ | 2022.07.31 | 35 |
140 | [커널 18차] 62주차 | kkr | 2022.07.30 | 26 |
139 | [커널 17차] 97~98주차 | ㅇㅇㅇ | 2022.07.24 | 52 |
138 | [커널 18차] 61주차 | kkr | 2022.07.23 | 113 |
137 | [커널 18차] 60주차 | kkr | 2022.07.16 | 131 |
136 | [커널 17차] 95~96주차 | ㅇㅇㅇ | 2022.07.10 | 108 |
135 | [커널 18차] 59주차 | kkr | 2022.07.09 | 127 |
134 | [커널 19차] 8주차 | kanlee | 2022.07.02 | 160 |
» | [커널 19차] 7주차 | kanlee | 2022.07.02 | 96 |
132 | [커널 19차] 6주차 | kanlee | 2022.07.02 | 42 |
131 | [커널 19차] 5주차 | kanlee | 2022.07.02 | 38 |
130 | [커널 19차] 4주차 | kanlee | 2022.07.02 | 106 |
129 | [커널 18차] 57주차 | kkr | 2022.06.25 | 129 |
.