KERNEL
Posts
183 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 매크로 (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이란 함수를 호출하면 커널 크래시가 발생하는 것이지요.
[Linux][Kernel] WARN 매크로
WARN 매크로는 코드 흐름에 소프트웨어적인 오류가 있을 때 실행합니다. 그래서 소스 코드를 보다가 WARN() 매크로를 보면 뭔가 논리적인 오류가 있는 조건이라고 봐야겠죠. WARN 매크로를 어떤 함수에서 실행되면 시스템 정보를 커널 로그로 출력합니다.1. 콜스택2. 현재 수행 중인 프로세스 정보: CPU번호, 프로세스 이름, pid3. 함수 이름과 라인 정보 하지만 커널 시스템에 심각한 오류가 있는 상태가 아니라 판단해서 에러 메시지만 출력하고 시스템을 계속 구동시킵니다. 그럼 새로운 드라이버 코드를 짰는데 WARN 매크로가 실행되면 어떻게 해야 할까요? 시스템에 치명적인 에러는 아니라 그냥 둬야 할까요? 그렇지 않습니다. WARN 매크로는 시스템에 뭔가 논리적인 오류가 있는 상태이므로 반드시 잡아



![[1년 전 오늘] 250608 인천 무의도 덕점방파제 바다루어낚시 - 장대, 광어](https://img.zoomtrend.com/2026/06/10/1781084366-20250608122254.jpg)
![[CV] [Comi] '終末のハーレム ファンタジア' (종말의 하렘 판타지아) 17권. 그동안 SAVAN에 무슨 일이 있었던 거냐](https://img.zoomtrend.com/2026/06/10/1781084386-ECA484EBA6ACEC9790.jpg)