1. 프로세스가 수행되는 모드
1) 사용자 모드
- 커널 모드로 진입하기 위해서는 시스템 콜 함수 호출
- 사용자 메모리 공간
* 사용자 모드에서 프로세스가 사용하는 메모리 공간
* 각 프로세스마다 서로다른 물리적 메모리 공간을 가리킴
2) 커널 모드(수퍼바이저 모드)
- 커널 메모리 공간
* 커널메모리 공간에서 프로세스가 사용하는 메모리 공간
* 모든 프로세스가 동일한 물리적 공간을 가리킴
2. 사용자 메모리와 커널메모리 사이에 데이터 전송 함수들
1) #include <asm/uaccess.h> 포함
- int verify_area(int type, const void _user *addr, unsigned long size);
* 사용자 메모리 공간의 유효성 검사
- int copy_to_user(void _user *to, const void *from, unsigned long n);
* 커널 메모리 블록 데이터를 사용자 메모리 블록 데이터에 쓰기
- int copy_from_user(void *to, const void _user *from, unsigned long n);
* 사용자 메모리 블록 데이터를 커널 메모리 블록 데이터에 쓰기
- int get_user(x, ptr);달달
* 사용자 공간의 데이터를 읽기
- int put_user(x, ptr);
* 커널변수 값을 사용자 공간에 쓰기
3. 예제
1) verify_area()
ssize_t xxx_read(struct file *filp, const char *buf, size_t count, loff_t *f_pos)
{
int err;
werify_area(VERIFY_WRITE, (void *)arg, size);
...
}
2) copy_to_user()
ssize_t xxx_read(struct file *filp, const char *buf, size_t count, loff_t *f_pos)
{
char *buff;
int err;
buff = kmalloc(count, GFP_KERNEL);
copy_to_user(buf, buff, count);
kfree(buff);
}
'Linux > Kernel Analysis' 카테고리의 다른 글
커널영역에서 파일 입출력 (0) | 2013.07.10 |
---|---|
커널영역 파일 입출력 (1) | 2013.07.10 |
프로세스의 전체 실행시간 확인하기. (0) | 2013.05.15 |
부팅시 쉘 스크립트등 강제 실행하기. (0) | 2013.05.11 |
모듈 빌트인 방법 및 확인 (0) | 2013.05.10 |