티스토리 뷰
memblock 이랑 vmemmap 을 까먹었다
memblock ->부팅 초기에 사용, vmemmap -> 가상 메모리 맵
이제 page 별로 어떤 zone 이랑 노드에 들어가는지 알기 때문에, 이 페이지에 정보를 설정해줌 __init_single_page
노드, 존, 참조카운트, 테이블 매핑 카운트, 마지막 접근 cpu pid 등을 기록
update_defer_init
- 저주소인경우에는 지연시킬 수없음
- if (zone_end < pgdat_end_pfn(pgdat)) return true; -> spanned count 가 movable 포함안시키니깐.
- 섹션에 대해서 처리
- (pfn & (PAGES_PER_SECTION - 1)) == 0) {
버디 시스템
- order 는 2의 배수, 페이지는 2^(order - 1) 개씩 관리
- 자주 사용되는 페이지는 리스트의 선두쪽에 있고 (hot), 그렇지 않은 경우 후미에 있어 (cold) 많이 사용되지 않는 페이지는 order 를 높여 다음 order 로 갈 수 있다.
page block order -> 페이지 블록이 관리하는 페이지수 2^page_block_order = pages per block
- 버디의 order 와 별개
CONFIG_SPARSEMEM_VMEMMAP 가 아닌 경우에만 사용하는 이유는, 페이지 구조체를 이미 연속된 공간에 할당했기 때문인가?
void __init mem_init(void)
{
swiotlb_init(1);
set_max_mapnr(pfn_to_page(max_pfn) - mem_map);
#ifndef CONFIG_SPARSEMEM_VMEMMAP
free_unused_memmap();
#endif
/* this will put all unused low memory onto the freelists */
free_all_bootmem();
memmap 을 완전 까먹었었다. memblock 이랑 다른거임
memmap
flat 메모리 시절에는 페이지의 속성 정보를 알기위해서 struct page[] 를 하나만 관리하면 됐음
그래서 memmap 이 하나뿐이었음
근대 sparse 메모리를 하려니까, 사용하는 공간만 섹션 단위로 page 정보를 관리하게되서 memmap 이 됨
이걸 vmemmap 에다 저장하는 SPARSE_VMEMMAP 도 있음.
근데 이게 섹션단위이다보니까 안쓰는 페이지에 대한 page 구조체도 저장중이었는데, 이걸 버디시스템 초기화 하기전에 지웠음.
memblock 은 메모리에서 어떤 영역을 사용할지 미리 FDT 를 읽어두고 저장해둔거임.
free 시킨다 -> 버디시스템으로 회수한다와 똑같은 말이구나
첨 할당을 버디시스템에서 안해서 그런듯
spin_lock_irqsave(&zone->lock, flags); // 인터럽트를 비활성화 하고 락, flags 에 현재 인터럽트 상태를 flags 에 저장
local_irq_restore(flags); // 인터럽트 상태 복원
'개발 > 코드로 알아보는 ARM 리눅스 커널 TIL' 카테고리의 다른 글
20241012 4.4.4 버디 시스템의 페이지 해제 (p336) ~ 4.5 pcp (355) (0) | 2024.11.20 |
---|---|
20241005 4.4.3 버디 시스템의 페이지 할당 (p322) (0) | 2024.11.20 |
20240921 4.3.3 vmemmap 을 사용하는 sparse 메모리 모델 (p277) (1) | 2024.11.16 |
20240907 4.2.2 메모리 맵 (p249) & 4.3 존 (p.254) (0) | 2024.11.16 |
20240831 - sparse init (p269) (0) | 2024.11.16 |
- Total
- Today
- Yesterday
- 영상 픽셀화 하기
- C++
- SuffixArray
- 클래스 맴버 변수 출력하기
- red underline
- print shared_ptr class member variable
- 카카오
- 코어 남기기
- chrome-extension
- vrpit
- cockroach db
- Visual Studio
- Quest2
- mysql
- Obstacle Avoidance
- set value
- 우리는 vr핏이라고 부릅니다
- 면접
- 잘못된 빨간줄
- boost
- 에러 위치 찾기
- vr핏
- hole-punching
- RVO
- shared_from_this
- ad skip
- Golang
- 봄날에 스케치
- Reciprocal n-body Collision Avoidance
- it's called a vrpit
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |