티스토리 뷰
kernel thread는 프로세스로서 프로세스와 마찬가지로 프로세스 ID(pid)가 할당되며 자신만의 실행 컨텍스트를 가집니다. thread의 특징은 오직 커널 공간에서만 존재(커널 코드를 자유롭게 부를 수 있다는 장점을 의미)하고 주소 공간을 가지지 않으며 다른 Kernel Thread에 의해서만 생성 가능하다는 점 입니다. 또한 프로세스 이므로 사용자 프로세스와 마찬가지로 시스템 콜을 부를 수가 있습니다. 즉 Kernel Thread는 커널 영역과 시스템 콜에 자유롭게 접근할 수 있는 커널 모드에서 동작하는 프로세스인 것입니다.
이러한 thread를 생성하는 루틴을 알아보도록 합니다. 우선 Kernel thread를 만들 때 이용되는 함수 원형은 아래와 같습니다.
int kernel_thread (int (*fn)(void *), void *arg, unsigned long flags);
예제코드int mythread(void *arg)
{
for (;;) {
/* 내용 */
interruptible_sleep_on_timeout (&wq, HZ * 30) // 30 초마다 깨어나서 작업 수행
}
return 0;
}
kernel_thread(mythread, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
flags 의미
CLONE_VM : 부모와 자식 프로세스가 동일한 메모리 공간에서 실행된다.
CLONE_FS : 부모와 자식 프로세스가 동일한 파일 시스템 정보를 공유한다. 이 파일 시스템 정보로는 프로세스의
루트 디렉토리와 프로세스의 현재 디렉토리를 나타내는 cwd(current working directory), 파일을
만들 때 기본 접근권한인 umask 가 있다.
CLONE_FILES : 부모와 자식 프로세스가 동일한 파일 기술자 테이블을 공유한다. 프로세스가 파일을 열 때마다
프로세스의 파일 기술자 테이블에 파일 기술자가 추가되는데, 이를 지정하면 자식 프로세스는 똑
같은 파일 기술자를 상속받게 된다.
CLONE_SIGHAND : 부모와 자식 프로세스가 동일한 시그널 핸들러를 공유한다.
CLONE_FS : 부모와 자식 프로세스가 동일한 파일 시스템 정보를 공유한다. 이 파일 시스템 정보로는 프로세스의
루트 디렉토리와 프로세스의 현재 디렉토리를 나타내는 cwd(current working directory), 파일을
만들 때 기본 접근권한인 umask 가 있다.
CLONE_FILES : 부모와 자식 프로세스가 동일한 파일 기술자 테이블을 공유한다. 프로세스가 파일을 열 때마다
프로세스의 파일 기술자 테이블에 파일 기술자가 추가되는데, 이를 지정하면 자식 프로세스는 똑
같은 파일 기술자를 상속받게 된다.
CLONE_SIGHAND : 부모와 자식 프로세스가 동일한 시그널 핸들러를 공유한다.
'개발 > Linux' 카테고리의 다른 글
데이터 종류에 따른 메모리 영역 (0) | 2011.12.22 |
---|---|
gdb 옵션 (0) | 2011.12.20 |
offsetof 매크로 (0) | 2011.12.05 |
Kernel ipt_get_entries struct .. size (0) | 2011.12.04 |
__alignof__, aligned 매크로 (0) | 2011.12.02 |
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
- Total
- Today
- Yesterday