ALGORITHM

Mutex와 Semaphore

서울소시민 2018. 6. 7. 22:46

Mutex와 Semaphore

멀티 프로세스, 멀티 스레드 시스템에서 공유자원에 대한 동시 간섭을 막기위한 동기화 방법 중 유저모드 동기화, 커널모드 동기화가 있다. 유저모드동기화에는 Critical Section, 커널모드동기화에는 Mutex, Semaphore가 있다.

Context-switching이란? 하나의 프로세스가 CPU를 사용중 인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해 이전 프로세스의 상태를 Context에 보관하고, 새로운 프로세스의 상태를 적재하는 작업을 말한다. Context는 PCB에 기록되어 있다.


Critical Section(임계 영역)

  • 멀티 프로세스의 각 프로세스가 데이터를 공유하며 수행될 때, 동시 접근 가능한 프로그램 코드영역을 말한다. 이 공유자원의 독점사용을 제공하는 역할을 한다.

  • 전역변수를 이용한 thread간의 데이터를 공유하고자할때 쓰이는 방법이 Critical Section을 사용하는 것이다.

  • 동일 프로세스 내의 스레드 사이에서만 동기화가 가능하다.

  • 커널 모드 객체(Mutex, Semaphore)보다 가볍고, 빠르다.

  • 먼저 접근한 Thread는 LOCK을 획득하고, 그 이후 접근하는 Thread는 대기한다. 일을 마치면 LOCK을 해제하고, 다른 Thread가 접근할 수 있게 된다.

    • 이때 작업 Thread 교환에 따른 Context switching비용이 따르게 되고, LOCK가 해제되어 대기중이던 Thread가 깨어나면 Context switching이 일어나게 된다.

    • 선점한 Thread를 기다리는 시간이 길지 않다면 이런 switching비용은 불필요하기 때문에 생긴것이 스핀락이다.

    • 스핀락이란? Critical Section에 진입하지 못한 Thread가 대기모드로 들어가는 대신, 진입이 가능할 때까지 계속 무한루프를 돌며 Busy-waiting 상태로 만들어 LOCK을 얻을 수 있을 때까지 재시도하는 방식으로 구현된 LOCK를 말한다.\

    • 하지만, 무한루프를 도는 시간이 길어지면 오히려 더 많은 자원을 낭비할 수 있다.



Mutex

  • 공유된 자원의 데이터를 여러 쓰레드가 접근하는 것을 막는 것이다.

  • Thread들의 running time이 서로 겹치지 않게, 단독으로 실행되도록 하는 기술이다.

  • 상호간에 asynchronously 작동하는 Thread, process간 통신을 위한 방법이다.



Semaphore

  • 공유된 자원의 데이터를 여러 프로세스가 접근하도록 막는 것.

  • Thread가 Critical Section에 접근할때, 해당 Thread는 semaphore의 count를 감소시키고, 종료된 후에는 semaphore의 count를 원래대로 증가시킨다.

  • 한정된 수의 사용자만을 지원할 수 있는 공유자원에 대한 접근을 통제하는데 사용된다.



프로세스와 쓰레드

프로세스 - fork()하여 만든 자식 프로세스와 부모 프로세스가 각각 독립적인 메모리공간(data, heap, stack)을 가진다.(운영체제가 보는 일의 단위)

쓰레드 - 다른 메모리공간은 공유하고, stack만 독립적인 공간을 가진다. 이 점이 쓰레드를 더 가볍게 해준다. CPU는 한번에 한가지연산밖에 못하므로 context switching을 해준다. 이때 프로세스는 data,heap,stack을 모두 메모리에 올렸다, 내렸다 하지만 쓰레드는 stack만 올렸다 내렸다를 반복한다. (프로세스가 바라보는 일의 단위)

멀티프로세스 - 서버에서 fork()를 이용하여 프로세스를 여러개 복제한뒤 각각이 클라이언트와 통신하게 하는 방법. 클라이언트가 많아지면 부하가. 걸린다. 그래서 멀티쓰레드가 나왔다.

멀티쓰레드 - 2개의 쓰레드에 의해 동시에 실행되면 안 되는 영역이 존재하는데, 이것을 critical section이라고 한다.

'ALGORITHM' 카테고리의 다른 글

13458_시험감독  (0) 2018.06.12
14502_연구소  (0) 2018.06.12
1181_단어정렬  (0) 2018.05.11
10989_수 정렬하기3  (0) 2018.05.11
1427_소트인사이드  (0) 2018.05.11