커널 타이머 예제

이렇게 하면 지정된 타이머가 현재 보류 중인지 여부를 알 수 있습니다. 호출자는 직렬화 wrt를 확인해야 합니다. 이 타이머에 수행 된 다른 작업, 예를 들어. 또는 SMP의 다른 CPU를 인터럽트할 수 있습니다. 활성 타이머 수가 증가함에 따라 설계가 잘 확장되어야 합니다. 이 함수는 활성 타이머의 전역 목록에 타이머를 삽입합니다. 만료됨 – 타이머의 업데이트된 만료 시간(jiffies) 커널 타이머의 또 다른 중요한 기능은 작업이 나중에 다시 실행되도록 자신을 다시 등록할 수 있다는 것입니다. 이는 각 timer_list 구조가 실행되기 전에 활성 타이머 목록에서 연결해제되어 다른 곳에서 즉시 다시 연결될 수 있기 때문에 가능합니다. 동일한 작업을 반복해서 다시 예약하는 것은 무의미한 작업으로 보일 수 있지만 경우에 따라 유용합니다. 예를 들어, 디바이스의 폴링을 구현하는데 사용될 수 있다. 타이머가 만료되는 시간을 변경해야 하는 경우 mod_timer를 사용할 수 있습니다. 호출 후 새 만료 값이 사용 됩니다. 고해상도의 경우 클럭의 해상도가 1나노초로 나열됩니다(이는 말도 안 되지만 본질적으로 임의정밀도의 지표역할을 합니다.) 또한 시계 이벤트 장치에는 “hrtimer_interrupt”의 이벤트 처리기가 있습니다.

출력에서 여기에 마지막 줄을 인쇄 한 타이머 함수가 인터럽트 모드에서 실행되고 있음을 알 수 있습니다. Ingo Molnar는 타이머의 현재 “타이머 휠” 구현 성능에 대해 심층적인 설명을 했습니다. 이것은 (다른 특성을 가진) ktimers의 추가를 정당화하기 위해 일련의 메시지의 일부였다. jit 모듈에는 하나의 헤더 줄과 6개의 데이터 줄을 반환하는 샘플 파일/proc/jitimer(“just in timer”)가 포함되어 있습니다. 데이터 줄은 코드가 실행되는 현재 환경을 나타냅니다. 첫 번째 는 읽기 파일 작업에 의해 생성되고 다른 하나는 타이머에 의해 생성됩니다. 커널을 컴파일하는 동안 다음 출력이 기록되었습니다: 타이머 삭제가 있는 레이스 조건을 피하기 위해 매우 신중해야 합니다. 관련 이벤트(파일이 닫히거나 모듈이 제거됨)가 다른 프로세서에서 발생하는 동안 모듈의 타이머 함수가 한 프로세서에서 실행되는 상황을 고려합니다. 그 결과 더 이상 유효하지 않은 상황을 예상하는 타이머 함수가 발생하여 시스템 충돌이 발생할 수 있습니다. 이러한 종류의 인종을 방지하려면 모듈에서 del_timer 대신 del_timer_sync를 사용해야 합니다. 타이머 함수가 타이머 자체(공통 패턴)를 다시 시작할 수 있는 경우 del_timer_sync를 호출하기 전에 설정한 “중지 타이머” 플래그도 있어야 합니다. 그런 다음 타이머 함수는 해당 플래그를 확인하고 플래그가 설정된 경우 add_timer로 일정을 조정하지 않아야 합니다.

이 인라인 함수는 타이머 구조를 초기화하는 데 사용됩니다. 현재는 이전 포인터와 다음 포인터(및 SMP 시스템의 실행 플래그)를 영점합니다. 프로그래머는 이 함수를 사용하여 타이머를 초기화하고 앞으로 호환되기 위해 구조의 포인터를 명시적으로 건드리지 말 것을 강력히 촉구합니다. 또는 타이머 인터럽트를 보고 jiffies와 비교: 커널 코드가 타이머를 등록할 때마다(add_timer 또는 mod_timer를 통해), 작업은 결국 internal_add_timer(커널/타이머.c)에 의해 수행되며, 이에 따라 새 타이머를 이중 링크 목록에 추가합니다. 현재 CPU에 연결된 “계단식 테이블” 내에 있는 타이머의