[라즈베리파이] 스케줄링: 스케줄링 클래스란
By Guillermo Austin Kim | 2019년 2월 3일 |
리눅스 커널에서는 기본으로 5개의 스케줄러를 제공합니다. + stop 스케줄러, deadline 스케줄러, RT 스케줄러, CFS 스케줄러, 아이들 스케줄러 리눅스 커널은 5개의 스케줄러를 프로세스가 유연하게 쓸수 있도록 스케줄러 세부 동작을 모듈화했습니다. 이를 스케줄러 클래스라고 하며 5개의 스케줄러를 스케줄러 클래스로 정의합니다. 프로세스는 자신이 실행할 스케줄러 클래스 정보를 갖고 있습니다. 즉, 모든 프로세스들은 태스크 디스크립터에 자신이 선택하거나 부모 프로세스로부터 물려 받은 스케줄러 클래스 정보를 갖고 있는 것입니다. 대부분 일반 프로세스들은 CFS 스케줄러 클래스에 등록해서 CFS 스케줄러로 스케줄링됩니다. 대부분 일반 프로세스들은 CFS 스케줄러 클래스에 등록해서 CFS 스케줄러로 스
[라즈베리파이]인터럽트(4) - 인터럽트 디스크립터란
By Guillermo Austin Kim | 2018년 2월 13일 |
인터럽트 디스크립터는 디바이스 드라이버가 등록한 인터럽트 속성을 표현합니다. 각 디바이스 드라이버에서 설정한 인터럽트 마다 아래 자료 구조를 커널이 생성합니다. 자료 구조는 아래와 같습니다.struct irq_desc { struct irq_common_data irq_common_data; struct irq_data irq_data; unsigned int __percpu *kstat_irqs; irq_flow_handler_t handle_irq;#ifdef CONFIG_IRQ_PREFLOW_FASTEOI irq_preflow_handler_t preflow_handler;#endif struct irqaction *action; /* IRQ action list */ unsigned int sta
[라즈베리파이] Soft IRQ 서비스 및 서비스 핸들러 등록(코드 분석)
By Guillermo Austin Kim | 2018년 7월 2일 |
# 인터럽트 후반부 처리1 IRQ Thread(threaded IRQ) 란 2. 인터럽트 후반부 처리(Bottom Half) 소개3. IRQ Thread는 언제 생성할까?[1] 4. IRQ Thread는 언제 생성할까?[2] 5. ksoftirqd 쓰레드란6. Soft IRQ 소개7. Soft IRQ 서비스 및 서비스 핸들러 등록(코드 분석) Soft IRQ를 설명하면서 낯선 용어를 설명했는데, 이제부터 그 의미를 하나하나씩 살펴 보겠습니다. Soft IRQ 서비스란 용어부터 배워볼까요? Soft IRQ 서비스를 빨리 이해하려면 코드를 먼저 봐야 합니다. Soft IRQ 서비스는 아래 enum으로 정의한 코드와 같습니다.[include/linux/interrupt.h]enum{ HI_SOFTIRQ=0
[라즈베리파이] 동기화 - 스핀락(spinlock): spin_unlock() 함수 분석
By Guillermo Austin Kim | 2018년 12월 23일 |
이번에는 스핀락을 해제하는 spin_unlock() 함수 코드를 살펴보겠습니다. spin_unlock() 함수도 spin_lock() 함수와 마찬가지로 여러 함수로 치환돼 do_raw_spin_unlock() 함수를 호출합니다.[https://elixir.bootlin.com/linux/v4.14.43/source/include/linux/spinlock.h]static __always_inline void spin_unlock(spinlock_t *lock){raw_spin_unlock(&lock->rlock);} void __lockfunc _raw_spin_unlock(raw_spinlock_t *lock){__raw_spin_unlock(lock);} static inline v