[Linux][Kernel] 타이머(Timer) Overview
By Guillermo Austin Kim | 2017년 12월 9일 |
리눅스 커널에서 아주 중요한 Subsystem 중 하나인 타이머에 대해서 간단히 짚어 볼께요. init_timer아래 함수 콜로 do_init_timer() 함수에서 struct timer_list *timer 초기화를 수행해요.__init_timer((timer), 0)init_timer_key((_timer), (_flags), #_timer, &__key);do_init_timer(timer, flags, name, key); MIPS 아키텍쳐에서 아래와 같이 타이머를 세팅하는 코드가 있네요.static inline void ip32_power_button(void){// .. 생략.. blink_timer.data = POWERDOWN_FREQ; blink_timeout(POWERDOWN_
[리눅스커널] 스케줄링: __schedule() 함수와 'bool preempt' 인자
By Guillermo Austin Kim | 2020년 1월 15일 |
다음과 같이 __schedule() 함수의 구현부를 보면 'bool preempt' 인자를 전달한다. void __sched notrace __schedule(bool preempt){ struct task_struct *prev, *next; unsigned long *switch_count; struct rq_flags rf; 이번 시간에는 이 함수에 'bool preempt' 인자가 추가된 이력을 확인해보자. __schedule() 함수에 'bool preempt' 인자가 추가된 패치 출처는 다음과 같다.https://lkml.org/lkml/2015/9/30/100 패치 코드의 내용은 다음과 같다. From fc13aebab7d8f0d19d557c721a0f25cdf7ae9
[라즈베리파이] 프로세스 생성: _do_fork() copy_process() 함수 분석
By Guillermo Austin Kim | 2019년 1월 17일 |
이전 시간까지 유저 프로세스와 커널 프로세스가 어떤 흐름으로 생성되는지 살펴봤습니다.둘 다 _do_fork() 함수를 호출한다는 사실을 알 수 있습니다. 프로세스 생성 시 공통으로 실행하는 _do_fork() 함수 코드를 분석하면서 커널이 어떻게 프로세스를 생성하는지 살펴봅니다. _do_fork() 함수_do_fork() 함수을 분석하기 앞서 이 함수 동작을 분류해봅시다. 1단계: 프로세스 생성copy_process() 함수를 호출해서 프로세스를 생성합니다. 프로세스를 생성하는 세부 동작을 파악하려면 copy_process() 함수를 분석할 필요가 있습니다. 2단계: 생성한 프로세스 실행 요청copy_process() 함수를 호출해서 프로세스 생성을 마쳤으면 wake_up_new_task() 함수를
[Kernel][Crash] 워크큐(workqueue) 락업(2) at [0321]
By Guillermo Austin Kim | 2018년 4월 16일 |
[Kernel][Crash] 워크큐(workqueue) 락업(1) at [0321] http://rousalome.egloos.com/9974388코어 덤프에서 계속... 자 여기까지 커널 크래시가 발행한 원인까지 확인했습니다.그럼 CPU2에 워커풀에서 등록된 워커쓰레드를 살펴봐야 겠습니다. 워커쓰레드들은 워커 풀에 등록할 때 struct worker_pool.workers 멤버 링크드 리스트로 등록합니다.1 (struct worker_pool *) (struct worker_pool*)0xFFFFFFC63A339000 = 0xFFFFFFC63A339000 -> (2 (spinlock_t) lock = ((struct raw_spinlock) rlock = ((arch_spinlock_t)