Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

493
557
422263


태그 : Linux 요약보기전체보기목록닫기

1 2 3 4 5 6 7 8 9 10 다음

[리눅스커널] 인터럽트 후반부 처리 기법 종류 및 소개

이번 장에서는 리눅스 커널이 Bottom Half을 처리하는 대표적인 기법인 IRQ 스레드와 Soft IRQ 기법과 태스크릿을 다룹니다. 워크큐는 워크큐를 다루는 장에서 살펴볼 예정입니다. 세 가지 기법 인터럽트 후반부 처리하는 방식이 조금씩 다릅니다. 하지만 인터럽트 핸들러에서 해야 할 일을 2 단계로 나눈다는 점은 같습니다. 4가지 기법의 ...

[리눅스커널] 인터럽트 후반부 처리: Top Half/Bottom Half 란 무엇일까?

앞서 살펴본 바와 같이 인터럽트 컨택스트에서 인터럽트 핸들링을 빠른 시간에 마무리해야 합니다. 또한 시간이 오래 걸리는 함수를 호출하면 시스템은 커널 패닉으로 시스템이 오동작 할 수 있습니다.여기서 한 가지 걱정이 생깁니다.     인터럽트가 발생한 후 인터럽트 핸들러에서 처리할 일이 많을 때는 어떻게 해야 할까?이럴 때 해...

[리눅스커널] 워크큐: 워커 쓰레드 핸들 worker_thread() 함수 분석

[리눅스커널] 워크큐: 워커 스레드란

워커 스레드는 워크를 실행하는 커널 스레드입니다. 이번 절에서는 워커 스레드가 무엇이고 이를 어떤 방식으로 생성하고 실행하는지 살펴보겠습니다.

[리눅스커널] 워크큐: 워커 쓰레드는 누가 언제 생성하나?

워커와 워커 쓰레드의 개념부터 정리하고 워커 쓰레드 생성에 대해 알아봅시다. 워커 쓰레드는 커널 쓰레드의 한 종류로 워크를 실행하는 쓰레드입니다. 쓰레드 핸들 함수는 worker_thread() 입니다.처음 커널 쓰레드를 분석할 때 먼저 쓰레드 핸들 함수를 분석해야 합니다. 쓰레드를 어떤 과정으로 실행 및 제어하는지 알 수 있기 때문입니다.워커...

[리눅스커널] 워크큐: queue_work_on() 함수 분석

schedule_work() 함수를 호출하면 어떻게 워크를 워크큐에 큐잉하는지 이제부터 살펴보겠습니다. schedule_work() 함수를 호출하면 queue_work_on() 함수를 호출하니 먼저 schedule_work() 함수를 보겠습니다.[/include/linux/workqueue.h]1 static inline bool schedule_wor...

[리눅스커널] 워크큐: process_one_work() 함수 분석

우선 process_one_work() 함수 전체 코드를 보겠습니다.1 static void process_one_work(struct worker *worker, struct work_struct *work)2 __releases(&pool->lock)3 __acquires(&pool->lock)4 {5 struct pool_...

[리눅스커널] 워크큐: wake_up_worker() 함수 분석

다음은 워크큐에서 가장 중요한 워커 쓰레드를 깨우는 wake_up_worker() 함수를 살펴보겠습니다.[https://elixir.bootlin.com/linux/v4.14.43/source/kernel/workqueue.c]1 static void wake_up_worker(struct worker_pool *pool)2 {3 struct worke...

[리눅스커널] 워크큐: find_worker_executing_work() 함수 분석

이번에는 find_worker_executing_work() 함수를 분석하겠습니다.1 static struct worker *find_worker_executing_work(struct worker_pool *pool,2  struct work_struct *work)3 {4 struct worker *worker;56 hash_for...

[리눅스커널] 워크큐: set_work_pwq() 함수 분석

struct work_struct.entry를 워커 풀에 등록하기 직전 struct work_struct.data 멤버를 WORK_STRUCT_PWQ 로 저장합니다.static void set_work_pwq(struct work_struct *work, struct pool_workqueue *pwq,  unsigned long extra...
1 2 3 4 5 6 7 8 9 10 다음