라즈베리파이

포스트: 191|조회수: 0|ARTIFACT
Items

Posts

191 posts

[리눅스커널] 스케줄링: 우선순위(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() 함수는 유저 공간에서 설정된

[리눅스커널] 스케줄링: 스케줄링 정책이란

Guillermo Austin Kim|2019년 2월 7일

스케줄링은 실행 대기 상태에 있는 프로세스 목록 중 하나를 선택해서 CPU를 실행하는 동작입니다. 여기서 한 가지 의문이 생깁니다. | 실행 대기 상태 프로세스들 중 하나를 선택한 후 CPU 실행 상태로 어떤 방식으로 바꿔줄까? 스케줄링 세부 구현을 할 때 다음 그림과 같이 Process A ~ Proces D 프로세스를 어떤 방식으로 선택해서 CPU에 실행할지 결정을 해야 하는 문제가 있는 것입니다. 스케줄링 동작을 구현할 때 어떤 프로세스를 어떤 방식으로 선택하느냐 중요한 설계 요소입니다. 이를 스케줄링 정책이라고 이야기를 합니다. 스케줄링 정책은 크게 다음과 같이 분류 할 수 있습니다. + 우선 순위가 높은 프로세스가 계속 CPU를 점유하면서 실행합니다.+ 실행 대기 상태에 있는 프로세스들

5.4.3 인터럽트 핸들러 등록 시 플래그 설정

Guillermo Austin Kim|2019년 2월 6일

5.4.3 인터럽트 핸들러 등록 시 플래그 설정이 내용을 다루기 전에 인터럽트 신호에 대해서 조금 살펴보겠습니다. 가끔 인터럽트가 제대로 안 올라온다거나 디바이스 드라이버를 처음 올려서 기본 동작을 확인할 때 오실로스코프 장비로 인터럽트 파형을 측정합니다. 이럴 때 가끔 하드웨어 개발자와 분쟁이 생기는데요. 인터럽트을 발생시키는 하드웨어에 노이즈가 껴서 제대로 인터럽트 신호를 제대로 전달을 못 하면 드라이버에서 인터럽트를 제대로 처리하지 않는 것처럼 보일 때가 있거든요. 가끔은 인터럽트 신호가 엄청나게 자주 발생해서 시스템 오동작을 유발할 때도 있습니다. 이를 리눅스 커널 커뮤니티에서 IRQ Storm이라고 합니다. 이렇게 인터럽트 동작에 조금이라도 의문이 생기면 인터럽트 파형을 측정하셔서 고생 덜하시길

[라즈베리파이] 스케줄링: 프로세스 상태 변화 관리

Guillermo Austin Kim|2019년 2월 6일

프로세스 상태 변화프로세스 상태 변화에 대해 알아보겠습니다. 프로세스 상태를 아는 것 보다 프로세스 상태가 변경될 때 세부 동작을 이해하는 것이 더 중요합니다. [1] 실행 대기 -> CPU실행 중프로세스가 생성된 다음 바로 TASK_RUNNING(실행 대기) 상태로 바뀌면서 자신을 런큐에 Enqueue 합니다. 스케줄러가 RUNNING_TASK(실행 대기) 프로세스 중에서 우선 순위가 가장 높은 프로세스를 선택한 다음 CPU에서 실행시킵니다. 프로세스가 CPU를 점유하면서 실행하기 위해서 먼저 TASK_RUNNING 상태로 변경해야 합니다. 실행 후보 프로세스 리스트가 되는 것입니다. 스케줄러에 의해 선택되기 위해 런큐에 Enqueue된 다음 실행 대기 상태를 관리하는 연결 리스트에 등록하는 것