[Kernel][Crash] 워크큐(workqueue) 락업(3) at [0321]
By Guillermo Austin Kim | 2018년 4월 17일 |
[Kernel][Crash] 워크큐(workqueue) 락업(1) at [0321] [Kernel][Crash] 워크큐(workqueue) 락업(2) at [0321] 코어 덤프에서 계속... worker_pool_idr 전역 변수에 접근하면 (*(worker_pool_idr.top)).ary 각 CPU별 워커풀 인스턴스가 있다고 했죠. (static struct idr) worker_pool_idr = ( (struct idr_layer *) hint = 0xFFFFFFC6307B9308, (struct idr_layer *) top = 0xFFFFFFC6307B9308 -> ( (int) prefix = 0x0, (int) layer = 0x0, (stru
[라즈베리파이] 시스템 콜 - 매개 변수 점검(시스템 콜 핸들러)
By Guillermo Austin Kim | 2018년 11월 26일 |
리눅스 커널 시스템 콜 핸들러 인터페이스 함수를 열어 보면 수 많은 예외 처리 코드를 볼 수 있습니다. 유저 모드에서 시스템 콜을 호출할 때 잘못된 인자(스트링 갯수, 메모리 주소)를 전달할 수 있기 때문입니다. 먼저 write() 이라는 리눅스 시스템 저수준 함수를 살펴보겠습니다. write() 함수를 호출할 때는 다음 6번 째 줄 코드와 같이 세 가지 인자를 전달해야 합니다.[https://android.googlesource.com/platform/system/core/+/master/init/uevent_listener.cpp]1 ListenerAction UeventListener::RegenerateUeventsForDir(DIR* d,2
[라즈베리파이] 커널 타이머 -동적 타이머는 누가 언제 호출하나? (3)
By Guillermo Austin Kim | 2018년 8월 29일 |
커널 시스템 타이머 전체 흐름에서 4단계를 분석할 차례입니다. [그림 ] 커널 타이머 전체 흐름도 4단계마지막 4단계인 커널 시스템 타이머가 동적 타이머를 종료하고 동적 타이머 핸들러 함수를 호출하는 동작을 살펴보겠습니다. 주석문을 지우고 본 run_timer_softirq() 함수 구현부는 다음과 같습니다. 1 static __latent_entropy void run_timer_softirq(struct softirq_action *h)2 {3struct timer_base *base = this_cpu_ptr(&timer_bases[BASE_STD]);4base->must_forward_clk = false;56__run_timers(base);7if (IS_ENABLED(
[리눅스커널] 스케줄링: 스케줄링 정책이란
By Guillermo Austin Kim | 2019년 2월 7일 |
스케줄링은 실행 대기 상태에 있는 프로세스 목록 중 하나를 선택해서 CPU를 실행하는 동작입니다. 여기서 한 가지 의문이 생깁니다. | 실행 대기 상태 프로세스들 중 하나를 선택한 후 CPU 실행 상태로 어떤 방식으로 바꿔줄까? 스케줄링 세부 구현을 할 때 다음 그림과 같이 Process A ~ Proces D 프로세스를 어떤 방식으로 선택해서 CPU에 실행할지 결정을 해야 하는 문제가 있는 것입니다. 스케줄링 동작을 구현할 때 어떤 프로세스를 어떤 방식으로 선택하느냐 중요한 설계 요소입니다. 이를 스케줄링 정책이라고 이야기를 합니다. 스케줄링 정책은 크게 다음과 같이 분류 할 수 있습니다. + 우선 순위가 높은 프로세스가 계속 CPU를 점유하면서 실행합니다.+ 실행 대기 상태에 있는 프로세스들