Alarm Clock : 스레드가 특정 시간 동안 잠들어 있다가 정해진 시간이 되면 자동으로 깨어나는 기능
해당 스레드가 깨워져야하는 시점을 나타내는 값(= 스레드가 sleep 상태로 들어갈 때, 몇 번째 tick(인터럽트 타이머 기준)이 되었을 때 깨워야 하는 지를 저장)
struct thread {
// 이미 존재하는 코드...
int64_t wakeup_tick; /* 스레드를 깨우기 위한 틱 수 */
// 이미 존재하는 코드...
};
시스템의 tick 카운터와 비교하여 지정된 tick이 되면 sleep_list에서 해당 스레드를 깨워 ready 상태로 전환하는 데 사용
현재 sleep(대기) 상태에 있는 스레드들을 담는 리스트
extern struct list sleep_list; // sleep 상태인 스레드들을 담는 리스트
각 스레드는 자신의 wakeup_tick
값에 따라 sleep_list
에 저장됨. 스레드가 특정 시간(tick)까지 잠들어 있어야할 때 해당 스레드를 이 리스트에 삽입. 타이머 인터럽트가 발생할 때마다 sleep_list
를 확인하여 깨워야할 tick이 된 스레드를 깨워 ready 상태로 전환시킴
struct list sleep_list; // timer.c 파일에서 사용 : sleep 상태인 스레드들을 담는 리스트
void
thread_init (void) {
// 동일한 코드...
list_init (&sleep_list);
// 동일한 코드...
}