-
Notifications
You must be signed in to change notification settings - Fork 7
15 04 04 후기
EeS edited this page Apr 9, 2015
·
12 revisions
#ARM B조 15년 4월 4일 후기.
─ │ ┌ ┐ ┘ └ ├ ┬ ┤ ┴ ┼ ━ ┃ ┏ ┓ ┛ ┗ ┣ ┳ ┫ ┻ ╋ ┠ ┯ ┨ ┷ ┿ ┝ ┰ ┥ ┸ ╂ ┒ ┑ ┚ ┙ ┖ ┕ ┎ ┍ ┞ ┟ ┡ ┢ ┦ ┧ ┩ ┪ ┭ ┮ ┱ ┲ ┵ ┶ ┹ ┺ ┽ ┾ ╀ ╁ ╃ ╄ ╅ ╆ ╇ ╈ ╉ ╊
##진행 상황
start_kernel()
└ setup_arch()└ paging_init()
└ bootmem_init
###bootmem_init 함수의 이해.
slap 할당자가 사용되기 전에, 메모리 관리를 위해 사용되는 관리자를 만들어주는 함수이다. (출처 : 모기향 책)
###함수의 흐름.
find_limits()
함수를 통해, 가용한 물리 메모리의 시작점, low-mem 의 끝지점, high-mem 의 끝지점(==실제 끝 지점) 을 구해준 이후,
arm_memory_present
함수를 통해 아래 sparse_init
에서 사용하기 위하여 메모리를 섹션 단위로 저장해 줍니다.
###주요 논의점
- sparse 란? : memory 관리 기법 중 하나이며, 서로 나뉘어진 메모리에 적합합니다.
관련 링크 : http://www.iamroot.org/xe/QnA/13649 (오래된 질의라 현재와는 일부 달라졌는데, 가장 큰 차이는 arm에서도 sparse 를 사용한다는 점 입니다.(저희의 분석이 맞다는 전제 하에)) - 추가 바람
###프로그래밍 스킬
- 구조체 크기를 2의 승수로 했을 때의 장점.
만약, 구조체 크기가 2의 승수 라면, 2진수로 나타냈을 때 크기는 00..010...0 이 됩니다.
따라서, 각 구조체의 offset은,
0 : 00.. 00 0...0
1 : 00.. 01 0...0
2 : 00.. 10 0...0
3 : 00.. 11 0...0
..
이 되므로, 단순한 masking 혹은 bit shift 만으로 몇 번째 구조체 인지 와, 구조체 안에서의 offset을 구할 수 있습니다.
(추가 사항 있을 시 추가바랍니다.)