티스토리 뷰
이름 그대로 pages를 Mbyte 단위로 return 하는 함수입니다. 일단 무식하게 산술 연산을 통해 pages를 Mbyte로 나타내봅시다, 예를 들어 pages가 4096이라 하면, 1 PAGE의 사이즈인 4096에 4096(bytes)를 곱하게 되면 byte 단위의 결과가 나오게 됩니다, 이를 Mbyte로 나타내려면, 결과에 /1024, /1024 두번을 통해 byte --> Kbyte --> Mbyte 연산을 해야될텐데 수식으로 나타내면 아래와 같습니다.
(4096 * 4096)/1024/1024 = 16 MB
뭔가 연산이 많은데요, 그렇다면 오늘 알아보는 pages_to_mb는 내부적으로 어떤 동작을 보일까요? 함수 내용은 아래와 같습니다.
static inline unsigned long pages_to_mb(unsigned long npg)
{
return npg >> (20 - PAGE_SHIFT);
}
간단하지 않은가요? 입력 받은 npg를 (20 - PAGE_SHIFT) 만큼 비트연산을 하는게 전부입니다. 20 - PAGE_SHIFT 는 32Bit 기준으로 8이라는 결과가 도출되고, 결국 npg>>8 와 같은 내용이 됩니다. 좀 더 풀어보면, npg / (2의 8승 = 256) 과 같은 연산으로 풀이됩니다. 결국 (4096 * 4096)/1024/1024 와 같은 코드가 되는것을 확인 할 수 있습니다.
내용은 같지만 속도면에서 본다면 (어셈블 확인) 상당히 많은 연산이 생략됨을 알 수 있기에, 임베디드 개발자 라면 커널의 가벼운 함수 하나하나도 놓쳐서는 안되겠습니다.
'개발 > Linux' 카테고리의 다른 글
find command (0) | 2011.11.29 |
---|---|
비용이 낮은 연산자 선택 [%->&, / -> >>] (0) | 2011.11.20 |
for_each_possible_cpu (0) | 2011.11.01 |
dmesg Option (0) | 2011.10.31 |
vmalloc 영역... [가설] (0) | 2011.10.28 |
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
- Total
- Today
- Yesterday