세마포어
- 다익스트라(Dijkstra)가 고안한 상호배제의 개념으로 출발
- 하나의 동기화 및 락 메커니즘의 구현한 도구를 가리키는 의미
- 리눅스에서 제공하는 일반적인 락 메커니즘 종류
카운팅 세마포어 |
ㅇ 복수개의 자원 카운팅이 가능한 세마포어 ㅇ -3 = 3개의 프로세스 대기 |
이진 세마포어 |
ㅇ 1개의 자원 가운팅이 가능한 세마포어 ㅇ 0과 1로 이로만 표현 ㅇ 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 |
'학교수업' 카테고리의 다른 글
시스템 프로그래밍 - 랩핑함수의 제작 (0) | 2019.06.04 |
---|---|
시스템 프로그래밍 - XSI 세마포어의 시스템 설정 (0) | 2019.06.03 |
시스템 프로그래밍 - semget, semctl (2) | 2019.05.31 |
보안관리 - 네트워크 보안(실습) (4) | 2019.05.28 |
보안관리 - 네트워크 보안(이론) (0) | 2019.05.27 |