** Pintos 구현의 모든 순서는 pintos-kaist git book을 따른다.
** 코드 구현에 대한 설명은 주석을 참고!
Alarm Clock
`devices/timer.c`에 정의된 `timer_sleep()` 함수를 다시 구현하세요.
현재 제공된 구현은 시간이 충분히 경과할 때까지 현재 시간을 확인하고 `thread_yield()`를 호출하는 루프에서 busy wait(바쁜 대기)하는 방식입니다. busy wait를 피하도록 다시 구현하세요.
void timer_sleep (int64_t ticks);
호출한 스레드의 실행을 일시 중단하고 적어도 x 타이머 틱이 경과할 때까지 기다립니다. 시스템이 그 외에 유휴 상태가 아닌 한 스레드는 정확히 x 틱 후에 깨어나지 않아도 됩니다. 올바른 시간만큼 기다린 후에는 해당 스레드를 준비 큐(ready queue)에 넣습니다.
`timer_sleep()` 함수는 실시간 작업을 수행하는 스레드에 유용합니다. 예를 들어 초당 한 번 깜빡이는 커서 등이 있습니다. `timer_sleep()` 함수의 인수는 타이머 틱 단위로 표현되며, 밀리초 또는 다른 단위로 표현되지 않습니다. 초당 TIMER_FREQ 타이머 틱이 있으며, TIMER_FREQ는 devices/timer.h에 정의된 매크로입니다. 기본값은 100입니다. 이 값을 변경하지 않는 것이 좋습니다. 변경하면 많은 테스트가 실패할 가능성이 있기 때문입니다.
특정 시간(밀리초, 마이크로초, 나노초) 동안 슬립하는 데 사용되는 별도의 함수인 `timer_msleep()`, `timer_usleep()`, `timer_nsleep()` 함수도 있습니다. 그러나 필요할 때 자동으로 `timer_sleep()`를 호출합니다. 이러한 함수들을 수정할 필요는 없습니다. 알람 클록 구현은 이후 프로젝트에서 필요하지 않지만, 프로젝트 4에서 유용할 수 있습니다.
'운영체제(OS) > with PintOS' 카테고리의 다른 글
(Project2-User Programs) - System Calls (0) | 2023.12.26 |
---|---|
(Project2-User Programs) - User Memory (0) | 2023.12.26 |
(Project2-User Programs) - Argument Passing (0) | 2023.12.26 |
(Project1-Threads) - Advanced Scheduler (0) | 2023.12.26 |
(Project1-Threads) - Priority Scheduling (0) | 2023.12.26 |