timer_sleep() 다시 구현하기 : devices/timer.c에 정의된 timer_sleep() 함수를 다시 구현
현재 기본 제공되는 구현은 busy waiting 방식으로 되어 있음. 즉, 루프를 돌면서 현재 시간을 계속 확인하고, 시간이 충분히 지날 때까지 thread_yield()를 호출. → 이런 방식은 CPU를 불필요하게 낭비하므로, busy waiting을 없애도록 다시 구현 필요
함수 원형
void timer_sleep (int64_t ticks);
C
복사
동작 설명
•
현재 실행 중인 스레드를 적어도 x ticks만큼 잠재우기
•
x ticks가 지난 후, 단순히 그 스레드를 ready queue에 다시 넣어주면 됨
•
정확히 x ticks에 딱 맞춰 깨어날 필요는 없음(시스템이 다른 일로 바쁘면 조금 늦게 깨어나도 괜찮음)
시간 단위
•
timer_sleep()의 인자는 timer ticks 단위
•
1초에 몇 번 tick이 발생하는지는 include/devices/timer.h에 있는 매크로 TIMER_FREQ 로 정의
•
기본값은 100Hz (즉, 1초 = 100 ticks)
◦
이 값을 바꾸면 테스트 케이스 대부분이 실패할 수 있으니 바꾸지 않는 게 좋음
관련 함수
•
timer_msleep(), timer_usleep(), timer_nsleep() 같은 함수도 존재
◦
이 함수들은 밀리초, 마이크로초, 나노초 단위로 잠들게 하고, 필요할 경우 자동으로 timer_sleep()을 호출
◦
따라서 이 함수들을 따로 수정할 필요는 없음
참고
Alarm Clock 구현은 이후 프로젝트에서는 필수로 쓰이지는 않음. 그렇지만 Project 4 (File System) 에서 도움이 될 수 있음

