[운영체제] 13. Process Synchronization 2

이건회·2022년 3월 20일
0

운영체제

목록 보기
12/27

  • 추상화는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다. 즉 복잡한 것을 일반적인 것으로 단순화하는 것이다
  • Semaphores는 앞의 방식들을 추상화시킨 것이다.
  • Semaphore의 정수형 변수 S와 이에 대한 P,V라는 두 가지 연산이 정의된다.
  • P 연산은 Semaphore변수 값을 획득하고 V 연산은 Semaphore사용 후 반납하는 연산이다.
  • Semaphore 변수 값은 자원의 개수를 의미한다. P 연산은 자원의 사용이므로 사용할 때 마다 Semaphore변수값이 1씩 줄어든다. V연산은 사용한 자원을 내놓는 것이므로 사용할때마다 Semaphore변수값이 1 늘어난다.
  • 변수 S에 P 연산을 하면 S값이 0 이하인 동안 while을 돌면서 아무 일도 안하고 기다린다. 자원을 다 가져가고 없는 상태기 때문이다. S값이 양수가 되면 즉 누군가가 자원을 내어 놓으면 S를 1 빼고 자원을 획득한다. 작업이 끝나고 나면 V연산을 해서 S를 증가시켜 자원을 내놓는다.
  • 여기서도 자원이 없을 때 P연산을 하면 무한정 기다리므로 busy wait 문제가 생긴다.

  • 크리티컬 섹션 문제에 Semaphore를 사용한다.
  • Semaphore변수인 mutex를 1로 놓고 lock을 걸 때, 크리티컬 섹션에 들어가야 하는 경우 P, 빠져나올 때 V연산을 하면 된다.

  • Semaphore 방식은 Block & Wakeup방식을 활용하기도 한다.
  • 실제 Semaphore변수 값과 프로세스를 연결하기 위한 큐가 만들어진다. 만약 Semaphore를 획득할 수 없으면 프로세스를 block하고 누군가가 Semaphore를 쓰고 반납하면 block된 프로세스 중 하나를 깨운다(wakeup).
  • Semaphore획득을 못한 PCB들을 Semaphore waiting 큐에 연결한다.

  • Block & Wakeup방식에서 P와 V연산의 차이다. P연산은 자원의 여분이 있다면 Semaphore를 획득하고 없다면 block상태가 된다. Semaphore값을 1빼주며 S.value 값이 음수면 자원의 여분이 없는 상태이므로 해당 프로세스를 waiting 큐인 L에 연결시키고 block시킨다.
  • V연산은 자원의 반납 뿐 아니라 자원을 기다리면 block된 프로세스가 있다면 깨워주는 연산도 수행한다. 만약 자원을 내놓아도 S.value 값이 0 이하면 누군가 block되어 있다는 뜻이니 잠든 프로세스 하나를 리스트에서 빼서 깨워주고, 양수면 누군가 자원을 갖고 쓰고 있다는 뜻이다.
  • 따라서 S.value는 자원의 개수가 아닌, 양수면 자원을 기다리지 않고 누군가 쓰고 있고, 음수면 누군가 자원을 기다리고 있으니 wakeup 해야 한다는 것을 확인하는 개념에 가깝다.

  • busy wait과 block & wakeup 방식 중 보통은 block & wakeup이 쓸데없이 cpu를 쓰면서 기다리지 않으므로 효율적이다.
  • 그러나 block & wakeup은 block상태를 wakeup시키는 오버헤드가 든다. 따라서 크리티컬 섹션의 길이가 짧으면 busy wait의 오버헤드가 더 적다.

  • Semaphore개수가 하나인, 즉 자원의 갯수가 하나인 Semaphore를 Binary Semaphore라 부른다. 이는 줄 상호 배제(lock/unlock)에 사용한다.
  • Semaphore변수 값이 5나 10처럼 자원의 개수가 여러개라 여분이 있는 경우를 Counting Semaphore라 한다. 주로 여분 자원의 개수를 카운팅하는 용도로 Semaphore를 사용한다

  • 만약 한 프로세스가 어떤 일을 하기 위해 Semaphore S와 Q를 모두 획득하고 이를 모두 반환해야 하는데, 두 프로세스 중 하나가 Q를 얻고 cpu를 빼앗긴 상태에서 다른 프로세스가 S를 획득했다. 이때 서로가 상대방의 변수를 원하고 있으며 자신의 변수를 내놓지 않으므로 무한정 기다리게 되는 상황이 발생한다. 이를 데드락이라 부른다.
  • 다음으로 기아 문제가 생길 수 있다. 특정 프로세스들만 자원을 공유하면서 다른 프로세스의 차례가 오지 않는 문제를 말한 것이다.

  • "식사하는 철학자"라는 상황인데 한명이 식사하려면 왼쪽 오른쪽의 젓가락을 들어야 한다. 그러나 왼쪽의 사람들이 젓가락을 놓기 직전 오른쪽 사람이 젓가락을 가져가고, 반대로 같은 상황이 계속되면 한 사람은 기아 상황에 빠질 수 있다.
  • 또 다섯명이 동시에 본인의 왼쪽 젓가락을 잡아버리면 모두 데드락 상태에 빠지게 된다.
profile
하마드

0개의 댓글