real-time system에서 event가 발생했을 경우를 고려해 보자. event가 발생하면 시스템은 최대한 빨리 반응해서 service해야 하는데, 이 때 event가 발생한 시점과 service되는 시점 사이의 시간간격을 'event latency'라고 한다.
event별로 latency requirement가 다르다. 예를들면, 자동차의 브레이크 시스템은 3~5ms정도의 latency requirement를 가진다. 반면에, 비행기에서의 레이더는 몇 초정도의 시간을 가질 수도 있다. real-time system에서 두 종류의 latency가 존재한다.
Interrupt latency : 말 그대로 interrupt가 발생하고 service routine이 시작될 때 까지의 시간.
Dispatch latency : 실행중인 프로세스를 중지시키고 다른 프로세스를 실행시키는 데에 필요한 시간. 더 정확히는, 프로세스가 ready queue에 있을 때, 이 process를 실행 상태로 만들 때 까지 필요한 시간. 아래 그림을 통해 이해하는 것이 좋을 것 같다.
POSIX API
SCHED_FIFO : FCFS policy, 하지만 time slicing이 없다.
SCHED_RR : Round-Robin policy, SCHED_FIFO와 다른 점은 time slicing이 존재한다는 점.
SCHED_OTHER : undefined, system마다 다르다.
pthread_attr_getschedpolicy(pthread_attr_t *attr, int *policy);
pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);