라즈베리파이

포스트: 191|조회수: 0|ARTIFACT
Items

Posts

191 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월 22일

커널 공간에서 시스템 리소스(메모리, 전원) 관리를 수행하는 프로세스를 커널 스레드라고 합니다. 커널 스레드는 어떻게 생성할까요? 다음과 같이 kthread_create() 함수에 적절한 인자를 전달하면 됩니다. 커널 스레드를 생성하는 코드를 같이 봅시다. [https://elixir.bootlin.com/linux/v4.14.70/source/drivers/vhost/vhost.c#L334]1 long vhost_dev_set_owner(struct vhost_dev *dev)2 {3 struct task_struct *worker;4 int err;...5 /* No owner, become one */6 dev->mm = get_task_mm(current);7 worker = kthread_c

[리눅스커널] 프로세스 - 유저 레벨 프로세스 생성 시 _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