두근두근이야기

do_mmap 본문

IT/IT ::Advanced SystemProgramming

do_mmap

골든 2013. 4. 30. 03:58

do_mmap()함수는 현재 프로세스의 선형 주소 공간상의 메모리 할당을 맡고 있다.

정의는 ~/include/linux/mm.h 에 아래와 같은 inline함수로 되어있다.

static inline unsigned long do_mmap(sturct file *file, unsigned long addr, unsigned long len, unsigned long prot, unsigned long flag, unsigned long offset)

{

     unsigned long ret = -EINVAL;

     if((offset + PAGE_ALIGN(len))<offset)

          goto out;

     if(!(offset & ~PAGE_MASK))

          ret = do_mmap_pgoff(file, addr, len, prot, flag, offset >> PAGE_SHIFT);

out:

     return ret;
}

do_mmap()함수가 넘겨 받는 파라미터 값으로는 file 구조체와 주소, 할당하려는 공간의 크기를 가지는 len, 할당하는 공간에 대한 protection을 나타내는 prot, flag과 offset이 있다. 만약 len를 페이지 단위로 정렬했을 때, 이 값과 offset의 합이 원래의 offset과의 합보다 작은 경우에는 error로 -EINVAL을 돌려준다, 이제 offset에서 PAGE_MASK(=0xFFFFF000)을 NOT 한 값(0x00000FFF)에 AND시켜서 어떤 값이 있다면, do_mmap_pgoff()함수를 넘겨받은 파라미터 값과 offset을 PAGE_SHIFT(=12) 오른쪽으로 shift한 값을 넘겨주어 호출한다. 그렇지 않다면, 다시 error로 - EINVAL을 복귀 값으로 넘겨준다.


[출처] do_mmap()|작성자 빵꾸