일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Process
- 별
- 미디어학부
- wine
- 운영체제
- 우분투
- logo
- 정기철
- 학복위
- Android
- Linux
- 리눅스
- 숭실대
- Lock
- 커널
- 안드로이드
- 쓰레드
- 로고
- 별지기
- kernel
- 프로세스
- Signal
- 파일io
- 컴퓨터시스템개론
- 학생복지위원회
- 태그를 입력해 주세요.
- 로고 프로그램
- 컴시
- 와인
- 함수
- Today
- Total
두근두근이야기
do_mmap 본문
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을 복귀 값으로 넘겨준다.
'IT > IT ::Advanced SystemProgramming' 카테고리의 다른 글
pt_regs, regs값 ebx를 임의로 바꾼다면? (0) | 2013.04.30 |
---|---|
flush_old_exec() (0) | 2013.04.29 |
linux pid관리 (0) | 2013.04.27 |
get_fs(), set_fs() (0) | 2013.04.27 |
효율적인 페이지 단위 점진적 검사점의 설계 및 구현 (0) | 2013.04.27 |