Download presentation
Presentation is loading. Please wait.
Published byLouise Webster Modified over 9 years ago
1
중요 ! memory region 은 물리적으로 쓸 수 있는 영 역을 설정한 것이고, reserved region 은 사용하지 말아야 할 부분 을 설정한 것입니다. kernel 이 사용하는 영역을 reserved 영역으로 설정하였습니다. -> 이 내용은 1/10 스터디를 하면서 아직까지 는 불확실한 내용이라 판단했습니다.
2
흐름 memblock_add_region 함수 -> memblock_double_array 함수 -> memblock_find_in_range 함수 -> memblock_find_in_range_node 함수 -> for_each_free_mem_range_reverse 매크로 -> __next_free_mem_range 함수
3
Case 1) reserved 가 memory 에 포함되서 겹치는 경우 1)mi, ri 를 이용한 이중 for 문 Step 1) mi = 2, ri = 2 Reserved regions cnt = 2 [0] Bas e Size … [1] Bas e Size … Memory regions cnt = 3 [0] Bas e Size … [1] Bas e Size … [2] Bas e Size … m_start m_end r_end r_start out_endout_start out_start(this_start) out_end(this_end)
4
Case 2) reserved 가 앞에서 겹치는 경우 1)mi, ri 를 이용한 이중 for 문 snapshot Step 1) mi = 2, ri = 2 Reserved regions cnt = 2 [0] Bas e Size … [1] Bas e Size … Memory regions cnt = 3 [0] Bas e Size … [1] Bas e Size … [2] Bas e Size … m_start r_start r_end out_start(this_start) out_end(this_end) m_end
5
Case 3) reserved 가 뒤에서 겹치는 경우 1)mi, ri 를 이용한 이중 for 문 snapshot Step 1) mi = 2, ri = 2 Reserved regions cnt = 2 [0] Bas e Size … [1] Bas e Size … Memory regions cnt = 3 [0] Bas e Size … [1] Bas e Size … [2] Bas e Size … m_start m_end r_startr_end 두 번째 for 문의 두 번째 if 문 (m_end > r_start) 에 걸리지 않기 때문에 For 문 그대로 진행되고 ri-- 됨
6
Case 3) reserved 가 뒤에서 겹치는 경우 1)mi, ri 를 이용한 이중 for 문 snapshot Step 2) mi = 2, ri = 1 Reserved regions cnt = 2 [0] Bas e Size … [1] Bas e Size … Memory regions cnt = 3 [0] Bas e Size … [1] Bas e Size … [2] Bas e Size … m_end r_start r_end m_start out_start(this_start) out_end(this_end)
7
memblock_find_in_range_node 함수 for_each 문 변환 for (i = (u64)ULLONG_MAX, __next_free_mem_range_rev(&i, nid, this_start, this_end, nid) ; i != (u64)ULLONG_MAX ; __next_free_mem_range_rev(&i, nid, this_start, this_end, nid)) this_start = clamp(this_start, start, end); this_end = clamp(this_end, start, end); if (this_end < size) continue; cand = round_down(this_end - size, align); if (cand >= this_start) return cand; }
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.