[커널 20차] 48주차
2024.04.25 18:08
__init pagint_init
pgd_set_fixmap(__pa_symbol(swapper_pg_dir))
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를 반환한다
Fixmap_copy
Pgdir : pgd의 가상 주소
TOT : early_ioremap 시작 영역
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | [공지] 스터디 정리 노트 공간입니다. | woos | 2016.05.14 | 630 |
248 | [커널 19차] 103 주차 | Min | 2024.04.28 | 41 |
» | [커널 20차] 48주차 | 무한질주 | 2024.04.25 | 44 |
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 | 815 |
231 | [커널 20차] 23주차 | 이민찬 | 2023.10.14 | 81 |
230 | [커널 20차] 22주차 | 이민찬 | 2023.10.08 | 76 |
229 | [커널 20차] 21주차 | 이민찬 | 2023.09.23 | 117 |
.