본문 바로가기
CS/OS

[OS] 스핀락, 뮤텍스, 세마포어

by 원만사 2021. 12. 22.
반응형

 임계 영역에 접근하는데 있어서 동기화를 위해 사용되는 기법인 스핀락, 뮤텍스, 세마포어에 대해서 알아보자.

 

locks 방식을 이용한 동기화 기법

  • 스핀락(spinlock), 뮤텍스(mutex)
  • 상호 배제가 되도록 만들어진 lock 변수 사용
    • lock을 소유한 스레드만이 임계 영역에 진입할 수 있다.
    • lock을 소유하지 않은 스레드는 대기한다.

 

wait-signal 방식을 이용한 동기화 기법

  • 세마포어(semaphore)
  • n개의 자원을 사용하려는 m개의 프로세스(또는 스레드)의 관리 제공
    • 자원을 소유하지 못한 프로세스(또는 스레드)는 대기(wait)
    • 자원의 사용을 마친 프로세스(또는 스레드)는 알림(signal)

 

 

스핀락(Spinlock)

  • lock 변수
    • true : lock을 잠근다, lock을 소유한다.
    • false : lock을 연다, lock을 해제한다
  • 연산
    1. lock 연산
      • 임계 영역에 들어갈 때 실행되는 코드
      • lock이 잠김 상태면, lock이 풀릴 때까지 무한 루프를 돌면서 lock이 해제될때까지 기다린다.
      • lock이 연린 상태면, lock을 잠그고 임계 영역 실행
    2. unlock 연산
      • 임계 영역을 나올 때 실행하는 코드
      • lock을 열린 상태로 변경
  • lock을 얻을 때까지 계속해서 lock 변수를 확인하면서 기다리는 busy waiting 상태이다.
  • busy waiting 상태에 있다는 것은 무한 루프를 돌면서 최대한 다른 프로세스(또는 스레드)에게 CPU를 양보하지 않는다는 것이다.
  • 임계 영역의 실행 시간이 짧을 경우에는 효과적이다.
  • 그렇지 않을 경우 lock을 기다리는 프로세스(또는 스레드)가 계속해서 CPU를 점유하고 있으므로 CPU를 쓸데없이 낭비하게 된다.
P(S) {
    while (S <= 0); // 자원이 없다면 while 루프를 돌며 대기함.
    
    S -= 1; // 자원을 획득함.
}

V(S) {
    S += 1; // 자원을 해제
}

 

 

뮤텍스(Mutex)

  • lock 변수
    • true : lock을 잠근다, lock을 소유한다.
    • false : lock을 연다, lock을 해제한다
  • 대기 큐
    • lock이 열리기를 기다리는 프로세스(또는 스레드) 큐
  • 연산
    • lock 연산(임계 영역의 entry 코드)
    • unlock 연산(임계 영역의 exit 코드)
  • 임계 영역에서의 실행 시간이 짧은 경우 비효율적이다.
    • 1. 특정 프로세스(또는 스레드)가 임계 영역 접근 시 lock이 잠겨 있으면 대기 큐에서 대기시키고 context switching
    • 2. lock이 풀리면 깨어난 후 context switching하여 CPU를 할당 받아 실행 재개
    • 위와 같이 두 번의 context switching 시간이 발생한다. 

 

세마포어(Semaphore)

  • n개의 자원
  • 자원을 할당받지 못한 스레드들을 위한 대기 큐
  • counter 변수
    • 사용 가능한 자원의 개수
    • 정수형 전역 변수 : 자원의 개수(n)로 초기화
  • P/V 연산
    • P(wait) 연산 : 자원의 사용 허가를 받기 위해 자원 요청시 실행
    • V(signal) 연산 : 자원 사용이 끝났음을 알리기 위해 자원 반환시 실행
P(S) {

  if (S > 0)
    S -= 1;
  else
    wait on the queue Q;
    
}

V(S) {

  if (any processes waiting on Q)
    wakeup one of them;
  else
    S += 1

}

 

 

 

References

- http://itnovice1.blogspot.com/2019/09/spin-lock.html

- https://yoongrammer.tistory.com/63

- https://www.youtube.com/playlist?list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN

- https://www.youtube.com/playlist?list=PLV1ll5ct6Gtz5fnKa6kwluZJw4Zz2XbqM

 

 

 

반응형

'CS > OS' 카테고리의 다른 글

[OS] 07. 메모리 관리  (0) 2021.12.27
[OS] 06. CPU 스케줄링  (0) 2021.12.26
[OS] 공유 자원 접근 문제  (0) 2021.12.22
[OS] 05. 프로세스 관리  (0) 2021.12.21
[OS] 04. 프로그램의 구조와 실행  (0) 2021.12.20

댓글