[05.10/week09]TIL
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
OS 개발자/시스템 프로그래머, 동시성 프로그래밍 초보자
핵심 요약
thread_sleep
함수는 스레드 상태를 BLOCK으로 변경하고sleep_list
에 등록하여 타이머 인터럽트로 깨우는 메커니즘 구현timer_interrupt
함수가ticks
증가와thread_wakeup
호출로 스레드 깨우기 트리거thread_current()
호출 시 스레드 상태가THREAD_RUNNING
이 아닐 경우Kernel PANIC
발생 (스레드 상태 검증 오류)
섹션별 세부 요약
- timer_sleep 함수 구현
start
변수에 OS 부팅 후 경과 시간 저장thread_sleep(start + ticks)
호출로 스레드를BLOCKED
상태로 전환thread_yield()
대신thread_sleep
사용으로 CPU 사용률 최적화
- thread_sleep 함수 동작
- 스레드 상태를
THREAD_BLOCKED
로 변경 sleep_list
에 스레드를list_push_back
으로 추가set_global_tick(ticks)
로 전역ticks
업데이트
- timer_interrupt 함수 역할
ticks
증가 및thread_tick()
호출로 CPU 사용량 업데이트get_global_tick() <= ticks
조건 충족 시thread_wakeup(ticks)
호출
- thread_wakeup 함수 동작
sleep_list
순회하며wakeup_tick <= ticks
인 스레드 제거 및thread_unblock
호출set_global_tick()
으로 전역ticks
업데이트 (조건 불충족 시)
- Kernel PANIC 발생 원인
thread_current()
호출 시 스레드 상태가THREAD_RUNNING
이 아님thread_sleep
에서global_tick
갱신 누락,thread_wakeup
에서curr
변수 초기화 미흡
결론
- 스레드 상태 관리 시
THREAD_RUNNING
검증 필수,thread_sleep
에서global_tick
업데이트 및thread_wakeup
의curr
초기화 개선 필요 sleep_list
순회 시 인터럽트 비활성화로 리스트 조작 보장