프로세스

포스트: 54
Tags

Posts

54 posts

[리눅스커널][스케줄링] 커널 모드 중 인터럽트 발생으로 선점 스케줄링 실행

Guillermo Austin Kim|2019년 2월 9일

유저 프로세스 실행 도중 인터럽트가 발생하면 __irq_usr 이란 레이블에서 선점 스케줄링 조건을 점검합니다. 마찬가지로 커널 모드에서 어떤 코드가 실행 도중 인터럽트가 발생할 때 선점 스케줄링(Preemptive Scheduling)을 시도합니다. 이번 소절에서 커널 모드에서 인터럽트가 발생했을때 선점 스케줄링 세부 동작을 살펴봅니다. 다음 블록 다이어그램을 같이 봅시다. 커널 모드에서 코드 실행 중 인터럽트가 발생하면 __irq_svc 이란 인터럽트 벡터로 프로그램 카운터를 브랜치합니다. 위 블록 다이어그램은 커널 모드에서 프로세스가 실행 도중 선점 스케줄링되는 흐름도입니다.커널 모드에서 선점 스케줄링은 다음 과정으로 실행합니다. 1. 인터럽트가 발생해서 __irq_svc 인터럽트 벡터 실행

[리눅스커널][스케줄링] 유저 프로세스 실행 중 인터럽트 발생으로 선점 스케줄링

Guillermo Austin Kim|2019년 2월 9일

선점 스케줄링 실행 진입점 중 하나가 인터럽트를 핸들링 후 입니다. 이번 소절에서 유저 프로세스가 실행하던 도중 인터럽트가 발생했을 때 어떤 방식으로 선점 스케줄링(Preemption)이 시작하는지 살펴보겠습니다. 다음 블록 다이어그램을 같이 봅시다. 위 블록 다이어그램은 유저 레벨 프로세스가 실행 도중 선점 스케줄링되는 흐름도입니다.유저 레벨 프로세스 실행 도중 선점 스케줄링은 다음 과정으로 실행합니다. 1. 인터럽트가 발생해서 __irq_usr란 인터럽트 벡터 실행 2. 인터럽트 핸들러 실행으로 인터럽트 핸들링 마무리 3. __irq_usr 레이블에서 ret_to_user_from_irq 레이블 실행 4. 프로세스 struct thread_info 구조체 flags 필드를 점검해서 _TI

4.10 프로세스 디스크립터 접근 매크로 함수

Guillermo Austin Kim|2019년 2월 7일

리눅스 커널 코드를 읽으면 다음 매크로를 자주 볼 수 있습니다.+ current_thread_info()+ current 위 매크로를 활용해서 프로세스 태스크 디스크립터와 struct thread_info 구조체 필드 정보를 읽어 프로세스를 제어합니다. 4.10.1 current_thread_info()이전 절에서 프로세스 스택 최상단 주소에 struct thread_info 구조체에 프로세스 실행을 저장한다고 분석했습니다. current_thread_info() 매크로 함수는 프로세스가 어떤 함수를 실행하더라도 struct thread_info 구조체가 있는 스택 최상단 주소를 전달합니다. current_thread_info() 매크로 함수 구현부를 분석하기 전에 매크로 함수가 어느 코드에서 쓰는

[리눅스커널] 스케줄링: 우선순위(nice)란

Guillermo Austin Kim|2019년 2월 7일

nice는 유저 공간에서 설정한 프로세스 실행 우선 순위를 뜻합니다. 정수형인 nice 범위는 -20~19인데 이 값은 커널 공간에서 100~139 사이 값으로 변환되어 관리합니다. 이해를 돕기 위해 다음 그림을 함께 봅시다. 유저 공간에서 설정한 nice 값의 범위는 -20~19인데 커널 공간에서 100~139 사이 우선 순위로 변환됩니다. 커널 공간에서 RT 스케줄러 클래스에 등록한 RT 프로세스 우선 순위 범위는 0~99이고, CFS 스케줄러 클래스에서 구동하는 일반 프로세스 우선 순위 범위는 100~139입니다. 위 그림에서 유저 공간 Normal와 커널 공간 Normal 우선순위 사이에 NICE_TO_PRIO() 함수를 볼 수 있습니다. NICE_TO_PRIO() 함수는 유저 공간에서 설정된