[리눅스커널] 스케줄링: CFS 스케줄러를 이루는 주요 개념 알아보기
By Guillermo Austin Kim | 2019년 7월 8일 |
CFS(Completely Fair Scheduler)는 2.6.23 커널 버전 이후 적용된 리눅스의 기본 스케줄러입니다. CFS이란 용어를 그대로 풀면 ‘완벽하게 공정한 스케줄러’라고 해석할 수 있습니다. 즉, 런큐에서 실행 대기 상태로 기다리는 프로세스를 공정하게 실행하도록 기회를 부여하는 스케줄러입니다. 이번 절에서는 CFS 알고리즘의 개념을 알아보고 코드 분석으로 세부 동작을 살펴보겠습니다. CFS 스케줄러를 이루는 주요 개념 알아보기CFS는 실행 대기 상태인 프로세스들을 우선 순위에 따라 최대한 공정하게 실행하는 스케줄러입니다. CFS 세부 동작과 알고리즘을 이해하려면 다음과 같은 개념을 파악할 필요가 있습니다. - 타임 슬라이스 - 우선순위 - 가상 실행 시간(vruntime) 이번
[리눅스커널] 인터럽트 후반부 처리: IRQ 스레드 핸들러인 irq_thread() 함수 분석
By Guillermo Austin Kim | 2020년 4월 25일 |
![[리눅스커널] 인터럽트 후반부 처리: IRQ 스레드 핸들러인 irq_thread() 함수 분석](https://img.zoomtrend.com/2020/04/25/a0386257_5ea3804a5a10f.png)
커널에서 지원하는 wake_up_process() 함수를 사용해 커널 스레드를 깨우면 스케줄러에 의해 커널 스레드는 실행을 시작합니다. 이 때 커널 스레드의 스레드 핸들 함수가 호출되며 스레드의 시나리오에 따라 정해진 동작을 수행합니다. 마찬가지로 IRQ 스레드의 스레드 핸들 함수는 irq_thread() 입니다. 따라서 IRQ 스레드가 깨어나면 irq_thread() 함수가 호출됩니다. 이번 시간에는 IRQ 스레드를 깨우면 실행하는 irq_thread() 함수를 살펴보겠습니다. 먼저 IRQ 스레드를 깨우면 실행하는 irq_thread() 함수를 보겠습니다. static int irq_thread(void *data)2 {3struct callback_head on_exit_work;4stru
[리눅스커널][스케줄링] 컨택스트 스위칭이란 무엇인가
By Guillermo Austin Kim | 2019년 3월 3일 |
컨택스트 스위칭이란 무엇인가컨택스트 스위칭 세부 동작을 알기 위해서 context_switch() 함수를 분석할 필요가 있습니다. context_switch() 함수를 분석하기 전 컨택스트 스위칭의 개념을 소개하겠습니다. 먼저 컨택스트 스위칭이란 용어에 대해서 살펴봅시다. 컨택스트 스위치란 용어는 컨택스트 + 스위치란 단어의 합성어입니다. 컨택스트를 바꾼다는 의미입니다. 여기서 컨택스란 용어는 무슨 뜻일까요? 컨택스트는 프로세스가 실행 중인 그 자체를 의미합니다. 이 표현은 추상적이라 이해하기 어렵습니다. 프로세스 실행 그 자체를 어떻게 표현할까요? 그것은 레지스터 세트입니다. CPU 레지스터 세트가 프로세스 실행 자체를 표현하기 때문입니다. 다음 테이블을 보면서 컨택스트 스위칭에 대한 개념을 알아봅시
[RISC-V] 익셉션 벡터 핸들러 코드 산책 - 리눅스 커널
By Guillermo Austin Kim | 2020년 9월 27일 |
이번 시간에는 RISC-V 기반 리눅스 커널에 구현된 익셉션 벡터 테이블과 익셉션 벡터 핸들러를 분석하겠습니다. 익셉션 벡터 핸들러를 호출하는 코드 확인하기 다음은 익셉션 벡터 핸들러의 구현부입니다. RISCV_PTR do_trap_insn_misaligned RISCV_PTR do_trap_insn_fault RISCV_PTR do_trap_insn_illegal RISCV_PTR do_trap_break RISCV_PTR do_trap_load_misaligned RISCV_PTR do_trap_load_fault RISCV_PTR do_trap_store_misaligned RISCV_PTR do_trap_store_fault RISCV_PTR do_trap_ecall_u /* system cal