[커널 19차] 7주차

2022.07.02 16:52

kanlee 조회 수:95

2022/06/25 7주차 스터디 내용

xBb69xfq8xkCgYEWnwrVBfkNaoUT-zxn44zEJJWs

코드로 알아보는 ARM 리눅스 커널

시작
 

ARMv8-A 64bit 실행 상태 = AArch64, 32bit 실행 상태 = AArch32 (※ AArch32는 ARMv7과 호환)

AArch32 → AArch64 : EL0 → EL1, AArch64 → AArch32 : EL1 → EL0 에서만 가능 합니다. 

0ZpN0dAaXlovMVwr3lIM2JLu2cq2cQ3yclmcdn0H

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

FIZAwtrDjIkwW1SFwKCcjZbmREDByzd9Avu-sU4sIOLe2zl3yxc9JjWHT_Gc7XcRsmJ3-vDyu_TSUOD8

Aa5JDYoIyh2CfYSDHwg_Q5vlNILCJmzlLT7SrJg-LospzV8OlvxKx3rfb6aP-5ABkygQ5r1YCcugRwJX

o8vTZi5ZS0_ddJklX-ve_rWU92clK1ADDeqK8f3q

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

  1. normal memory type : shareable memory attribute, cacheable memory attribute

  2. device memory type : non-cacheable memory attribute, outer-shareable memory attribute

번호 제목 글쓴이 날짜 조회 수
공지 [공지] 스터디 정리 노트 공간입니다. woos 2016.05.14 623
145 [커널 18차] 65주차 kkr 2022.08.20 27
144 [커널 18차] 64주차 kkr 2022.08.13 75
143 [커널 17차] 100주차 [1] ㅇㅇㅇ 2022.08.06 98
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 112
137 [커널 18차] 60주차 kkr 2022.07.16 128
136 [커널 17차] 95~96주차 ㅇㅇㅇ 2022.07.10 105
135 [커널 18차] 59주차 kkr 2022.07.09 125
134 [커널 19차] 8주차 kanlee 2022.07.02 160
» [커널 19차] 7주차 kanlee 2022.07.02 95
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
128 [커널 17차] 94주차 ㅇㅇㅇ 2022.06.19 80
127 [커널 18차] 56주차 kkr 2022.06.18 71
126 [커널 17차] 92~93주차 ㅇㅇㅇ 2022.06.11 92
XE Login