Posts
10 posts[Linux][Kernel] current 매크로 (3)
[Linux][Kernel] current 매크로 (2) 에서 계속...http://rousalome.egloos.com/9976545 여기까지 처리 과정을 정리하면 current_thread_info 매크로 함수에 접근해서 현재 실행 중인 프로세스의 태스크 디스크립터 정보를 포인터 형태로 얻어온다 알 수 있습니다. 그런데 current_thread_info 매크로 함수 코드 분석은 생소한 용어들이 많이 보여 이해하기가 어렵습니다. 그 이유는 이 코드가 상당히 많은 공학적 의미를 담고 있기 때문입니다. 그럼 조금 더 깊이 current 매크로를 분석 할까요? 첫 번째 코드를 함께 볼까요? 이 코드는 현재 구동 중인 프로세스의 스택 주소를 current_stack_pointer 변수로 가져오는 명령어입니다
[Linux][Kernel] current 매크로 (2)
[Linux][Kernel] current 매크로 (1) 에서 계속...http://rousalome.egloos.com/9976442 그럼 current란 코드의 정체를 조금 더 알아볼까요?이번에도 패치 코드 하나를 소개할게요. 다음 루틴은 Wait Queue 관련 함수들인데요.diff --git a/kernel/sched/wait.c b/kernel/sched/wait.cindex 9453efe..a1371a9 100644--- a/kernel/sched/wait.c2+++ b/kernel/sched/wait.c@@ -76,6 +76,16 @@ static void __wake_up_common(wait_queue_head_t *q, unsigned int mode, } } 1 +void
[Linux][Kernel] current 매크로 (1)
리눅스 커널 코드를 읽다가 current란 매크로를 보신 적이 있나요? 아직 없다고요? 그럼 조금 코드를 읽다 보면 만나게 될 겁니다. 왜냐면 리눅스 커널 코드 구석구석 이 매크로를 쓰고 있거든요. 그럼 current 매크로는 어떤 동작을 할까요? current란 매크로는 현재 구동 중인 프로세스의 태스크 디스크립터 정보를 담고 있습니다. 그럼 current 매크로가 포함된 코드를 열어 볼까요? 다음 파일 디스크립터를 할당하는 get_unused_fd_flags 함수를 잠깐 볼게요.1 int get_unused_fd_flags(unsigned flags)2 {3 return __alloc_fd(current->files, 0, rlimit(RLIMIT_NOFILE), flags);4 }5 EXPO
[Linux][Kernel] BUG 매크로
BUG 매크로는 보통 소프트웨어적으로 심각한 오류 상태라 더는 실행할 수 없다고 판단할 때 호출 합니다. 혹시 소프트웨어 공학에서 ASSERT란 단어 들어 보신 적 있나요? 보통 포인터가 NULL일 때 ASSERT를 호출하죠. 예제 코드는 다음과 같습니다.void trace_kernel_process_name(void *param){ if( !param ) ASSERT(1); printk(“ process name: %s pid: %d \n”, current->comm, current->pid)} 리눅스 커널에서는 ASSERT 대신 BUG()를 씁니다. 그리고 panic이란 함수도 비슷한 역할을 수행합니다.BUG나 panic이란 함수를 호출하면 커널 크래시가 발생하는 것이지요.



