[커널 20차] 20주차

2023.09.17 16:05

이민찬 조회 수:182

 

2023.09.16 (20주차) - 약 10명 참여

1) head.S : primary_entry의 dcache_clean_poc 까지 진행

2) create_idmap에서 VA_BITS = 48, Page 크기 4K 이외의 경우 확인

 

< dcache_clean_poc >

dcache_clean_poc

     dcache_by_line_op cvac, sy, x0, x1, x2, x3

          dcache_line_size

          dcache_by_myline_op cvac, sy, x0, x1, x2, x3

                __dcache_op_workaround_clean_cache cvac, x0

                          alternative_if_not ARM_64_WORKAROUND_CLEAN_CACHE

                                 dc cvac, x0

                          alternative_else

                                 dc civac, x0

                          alternative _endif 

                                 .endm

 

ALTERNATIVE() 매크로

위치 : arch/arm64/include/asm/alternative-macros.h

관련 설명 : 

- http://jake.dothome.co.kr/alternative/

- https://blog.csdn.net/Rong_Toa/article/details/124636910

 

< create_idmap >

1) 페이지 레벨을 만드는 코드 분석 

#define ARM64_HW_PGTABLE_LEVELS(va_bits) (((va_bits) - 4) / (PAGE_SHIFT - 3))

  • PAGE_SHIFT - 3을 하는 이유는, VA_BITS에 맞게 page table entries를 구하기 위함.

  • 그리고 페이지 테이블이 가지고 있는 각 엔트리는 주소이기 때문에, 8Byte이다.

  • 만약 VA_BITS가 48이고, Page 크기가 4K인 경우, 

    • 48 - 12 = 36 (VA에서 Offset을 제외한 페이지 테이블 영역)

    • 12 - 3 = 9 (각 페이지 테이블 엔트리의 개수 - 승수로 표현된다)

    • 36 / 9 = 4 (페이지 테이블의 영역을 페이지 테이블 엔트리 개수로 나눔)

= 따라서, Page Table의 레벨이 4임을 알 수 있다.

 

위 매크로는 페이지 크기(PAGE_SHIFT)와 가상주소 크기(VA_BITS)를 바탕으로, 해당 가상 주소에서 몇 단계의 페이지 테이블이 만들어지는지 알려주는 역할을 한다.

 

만약 페이지 테이블 영역이 엔트리 개수로 바로 나누어 떨어지지 않는다면, ROUND UP 하여 상위 페이지 테이블 영역을 하나 더 생성한다.

 

2) 블럭 매핑

커널의 이미지가 2M align 되어있기 때문에, 페이지 크기가 4K 인 경우에는 블럭 매핑을 할 수 있다. 이에 관련된 코드는 SWAPPER_BLOCK_SIZE 이다.

/* Initial memory map size */

#ifdef CONFIG_ARM64_4K_PAGES

#define SWAPPER_BLOCK_SHIFT     PMD_SHIFT

#define SWAPPER_BLOCK_SIZE      PMD_SIZE

#define SWAPPER_TABLE_SHIFT     PUD_SHIFT

#else

#define SWAPPER_BLOCK_SHIFT     PAGE_SHIFT

#define SWAPPER_BLOCK_SIZE      PAGE_SIZE

#define SWAPPER_TABLE_SHIFT     PMD_SHIFT

#endif

 

4K 페이지인 경우 SWAPPER_BLOCK_SIZE는 PMD_SIZE 이다. 이와 다르게 4K가 아닌 경우에는 PAGE_SIZE 이다.

 

(1) 블럭 매핑을 한 경우

HUtJsxjVXec-dMOSK6-PiF7jMrlRoZ_NvMtj3Fkr

 

(2) 블럭 매핑을 하지 않은 경우

PTiQcMiNz3phWdn4QOKOAz3r2dxlf_JtvlJ3Bwl2



 

3) 가상 주소로 표현할 수 있는 범위보다 물리 주소가 더 큰 경우

hlOBita_5w7Oo7f35MRzjW27EXA8YVcJQQ_end4x

 

(1) VA_BITS < 48

추가 페이지 테이블을 구성한다. 

THgGsoRTs6D2x0979UP3ZkWqMdIHAfXZzc9A5EVq

3T_SyJW46SkIeuVJrUwL2aIozQlUQHY9aQw3C9aT

위와 같이 구성된다. (값은 정확하지 않을 수 있음..)


 

(2) VA_BITS = 48

추가 페이지 테이블을 구성하지 않고, PGD의 엔트리 수를 늘려서 해결한다. 

다시 말하면, VA_BITS가 48인 경우 L1 table은 6비트를 사용해 엔트리 개수는 64개이다. 이 때, VA_BITS가 52인 것처럼 확장해 1024개의 엔트리를 활용한다는 것이다.

bIab6-1nmPcatuhAgn7cYcmGmUjGVvnbGnOR0I4D

4) PA_BITS = 52인 경우의 주소 표현

populate_entries에서 phys_to_pte 매크로를 확인해보면, 다음과 같다.

 

#ifdef CONFIG_ARM64_PA_BITS_52

         /*

         * We assume \phys is 64K aligned and this is guaranteed by only

         * supporting this configuration with 64K pages.

         */

         orr     \pte, \phys, \phys, lsr #36

         and     \pte, \pte, #PTE_ADDR_MASK

 #else

         mov     \pte, \phys

 #endif

         .endm

 

PTE_ADDR_MASK 값은 0x0000_ffff_ffff_f000이다. 

주소의 [51:48] 비트를 [15:12]로 옮긴다고 이해하면 된다.

bPgkiiXEDKY_77yD8nxN2WnzYbhtgsMn2sCJozqk

5) 상위 레벨 페이지 테이블에서 count = 1 인 경우 페이지 테이블 구성 확인

ZroG_WBuDcJULDZVnjXOuH3yto4xRuRVuJG_2P4u

번호 제목 글쓴이 날짜 조회 수
공지 [공지] 스터디 정리 노트 공간입니다. woos 2016.05.14 626
» [커널 20차] 20주차 [2] 이민찬 2023.09.17 182
227 [커널 20차] 19주차 이민찬 2023.09.10 103
226 [커널 20차] 18주차 이민찬 2023.09.03 85
225 [커널 20차] 17주차 이민찬 2023.08.27 128
224 [커널 20차] 16주차 이민찬 2023.08.20 132
223 [커널 19차] 64 주차 Min 2023.08.19 91
222 [커널 20차] 15주차 이민찬 2023.08.13 126
221 [커널 19차] 63 주차 Min 2023.08.12 60
220 [커널 19차] 62 주차 Min 2023.08.05 79
219 [커널 20차] 13주차 이민찬 2023.07.30 106
218 [커널 19차] 61 주차 Min 2023.07.30 45
217 [커널 20차] 12주차 이민찬 2023.07.22 87
216 [커널 19차] 59 ~ 60 주차 Min 2023.07.22 37
215 [커널 18차] 113주차 kkr 2023.07.22 78
214 [커널20차] 11주차 이경재 2023.07.15 86
213 [커널20차] 10주차 이경재 2023.07.09 90
212 [커널20차] 9주차 이경재 2023.07.02 85
211 [커널 19차] 58 주차 Min 2023.07.01 41
210 [커널 19차] 56 ~ 57 주차 Min 2023.06.25 40
209 [커널 18차] 109주차 kkr 2023.06.24 33
XE Login