일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- OOP
- SW Expert Academy
- stack
- 큐
- OS
- queue
- BFS
- integretion test
- 자료구조
- 다익스트라
- error
- 객체지향 프로그래밍
- Python
- DFS
- DP
- springboot
- 유니크 키
- unionfind
- java
- 파이썬
- 백준
- 코딩 테스트
- 캡슐화
- 스택
- 운영체제
- 논리 메모리
- 프로세스
- 데드락
- 디바이스 입출력
- 백준 #
- Today
- Total
middlefitting
[OS] 동기화 도구 세마포어(Semaphores) Mutex(뮤텍스)는 무엇인가 본문
Semaphores
세마포어는 공유된 자원, Critical Section에 여러 프로세스가 접근하는 것을 방지합니다.
세마포어는 동기화 도구로써 동기화 대상이 1개 이상일 때 사용합니다.
공유 자원에 접근할 수 있는 프로세스의 최대 허용치만큼 동시에 사용자가 접근할 수 있으며,
각 프로세스는 세마포어의 값을 확인하고 변경할 수 있습니다.
세마포어를 사용하기 위해서 다음과 같은 두 연산이 정의됩니다.
P(S)
P 연산은 락을 거는 과정으로 공유 데이터인 세마포어 변수 값을 획득합니다.
남아있는 자원이 없을 경우 대기를 하게되고, 누군가 자원을 내어 놓으면 자원을 획득하게 됩니다.
V(S)
V 연산은 락을 푸는 과정으로, 공유 데이터인 세마포어 값을 반납합니다.
대기하고 있는 프로세스가 있을 경우 자원을 획득할 수 있게 추가적인 작업을 수행할 수 있습니다.
Mutex
뮤텍스도 세마포어와 같이 공유 자원에 접근할 수 있는 프로세스들을 제어하지만,
세마포어와는 차이점이 존재합니다.
첫 번째는 뮤텍스를 두 프로세스가 동시에 사용할 수 없다는 것입니다.
세마포어는 동기화 대상의 개수를 지정할 수 있지만, 뮤텍스는 동기화 대상이 오직 하나일 때에만 사용할 수 있습니다.
두 번째는 뮤텍스는 자원 소유 및 책임 기능을 가지지만, 세마포어는 자원 소유가 불가합니다.
세 번째는 뮤텍스는 소유하고 있는 프로세스 및 스레드만이 락을 해제할 수 있다는 것이고, 세마포어는
소유하지 않는 경우에도 해제할 수 있습니다.
마지막으로는 세마포어는 시스템 범위에 존재하며 파일 시스템 상에 존재하며 뮤텍스는 프로세스의 범위를 가지면서 프로세스가 존재할 때
자동으로 제거된다는 특징이 존재합니다.
세마포어를 활용한 Critical Section 접근 제어
do
{
P(semaphore);
Critical Section;
V(semaphore);
remainder section;
}
세마포어 변수에 lock을 걸때 P 연산을 수행하고 빠져나올때 V 연산을 수행하게 됩니다.
프로그램은 세마포어만 지원된다면 P, V 연산만 잘 수행하면 되니 사용자가 직접 코딩할 필요 없이 추상 자료형으로 사용되는 세마포어를
사용할 수 있다는 장점이 존재합니다.
따라서 이를 통해 세마포어를 사용하진 않는 것보다 간단한 프로그래밍이 가능합니다
출처
KOWS 운영체제 - 반효경 교수님 - Process Synchronization 4
http://www.kocw.net/home/search/kemView.do?kemId=1046323
'OS' 카테고리의 다른 글
데드락(Deadlock)을 방지하는 방법에 관하여 (0) | 2023.02.02 |
---|---|
데드락(Deadlock) 이란 무엇인가. (0) | 2023.02.01 |
프로세스 동기화 문제에 관하여 (0) | 2023.01.30 |
컴퓨터 시스템 구조에 관하여 (0) | 2023.01.29 |
CPU 스케줄링이란 무엇일까 (0) | 2023.01.28 |