posix timer 예제

[CPT| TCT] clock_id에 의해 정의된 값이 프로세스또는 함수를 호출하는 스레드와 다른 스레드의 CPU 시간 시계에 해당하는 경우 timer_create() 함수가 성공할지 여부에 대한 구현 정의입니다. timer_create()에 의해 생성된 타이머는 일반적으로 “POSIX(간격) 타이머”라고 합니다. POSIX 타이머 API는 다음과 같은 인터페이스로 구성됩니다: 주기적인 타이머는 특별한 경우입니다. 단일 요청은 지정되지 않은 수의 신호를 생성할 수 있습니다. 요청 프로세스가 생성되는 속도만큼 빠르게 신호를 처리할 수 있으므로 후속 정기 타이머 만료 신호를 전달할 수 있도록 신호 전달 리소스를 사용할 수 있는 경우 문제가 되지 않습니다. 그러나, 일반적으로, 이것은 주기적 타이머 신호의 보장 처리가 `오버런`할 수 있습니다; 즉, 현재 보류 중인 신호가 전달되기 전에 후속 정기 타이머 만료가 발생할 수 있습니다. 지정된 시설은 오버런 수를 제공합니다. 오버런 수는 타이머 만료 신호가 생성된 시간과 신호가 전달되는 시간 사이에 발생한 추가 타이머 만료 횟수로 정의됩니다. 오버런과 관련된 신호 잡기 함수는 항목에서 이 개수를 검색할 수 있습니다. 이 방법을 사용하면 주기적인 타이머는 timer_create() 함수 호출 시 할당할 수 있는 “신호 대기열 리소스”만 하나만 필요합니다. 타이머 구조의 커널 할당 중에 일시적인 오류입니다. 커널은 timer_create()를 사용하여 생성된 각 타이머에 대해 “대기 된 실시간 신호”를 preallocates합니다. 따라서 타이머 수는 RLIMIT_SIGPENDING 리소스 제한에 의해 제한됩니다(setrlimit(2) 참조).

timer_create() 함수는 지정된 클럭 소스인 clock_id를 타이밍 기반으로 사용하여 프로세스별 타이머를 만듭니다. 사용자 수준에서 표시되는 타이머 ID는 glibc에 의해 유지되며, 이 경우 이러한 ID는 커널에서 사용하는 타이머 아이디에 매핑됩니다. 함수는 오버런 수를 검색하여 응용 프로그램이 개수를 포함하도록 정적 저장소를 할당할 필요가 없으며 구현에서는 타이머 만료 시 이 저장소를 비동기적으로 업데이트할 필요가 없습니다. 그러나 일부 고주파 정기 응용 프로그램의 경우 각 타이머 만료시 추가 시스템 호출의 오버헤드가 엄중할 수 있습니다. 정의된 대로 함수는 구현이 시간 초과와 연결된 사용자 공간의 오버런 수를 유지하도록 허용합니다. 그런 다음 timerid 인수(카운터를 포함하는 사용자 공간 구조에 대한 포인터일 수 있음)를 사용하여 시스템 호출 오버헤드 없이 오버런 수를 찾는 매크로로 타이머_getoverrun() 함수를 구현할 수 있습니다. 이 응용 프로그램 클래스와 덜 관련된 다른 구현에서는 추가 시스템 호출을 통해 시스템 구조의 개수를 유지관리하여 사용자 공간의 비동기 업데이트를 방지할 수 있습니다. 지정된 타이머 시설은 이 옵션을 지원하는 구현에 대해 실시간 신호(즉, 대기 된 신호)를 제공할 수 있습니다.