Busy Waiting?

Alarm Clock?

Busy Waiting 방식의 기존 코드

// ticks만큼 일시 중지하는 함수
void timer_sleep(int64_t ticks)
{
	// 함수가 호출된 현재 시각을 'start' 변수에 저장
  int64_t start = timer_ticks();
	// 인터럽트가 활성화 상태인지 확인
  ASSERT(intr_get_level() == INTR_ON);
  // 'start' 시간부터 'ticks'만큼의 시간이 경과할 때까지 루프 반복
  while(timer_elapsed(start) < ticks)
	  // CPU 양보 코드
    thread_yield();
}

<aside> 💡

ticks?

Alarm-Clock 방식의 수정 코드

// 대략 ticks 동안 실행을 일시 중단
void timer_sleep (int64_t ticks) {
  int64_t start = timer_ticks();
  ASSERT(intr_get_level() == INTR_ON);

	if(timer_elapsed(start) < ticks) {
		// 깨어날 목표 시각을 계산 = start + ticks
		thread_sleep(start + ticks);
	}
}