운영체제

PintOS - Busy Waiting 바쁜대기 - 1

whh1323 2020. 1. 22. 15:27

세마포의 정의

 

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 ();
}