Skip to content
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 에서 사용하기 위하여 메모리를 섹션 단위로 저장해 줍니다.

###주요 논의점

  1. sparse 란? : memory 관리 기법 중 하나이며, 서로 나뉘어진 메모리에 적합합니다.
    관련 링크 : http://www.iamroot.org/xe/QnA/13649 (오래된 질의라 현재와는 일부 달라졌는데, 가장 큰 차이는 arm에서도 sparse 를 사용한다는 점 입니다.(저희의 분석이 맞다는 전제 하에))
  2. 추가 바람

###프로그래밍 스킬

  • 구조체 크기를 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을 구할 수 있습니다.

(추가 사항 있을 시 추가바랍니다.)