커널

포스트: 228|조회수: 0|CIVILIZATION
Items

Posts

228 posts

[라즈베리파이] 프로세스: 태스크 디스크립터(프로세스 관계)

Guillermo Austin Kim|2019년 1월 29일

이전 시간에 유저 공간에서 생성한 모든 프로세스의 부모 프로세스는 init 이고 커널 공간에서 생성한 커널 스레드(프로세스)의 부모 프로세스는 kthreadd라고 했습니다. 태스크 디스크립터에서는 프로세스의 부모와 자식 관계를 상세히 알 수 있습니다. struct task_struct *real_parent; 프로세스를 생성한 부모 프로세스의 태스크 디스크립터 주소를 저장합니다. struct task_struct *parent; 부모 프로세스를 의미합니다. real_parent 란 멤버는 해당 프로세스를 생성해준 프로세스를 의미합니다. 그런데 자식 프로세스 입장에서 부모 프로세스가 소멸된 경우 부모 프로세스를 다른 프로세스로 지정합니다. 프로세스 계층 구조에서 지정한 부모 프로세스가 없을 경우 in

[라즈베리파이] 프로세스: 태스크 디스크립터(프로세스 식별/프로세스 상태)

Guillermo Austin Kim|2019년 1월 27일

프로세스를 식별하는 멤버들을 살펴 보겠습니다. char comm[TASK_COMM_LEN]; comm은 TASK_COMM_LEN 크기 배열이며 프로세스 이름을 저장합니다. "ps -ely"란 명령어를 입력하면 다음과 같이 systemd, kthreadd 그리고 kworker/0:0H가 보입니다.root@raspberrypi:/home/pi # ps -ely1 S UID PID PPID C PRI NI RSS SZ WCHAN TTY TIME CMD2 S 0 1 0 0 80 0 5964 7007 SyS_ep ? 00:00:02 systemd3 S 0 2 0 0 80 0 0 0 kt

[리눅스커널] Crash: 비트 플립 @profile_tick()

Guillermo Austin Kim|2019년 1월 26일

이번에는 비트 플립으로 발생한 커널 패닉 코어 덤프 분석 과정을 소개합니다. 다음은 T32로 커널 패닉이 발생했을 때 잡은 콜스택입니다.01 -000|machine_restart(?)02 -001|arch_local_irq_enable(inline)03 -001|panic(fmt = 0xC0EF195A)04 -002|oops_end(inline)05 -002|die(str = 0xC017409E, ?, err = -590234666)06 -003|do_undefinstr(regs = 0xDCD1BCA8)07 -004|__und_svc_fault(asm)08 -->|exception09 -005|profile_tick(type = -590234136)10 -006|tick_sched_timer(tim

[라즈베리파이] 프로세스: 태스크 디스크립터(struct task_struct) 소개

Guillermo Austin Kim|2019년 1월 26일

태스크 디스크립터(struct task_struct)프로세스 속성 정보를 표현하는 가장 중요한 자료구조는 무엇일까요? 정답은 태스크 디스크립터이며 자료구조는 struct task_struct입니다. 리눅스 커널에서 가장 중요한 자료구조이며 리눅스 디바이스 드라이버와 커널 코드를 보는 분들은 모두 잘 알아야 할 내용입니다. TCB(Task Control Block)란 용어 들어본 적 있나요? 임베디드 시스템에서 태스크 혹은 프로세스 정보를 표현하는 자료구조입니다. 리눅스 커널에서 프로세스 정보를 표현하는 자료 구조는 뭘까요? 여기서 임베디드 시스템에서 말하는 태스크와 리눅스 커널의 프로세스는 같은 개념으로 봐야 합니다. 프로세스마다 자신의 속성을 저장하는 태스크 디스크립터가 있는 것입니다.정답은 stru