Dynamic timer
리눅스 커널이 타이머를 관리하는 방법은 간단하지 않다.
시스템에 존재하는 모든 타이머중에서 어떤 타이머가 만료되었고 만료예정인지를 주기적으로 체크하는것은 꽤나 어려운 일이다. 이 작업을 수월하게 하기 위해 커널은 만료시간을 기준으로 묶은 다섯개의 그룹을 만들어서 관리하는 알고리즘을 사용한다.
각각의 만료시간범위에 따라 아래와 같이 그룹을 나눠 관리한다.
- tv1 -> 0 - 255 tick
- tv2 -> 256 - 2^14 - 1 tick
- tv3 -> 2^14 - 2^20 -1 tick
- tv4 -> 2^20 - 2^26 -1 tick
- tv5 -> 2^26 - 2^32 -1 tick
각 그룹이 관리하는 타이머리스트는 만료시간으로 정렬되어 있다. 만료시간이 동일할 경우 double linked list로 연결된다. 첫번째 그룹을 제외한 나머지 4개의 그룹은