학교수업

시스템 프로그래밍(기말고사) - 세마포어

3년안에 내집 마련 2019. 5. 30. 22:34
반응형

세마포어

 - 다익스트라(Dijkstra)가 고안한 상호배제의 개념으로 출발

 - 하나의 동기화 및 락 메커니즘의 구현한 도구를 가리키는 의미

 - 리눅스에서 제공하는 일반적인 락 메커니즘 종류

카운팅 세마포어

ㅇ 복수개의 자원 카운팅이 가능한 세마포어

 -3 = 3개의 프로세스 대기

이진 세마포어

1개의 자원 가운팅이 가능한 세마포어

01로 이로만 표현

 1 = 임계영역 진입 가능, 0 = 임계영역 진입 불가

뮤텍스

독점적인 획득을 가능하게 하는 특수형태의 락

 소유권이 있는 프로세스, Rock을 건 프로세스만 해제 가능

스핀락

ㅇ 문맥교환을 막기 위해 사용되는 매우 빠른 특수한 형태의 락

(문맥교환 : CPU가 필요한 다른 프로세스에게 프로세스를 사용할 수 있도록 해주는 상태, 이전 프로세스의 상태를 보관, 새로운 프로세스 적재)

ㅇ 문맥교환시 overhead가 발생 -> overhead를 막기위해 스핀락을 사용

ㅇ 짧은시간 이내 Rock 획득 보장 가능시 사용

ㅇ 임계구역에 진입이 불가능할 때 진입이 가능할 때 까지 루프를 돌면서

재시도하는 방식으로 구현

Reader/Writer(rwlock)

ㅇ 읽기, 쓰기가 서로 다르게 적용되는 특수한 형태의 lock

ㅇ 읽기 : 동시접근 가능, 쓰기 : 단독접근

 카운팅 세마포어

 - n개의 한정된 자원이 있다고 가정할 때 자원을 가져갈 때마다 표시해두는 원리

 - n개의 자원을 가져가면 가져간 만큼 빼고 return되면 그 만큼 더해준다.

 - P operation : 세마포어의 값을 감소시키는 값(sem wait, sem pend) - > 자원을 가져갔을 때

 - V operation : 세마포어의 값을 증가시킴(sem signal, sem post) -> 자원을 반환했을 때

 - P operation이 발생하면 n개의 자원이 n-1, n-2 ㆍ하다가 0이되면 P operation으로 진입하려는 프로세스들은 가져갈 자원이 없어 대기큐에서 잠들게 된다.

 - 후에 V operation으로 자원이 반환되면 세마포어의 값을 증가시키며 대기큐에 시그널을 보내게된다.

 - 만약 대기큐에 잠든 프로세스가 있으면 즉시 깨어나 세마포어의 값을 다시 감소시키며 임계영역 진입

 

이진 세마포어

 - n이 1과 0로만 이루어져있음

 - 임계영역에 진입이 가능(V operation) = 1, 임계영역에 진입 불가(P operation) = 0

 - 상호배제의 락 메커니즘에 사용되는 기법 -> 독점적으로 접근해야 하는 자원을 보호 가능

 

뮤텍스

 - 자원의 독점적 사용권한을 부여하는 기능

 - 소유권을 가진 process, Rock을 건 process만 뮤텍스 해제 가능5

 

뮤텍스 vs 세마포어

 - 세마포어 : 동기화를 목적

뮤텍스

세마포어

ㅇ 독점적 사용권한 획득

ㅇ 동작취소가 가능하다.

ㅇ 소유권을 가지고 있다.

ㅇ 세마포어보다 빠름

ㅇ 동기화

ㅇ P, V operation 분리가능

ㅇ 여러 프로세스가 작업동기화시 세마포어를 사용

ㅇ 큐를 제어할 때 순서를 보장하면 = strong semaphore

    순서를 보장하지 않으면 = weak semaphore

ㅇ 동작취소가 일부만 가능

    (XSI 세마포어 : 가능, POSIX 세마포어 : 불가능)

 

 

XSI 세마포어

POSIX 세마포어

POSIX 뮤텍스

최대 카운더

semvmx 시스템 설정

SEM_VALUE_MAX

1

독점적 소유권

불가능

불가능

가능

동작취소

가능

불가능

가능

타이머 설정

가능(비표준 함수)

가능 

가능

동작취소

 - 세마포어 or 뮤텍스를 잠근 프로세스나 스레드가 종료하면서 데드락에 빠진 것을 복구할 수 있는 기능

데드락 : 교착상태, 한정된 자원을 2개이상의 프로세스가원해 프로세스가 진전되지 못한 상태

  1. 중복으로 잠금 -> 에러 체크 뮤텍스 타입을 사용

  2. 뮤텍스가 획득한 스레드가 잠금을 풀지 않고 종료한 경우  -> 뮤텍스를 획득한 스레드가 죽었을 때 잠금을 취소 후 소유권 이전(robust mutex)로 해결

XSI 세마포어 vs POSIX 세마포어

 

XSI세마포어

POSIX 세마포어

인터페이스

ㅇ 오래된 표준이라 대부분 시스템에 적용

ㅇ 새로이 개발되는 시스템이 아니면 구현이 잘 안되어있음

기능측면

ㅇ 상태취소, wait-for-zero기능 추가

wait-for-zero : 세마포어가 0이면 깨어나고 양수면 잠복

ㅇ 기능이 많아 무거움

ㅇ 기능 구현이 적어 가벼움

세마포어 구현

strong semaphore

weak semaphore

 

반응형