Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

065
557
421925


[리눅스커널] 프로세스: do_task_dead() 함수 분석 4. 프로세스(Process) 관리

이어서 do_task_dead() 함수를 분석하겠습니다.

https://elixir.bootlin.com/linux/v4.19.30/source/kernel/sched/core.c
01 void __noreturn do_task_dead(void)
02 {
03 set_special_state(TASK_DEAD);
04 current->flags |= PF_NOFREEZE;
05 
06 __schedule(false);
07 BUG();
08 for (;;)
09 cpu_relax();
10 }

03번째 줄에서 set_special_state() 함수를 호출해 프로세스 상태를 TASK_DEAD 플래그로 바꿉니다. 04번째 줄에서는 프로세스 태스크 디스크립터의 flags 필드에 PF_NOFREEZE 플래그를 OR 연산으로 적용합니다.

---
current는 현재 실행 중인 프로세스 태스크 디스크립터 자료구조로서 task_struct 구조체 타입입니다.
---

06번째 줄에서는 __schedule(false) 함수를 호출해 스케줄링을 요청합니다. __schedule() 함수에 false를 전달하는 이유는 선점 스케줄링을 실행하지 않겠다는 의미입니다.

* 유튜브 강의 동영상도 있으니 같이 들으시면 좋습니다. 




#프로세스

프로세스 소개 
프로세스 확인하기  
프로세스는 어떻게 생성할까?  
유저 레벨 프로세스 실행 실습  
커널 스레드  
커널 내부 프로세스의 생성 과정   
프로세스의 종료 과정 분석  
태스크 디스크립터(task_struct 구조체)  
스레드 정보: thread_info 구조체  
프로세스의 태스크 디스크립터에 접근하는 매크로 함수  
프로세스 디버깅  
   * glibc의 fork() 함수를 gdb로 디버깅하기  



"혹시 궁금한 점이 있으면 댓글로 질문 남겨주세요. 아는 한 성실히 답변 올려드리겠습니다!" 

Thanks,
Austin Kim(austindh.kim@gmail.com)


# Reference: For more information on 'Linux Kernel';

디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 1

디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 2

 

핑백

덧글

댓글 입력 영역