커널

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

Posts

228 posts

[라즈베리파이] 프로세스 - 기본 유저레벨 프로세스 생성 실습 및 ftrace 로그 분석(2/2)

Guillermo Austin Kim|2018년 10월 25일

커널 공간에서 raspbian_proc 이란 프로세스가 어떤 코드 흐름으로 생성하고 종료했는지 ftrace 로그로 알아봅시다. 분석할 전체 ftrace 로그는 다음과 같습니다.1 bash-895 [003] .... 909.253260: SyS_clone+0x14/0x38 3 bash-895 [003] .... 909.253298: _do_fork+0x14/0x3ec 5 lxpanel-730 [002] d.h. 909.25

[리눅스커널] 프로세스 - 기본 유저레벨 프로세스 생성 실습 및 ftrace 로그 분석(1/2)

Guillermo Austin Kim|2018년 10월 22일

다시 라즈베리파이에서 X-terminal 프로그램을 실행해서 셸을 엽시다. root@raspberrypi:/boot# ps -ely | grep bashS UID PID PPID C PRI NI RSS SZ WCHAN TTY TIME CMDS 1000 541 443 0 80 0 4024 1645 poll_s tty1 00:00:00 bashS 1000 880 878 0 80 0 4008 1628 wait pts/0 00:00:00 bashS 0 977 972 0 80 0 3284 1416 wait pts/0 00:00:00 bashS 1000 993 989 0 80

[리눅스커널] 프로세스 - 유저 레벨 프로세스 생성 시 _do_fork() 함수 흐름

Guillermo Austin Kim|2018년 10월 21일

먼저 유저 레벨 프로세스는 어떻게 생성할까요? 저수준 리눅스 어플리케이션 프로그램으로 fork() 함수를 호출하면 리눅스에서 제공하는 라이브러리 도움을 받아 커널에게 프로세스 생성 요청을 합니다. 여기까지가 유저 모드에서 프로세스를 요청하는 단계입니다. 리눅스에서 제공하는 라이브러리는 시스템 콜을 발생하고 리눅스 커널에서는 fork() 함수에 대응하는 시스템 콜 핸들러인 sys_clone() 함수를 호출합니다. 먼저 sys_clone() 함수 코드를 봅시다. [https://elixir.bootlin.com/linux/v4.14.70/source/kernel/fork.c#L2020]1 #ifdef __ARCH_WANT_SYS_CLONE2 #ifdef CONFIG_CLONE_BACKWARDS3 SYSCAL

[리눅스커널] 프로세스는 어떻게 생성하나? - _do_fork() 함수 호출

Guillermo Austin Kim|2018년 10월 21일

프로세스에 대한 이해를 하려면 프로세스가 어떻게 생성되는 지 알면 좋습니다. 프로세스 생성 과정에서 프로세스를 관리하는 자료구조 관계를 알 수 있기 때문입니다. 리눅스에서 구동되는 프로세스는 크게 유저 레벨에서 생성된 프로세스와 커널 레벨에서 생성된 프로세스가 있습니다. 유저 레벨에서 생성된 프로세스는 유저 공간에서 프로세스를 생성하는 라이브러리(glibc) 도움을 받아 커널에게 프로세스 생성 요청을 합니다. 커널 프로세스는 kthread_create() 함수를 호출해서 커널 내부에서 프로세스를 생성합니다. 커널 프로세스는 커널 스레드라고 부르며 커널 내부에서 스레드를 직접 관리합니다. 공통으로 리눅스에서 생성된 프로세스는 _do_fork() 함수를 호출합니다. 프로세스 생성하는 핵심함수는 _do_