Time does not change us. It just unfolds us.

Etc

[IPC]Semaphore

소젬 2021. 10. 22. 14:28

두 개 이상의 프로세스가 동시에 공유 메모리와 같은 공유 자원을 접근할때 동기화를 걸어주는 것을 목표로 한다.

운영 체계 또는 프로그램 작성 내에서 공유 자원에 대한 접속을 제어하기 위해 사용되는 신호를 말한다.

예를 들어, 공유 메모리에 여러 프로세스가 동시에 쓰기를 시도한다면 데이터가 손상되는 현상이 발생한다.

따라서 여러 프로세스 사이의 동작 순서를 지정해야 한다. 프로세스들이 공유 영역에 대한 접근 순서를 정하는 방법 중 하나가 세마포어이다.

병행 내지 병렬로 동작되는 둘 이상의 프로세서 사이에서 마이크로프로세서 시간이나 

입출력 접속구와 같은 공유 자원을 동시에 사용할 수 없기 때문에, 

한 프로세서가 사용하고 있는 동안에 세마포어를 세워서 다른 프로세서를 대기시키고 사용이 끝나면 해제시키는 방법으로 사용한다.

세마포어의 장단점

 - 장점

   많은 스레드들은 크리티컬 섹션을 허락받아야 한다.

   즉, 크리티컬 섹션에서 충돌이 나지 않는다.

 - 단점

   많은 스레드들은 block을 당한다.

   즉, CPU가 가만히 waiting하는 시간 낭비가 생길 수 있다.

 


 

세마포어의 기본 개념

세마포어는 한 번에 한 프로세스만 작업을 수행하는 부분에 접근해 잠그거나(lock), 다시 잠금을 해제하는 기능을 제공하는 정수형 변수이다.

이 정수형 변수는 함수를 통해 값을 변경하는데 보통 잠금 함수는 p로 표시하고 잠금 해제 함수는 v로 표시한다.

세마포어의 기본 동작 구조

세마포어는 중요한 처리 부분(critical section)에 들어가기 전에 p 함수를 실행해 잠금 기능을 수행하고, 처리를 마치면 다시 v 함수를 실행해 잠금을 해제한다.

잠금 기능을 수행 중인 동안에는 다른 프로세스가 처리 부분의 코드를 실행할 수 없다. 이 때 sem은 세마포어 값을 의미한다.

 

p(sem); /* 잠금 */
// 중요한 처리 부분(critical section)
v(sem); /* 잠금 해제 */


p 함수의 기본 동작 구조

p(sem) {
    while sem = 0 do wait;
    sem 값을 1 감소;
}


초기 sem 값은 1이다. p 함수는 sem이 0이면 다른 프로세스가 처리 부분을 수행하고 있다는 의미이므로, 값이 1이 될 때까지 기다려야 한다.

sem이 0이 아니면 0으로 만들어 다른 프로세스가 들어오지 못하게 한다.

 

v 함수의 기본 동작 구조

v(sem) {
    sem 값을 1 증가;
    if(대기 중인 프로세스가 있으면)
        대기 중인 첫 번째 프로세스를 동작시킨다.
}


v 함수의 기본 동작은 sem을 1만큼 증가시키고, 처리 부분을 수행하려고 대기 중인 프로세스가 있으면 첫 번째 대기 프로세스를 동작시킨다.

 

 

 

참고 링크

참고1.Semaphore 개념 및 소스코드

참고2.[통신프로그래밍] IPC

'Etc' 카테고리의 다른 글

Database 용어 정리  (0) 2021.11.17
[IPC]Shared Memory 응용  (0) 2021.10.22
[IPC]Shared Memory  (0) 2021.10.22
[IPC]Semaphore C 예제  (0) 2021.10.22
[IPC]Semaphore 함수  (0) 2021.10.22