PintOS - Busy Waiting 바쁜대기 - 1
세마포의 정의
P(S) : wait(S){
while S<=0; //바쁜대기,
S--;
}
V(S) : signal(S) {
S++; //다른 프로세스의 접근 허용
}
바쁜대기란?
프로세스 A와 B가 있다고 가정하자, A프로세스는 임계영역에서 실행중이고 B는 대기상태이다.
이때, B프로세스는 A가 작업이 완료될 때 까지 계속 일어났다 깨어나기를 반복하는 상황을 말한다.
바쁜대기의 장점: 공유자원을 사용하는 프로세스들의 자원사용시간이 짧으면 효율적일 수 있다.
'' 단점: 반복문을 통한 자원낭비(효율)이 떨어진다.
이번 Pintos의 1번 프로젝트는 Threads를 다루는 프로젝트로 /pintos/src/devices/timers.c 에서의
timer_sleep함수는 Busy Waiting 방식으로 되어있다.
/* Sleeps for approximately TICKS timer ticks. Interrupts must
be turned on. */
void
timer_sleep (int64_t ticks)
{
int64_t start = timer_ticks (); //현재 시간을 불러온다
ASSERT (intr_get_level () == INTR_ON); //인터럽드가 가능하도록 설정한다.
while (timer_elapsed (start) < ticks) // ticks(설정한 시간)만큼 지나지 않았으면 CPU를 양보한다.
thread_yield ();
}