[커널 20차] 48주차

2024.04.25 18:08

무한질주 조회 수:40

 __init pagint_init

 

pgd_set_fixmap(__pa_symbol(swapper_pg_dir))

 

DYzsBUd8hYTBo7sQoZZkhty8EYeuMmuRiTEedyci


 

map_kernel()

 

Idmap_t0sz = 63UL - __fls(__pa_symbol(_end) | GENMASK(VA_BITS_MIN - 1, 0));

  • __pa_symbol(_end) : 커널의 마지막 주소를 물리 주소로 가져온다

  • GENMASK(VA_BITS_MIN - 1, 0) : 0부터 47bit까지 1로 bit를 세팅

  • __fls : 제일 왼쪽에서 1로 set된 bit를 구한다

  • Identical mapping으로 표현할 수 있는 크기를 표현. 가상주소가 물리 메모리보다 더 큰 값을 가지는 경우를 커버하기 위해 사용.

  • 여전히 t0sz shift 버그가 적용될 수 있는 위험한 부분이다. 이후 패치에 추가 필요


 

__create_pgd_mapping(pgdp, pa_start, (unsigned long)va_start, size, prot, early_pgtable_alloc, flags)

  • memory를 할당하는 함수를 가지고 pgd mapping을 수행한다

 

alloc_init_pud

 

Page table level이 4인 경우, pgdp와 p4d가 같다

현재 swapper table을 만드는 중이기 때문에, p4d_none이 true가 된다

 

Early_pgtable_alloc

 

CPU는 물리 주소에 바로 접근할 수 없기 때문에, 임시로 pte를 할당하여 특정 영역을 가상 주소로 바꾸고(pte fixmap), 특정 조작 후 해당 영역을 fixmap에서 해제한다. 즉 초기화하기 위해 임시로 해당 영역을 가상 주소로 접근하고 초기화 후 영역 해제.

 

pud_set_fixmap(pud_offset_phys(p4dp, addr))

-> pud의 물리주소를 fixmap에 설정하고 물리주소를 반환

 

fixmap은 static하게 만들어져있고, 이를 사용하여 물리 메모리의 페이지테이블을 매핑하여 가상 주소와 물리 주소를 연결한다.

 

fixmap은 다이나믹 매핑

 

CPU가 접근하는 것은 가상주소, page table 안에 있는 것은 모두 물리 주소

Page table의 내용에 접근하려면 fixmap으로 가상 주소로 접근해서 조작해야 한다

Page table의 pgd에 대한 물리 주소를 파악할 수 있는 함수 -> init_pg_dir, swapper_pg_dir …

이 정보를 바탕으로 set_pgd … 함수를 통해 가상 주소와 물리 주소의 매핑이 가능해진다

현재 swapper_pg_dir는 pgd만 static, 나머지는 memblock으로 되어있다

FIX_ 는 bm_ 과 연결되어 있다. 즉 FIX_는 bm_을 임시로 가리키기 위한 변수

__set_fixmap

 

__fix_to_virt -> fixmap 영역을 가상 주소로 변환

fixmap_pte에 주소를 넣으면 bm_pte를 반환한다




 

6kN47Bi3E24G019EsO1F8KqV4RgHOkjSwz1bIh-O

 

Fixmap_copy

 

Pgdir : pgd의 가상 주소 

TOT : early_ioremap 시작 영역

 

1rpJUEUvL0LRaF8C9qhvFEko8moXm_AS8EG8eVDo

번호 제목 글쓴이 날짜 조회 수
공지 [공지] 스터디 정리 노트 공간입니다. woos 2016.05.14 630
248 [커널 19차] 103 주차 Min 2024.04.28 37
» [커널 20차] 48주차 무한질주 2024.04.25 40
246 [커널 19차] 102 주차 Min 2024.04.20 44
245 [커널 19차] 101 주차 Min 2024.04.13 65
244 [커널 19차] 100 주차 Min 2024.04.13 18
243 [커널 19차] 99 주차 Min 2024.03.30 83
242 [커널 19차] 98 주차 Min 2024.03.23 57
241 [커널 19차] 97 주차 Min 2024.03.16 50
240 [커널 19차] 96 주차 Min 2024.03.14 32
239 [커널 19차] 95 주차 [2] Min 2024.03.03 111
238 [커널 20차] 32주차 brw 2023.12.16 388
237 [커널 20차] 29주차 brw 2023.11.27 163
236 [커널 20차] 27주차 brw 2023.11.21 87
235 [커널 20차] 26주차 brw 2023.11.21 50
234 [커널 20차] 28주차 이민찬 2023.11.19 65
233 [커널 20차] 25주차 이민찬 2023.10.30 120
232 [커널 20차] 24주차 이민찬 2023.10.22 810
231 [커널 20차] 23주차 이민찬 2023.10.14 81
230 [커널 20차] 22주차 이민찬 2023.10.08 76
229 [커널 20차] 21주차 이민찬 2023.09.23 117
XE Login