Busy Wait란 무엇인가?(feat. 스핀락)

이강용·2024년 7월 28일
0

CS

목록 보기
103/109

Busy Wait란?

  • 프로세스나 스레드가 특정 조건이 충족될 때까지 반복적으로 CPU를 사용하며 루프를 도는 방법

    • 이 방법은 프로세스가 필요한 자원을 기다리거나 특정 이벤트를 대기할 때 사용

    • 이 동안 CPU는 해당 프로세스에 할당된 상태를 유지하므로 다른 작업을 수행할 수 없음

      1단계 : Process 1이 공유 자원을 사용하고 있음

      • Process 1 : 현재 공유 자원(Shared Resource)를 사용하고 있음
      • 공유 자원 : Process 1에 의해 점유되어 사용 중

      2단계 : Process 2가 공유 자원이 필요해짐

      • Process 1 : 여전히 공유 자원을 사용하고 있음
      • Process 2 : 이제 공유 자원이 필요해짐, 그러나 현재 공유 자원이 Process 1에 의해 사용 중이므로, Process 2는 해당 자원에 접근할 수 없음

      3단계 : Process 2가 Busy Waiting에 들어감

      • Process 1 : 계속해서 공유 자원을 사용하고 있음
      • Process 2 : 공유 자원이 사용 가능해질 때 까지 대기, 이 대기 방식은 Busy Waiting
        • Process 2는 자원이 해제될 때까지 CPU를 점유한 채 루프를 돌며 자원의 상태를 지속적으로 확인

스핀락(Spinlock)이란?

  • Busy Wait의 한 형태로 특정 자원에 대한 접근을 제어하기 위해 사용되는 동기화 기법
  • 스핀락은 짧은 시간 동안만 자원을 기다리는 상황에서 주로 사용되며 자원이 해제될 때까지 반복적으로 상태를 확인하며 대기

스핀락의 특징

  • 짧은 대기 시간에 적합 : 자원이 곧 사용 가능해질 것으로 예상되는 경우에 적합
  • CPU 자원 낭비 : 자원을 기다리는 동안 CPU를 계속 사용하기 때문에 대기 시간이 길어지면 비효율적
  • 간단한 구현 : 스핀락은 구현이 간단하여 시스템 오버헤드가 적음
profile
HW + SW = 1

0개의 댓글