Open Yeram522 opened 3 months ago
static void
timer_interrupt(struct intr_frame *args UNUSED)
{
// (생략)
if (!list_empty(&sleep_list)) {
struct thread *head_sleep_thread;
while(!list_empty(&sleep_list)) {
head_sleep_thread = list_entry(list_front(&sleep_list), struct thread, elem);
if (ticks < head_sleep_thread->wake_up_ticks) {
break;
}
list_pop_front(&sleep_list);
sema_up(&head_sleep_thread->sleep_control_sem); // 타이머 인터럽트 내부에서 sema_up 함수 호출
}
}
// (생략)
}
👀 관련 이슈
6 기존 설계 단계에서
sema_up()
,sema_down()
을 이용해 임계영역을 설정했었습니다.. 하지만 예상치 못한 동기화 오류가 발생했습니다.✨ 작업한 내용
semaphore
을 이용하지 않고,block()
,unblock()
을 이용해 스레드의 상태를 직접적으로 변경해주었습니다.🍰 참고사항
추가적으로 Pint0s의 semaphor 구조체의 waits 리스트에 대한 추가적인 연구가 필요할 것 같습니다.