C와 Linux의 타이머 메커니즘
홈페이지홈페이지 > 블로그 > C와 Linux의 타이머 메커니즘

C와 Linux의 타이머 메커니즘

Mar 08, 2023

Linux 및 C를 사용하여 타이밍 기능을 세밀하게 제어할 수 있습니다.

타이머 메커니즘을 사용하면 미리 결정된 시간이 경과했을 때 애플리케이션에 알리도록 OS 커널을 예약할 수 있습니다. 일반적으로 두 가지 정보를 제공하여 이를 사용합니다. 먼저, 알림을 보내기 전에 타이머가 걸리는 시간을 지정해야 합니다. 둘째, 해당 알림이 발생할 때 작동할 콜백 함수를 준비해야 합니다.

Linux 및 Unix 기반 시스템의 타이머 메커니즘은 다양한 요구 사항을 충족하도록 발전했습니다. 다양한 접근법은 다양한 유형의 문제를 해결하는 데 도움이 될 수 있습니다. 그러나 첫 번째 버전을 자주 보게 될 것입니다.경보()메커니즘은 아직 사용 중입니다.

알람 기능은 타이머를 사용하는 가장 간단한 방법입니다. 프로토타입은 다음과 같습니다.

이 방법을 사용하면 시간을 전체 초 단위로만 지정할 수 있습니다. 시간이 다 되면 운영 체제는시갈RM 애플리케이션에 신호를 보냅니다. 애플리케이션에서 타이머 만료를 처리하려면 콜백 함수도 정의해야 합니다.

다음은 신호 처리기 함수의 예입니다.

이 코드는시갈RM이후에 신호를 보내다1 두번째. 타이머 지연 시간을 5초로 늘리려면 다음을 호출하세요.알람(5) 대신에. 타이머를 중지하려면 값 0을 전달합니다.알람(0).

시간이 다 되면 사용하는 타이머가 주기적으로 다시 시작되지 않습니다. 예를 들어, 1초 더 지연하려면 다음을 호출하여 메커니즘을 다시 시작해야 합니다.경보().

사용이 간편함에도 불구하고 이 방법에는 몇 가지 단점이 있습니다.

위에 제공된 샘플 코드를 다음과 같이 저장하십시오.알람.c . 컴파일하고 실행하면 프로그램이 다음을 호출합니다.타이머_콜백 1초 후에 작동합니다. 그런 다음 나머지 2초 동안 대기합니다.수면(3)행을 종료한 후 종료하세요.

time 명령을 사용하는 이유는 시간을 볼 수 있기 위해서입니다. 하지만 결과를 보면 총 러닝타임은 3초가 아니다. 이는 다음으로 인해 발생합니다.시갈RM신호알람(1)처음 1초가 지나면시스템콜 sleep(3) 함수가 실행 중이므로 발생합니다. 이 신호가 도착하면 시작된 syscall을 중단합니다.수면(3).

간격 타이머 메커니즘은 BSD 버전 4.2에서 처음으로 사용 가능했습니다. 나중에 POSIX에 의해 표준화되었습니다. 전통적인 것에 비해 주요 장점경보()기반 타이머 방법은 다음과 같습니다.

간격 타이머 작업에 사용되는 함수 프로토타입은 다음과 같습니다.

간격 타이머를 설정하려면 다음을 사용해야 합니다.이머발 구조체. 이 구조체를 두 번째 인수로 사용하여 값을 전달해야 합니다.기능.

예를 들어, 애플리케이션에 1초 동안 알리고 그 후 300밀리초마다 알리는 간격 타이머를 다음과 같이 설정할 수 있습니다.

새 값이 설정되기 전에 활성화된 간격 타이머가 있는 경우 해당 값은 변수 주소로 전송됩니다.이머발함수의 세 번째 매개변수에 지정된 유형입니다.

간격 타이머 메커니즘을 사용하면 세 가지 유형의 타이머를 설정할 수 있습니다. 첫 번째 매개변수에 타이머 유형을 지정합니다.설정자():

타이머 유형

신호

설명

ITIMER_REAL

시갈RM

애플리케이션에서 소요된 시간과 관계없이 총 경과 시간에 대해 계산됩니다.

ITIMER_VIRTUAL

SIGVTALRM

애플리케이션이 사용자 모드에서만 실행되는 시간에 따라 계산됩니다.

ITIMER_PROF

시그프로프

사용자 모드와 시스템 모드 모두에서 애플리케이션이 소비한 시간의 합계를 기준으로 계산됩니다.

이 표에서 알 수 있듯이ITIMER_REAL유형은시갈RM신호와 마찬가지로경보()기능.

간격 타이머를 사용하고