리눅스/리눅스 시스템 프로그래밍: 두 판 사이의 차이
→프로세스 스케줄링 정책과 우선순위
(→버디 블록 알고리즘: 오류 정정) |
|||
| 63번째 줄: | 63번째 줄: | ||
=== 프로세스 스케줄링 정책과 우선순위 === | === 프로세스 스케줄링 정책과 우선순위 === | ||
리눅스의 프로세스 스케줄링 정책은 다음 상수들을 세팅함으로 이루어진다. | |||
* SCHED_RR : 우선 실행 레벨이 있는 라운드 로빈(실행한 프로세스를 실행 큐 맨 뒤에 넣어서 큐 내의 모든 프로세스가 돌아가면서 균등한 시간 동안 실행된다) 정책을 쓴다. | |||
* SCHED_FIFO : First in, First Out(실행한 프로세스를 실행 큐 맨 뒤에 넣어서 큐 내의 모든 프로세스가 돌아가면서 실행되나 프로세스마다 수동으로 실행을 포기해야 다음 프로세스가 실행될 수 있다) 정책을 쓴다. | |||
* SCHED_OTHER 우선 실행 레벨이 없이 공평한 라운드 로빈 정책을 쓴다. | |||
* SCHED_BATCH : 자주 wake(프로세스 실행 재개)된다면 덜 실행하게 된다. | |||
* SCHED_IDLE : nice 값을 무시하다시피 하여 SCHED_OTHER를 실행한다. | |||
* SCHED_NORMAL : Completely Fair Scheduler(CFS)를 사용한다. | |||
* SCHED_DEADLINE : 실행 시간의 데드라인을 프로세스 별로 정하고 데드라인 시간이 짧은 것부터 실행한다. | |||
리눅스의 프로세스 우선순위는 nice라는 가중치의 형태로 수동 조절이 가능한 경우가 있다. | |||
* getpriority(which, id) : which로 선택한 프로세스 선택 기준(PRIO_PROCESS, PRIO_PGRP, PRIO_USER)에 따라 id 값에 해당하는 프로세스(들)의 nice를 정수 값으로 반환한다. | |||
* setpriority(which, id, priority) : 선택한 프로세스 범위 기준에 priority 정수 값을 nice로 적용한다. | |||
PREEMPT_RT 옵션을 주고 컴파일한 리눅스 커널은 커널의 기본적인 프로세스 선점(Preemption) 기능이 비활성화되어 프로세스든, 커널 단계든 수동으로 스케줄링 정책을 짜야 하며, 인터럽트나 Priority Inversion이 되는 뮤텍스에 의존하는 스케줄링을 할 수 없다. | |||
=== 경량 프로세스(Lightweight Process) === | === 경량 프로세스(Lightweight Process) === | ||
=== 데몬과 그 외 프로세스 관련 기능=== | === 데몬과 그 외 프로세스 관련 기능=== | ||