Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
Tags
- 공부
- memory
- 협업
- Redux
- codeup
- react-redux
- 파이썬
- 정렬
- Operating System
- 스프링
- OS
- 프로그래머스
- 일상
- 백준
- 기초100제
- 타입스크립트
- 자료구조
- 토이프로젝트
- 알고리즘
- C++
- CPU 스케줄링
- web
- error
- 리덕스장바구니
- js to ts
- 분할메모리할당
- Java
- react
- Spring
- 코드업
Archives
- Today
- Total
감자튀김 공장🍟
[OS] 뮤텍스(Mutex) VS 세마포(Semaphore) 본문
반응형
사전 설명
- https://good-potato.tistory.com/61
- 상호배제 장치(mutual exclusion device), 동기화 프리미티브(synchronization primitive) : 상호배제를 기반으로 여러 스레드들이 공유 자원을 액세스하는 전통적인 스레드 동기화 기법
- 대표적인 동기화 기법
- 락(lock) 방식 : 뮤텍스(mutex), 스핀락(spinlock)
- wait-signal 방식 : 세마포(semaphore)
뮤텍스(Mutex)
- 뮤텍스는 잠김/열림(locked / unlocked) 중 한 상태를 가지는 락 변수를 이용하여 오직 한 스레드만이 자원을 배타적으로 사용하도록 하는 기법이다.
- 락이 걸려있는 경우, 임계구역에 들어가려고 하는 스레드가 락이 풀릴 때까지 블록 상태로 큐에서 대기하기 때문에 blocking lock 기법이라고도 부르고, 대기 큐에서 잠자면서 기다린다고 해서 sleep-waiting lock 기법이라고도 부른다.
- 목적 : 임계구역에 대한 한 스레드의 배타적 접근
- 특징
- 임계구역의 실행시간이 짧은 경우, 뮤텍스는 비효율성을 보인다.
- 뮤텍스 동기화의 구조
세마포
- 세마포는 스레드가 동시에 사용할 수 있는 하나의 자원에 대해 스레드가 공유하도록 관리하는 동기화 프로그래밍 기법이며 프로그래밍 개념(concept)이다.
- 세마포 요소
- 자원 : n개의 인스턴스
- 대기 큐 : 자원을 할당받지 못한 스레드가 잠드는 곳
- counter 변수 : 사용가능한 자원의 개수를 나타내는 정수형 전역 변수로 자원의 개수 n으로 초기화 된다.
- P/V 연산: P 연산은 자원 요청 시, V 연산은 자원 반환 시 실행되는 연산
- 목적 : 자원에 대한 다중 스레드의 원활한 공유
- 세마포 동기화 구조
세마포 - P/V 연산
- P/V 연산은 wait/signal 연산으로도 불린다.
- P 연산은 스레드의 자원 사용을 허가한다.
- P 연산은 counter 변수를 1 감소시키고 V 연산은 counter 변수를 1 증가 시킨다.
- P/V 연산은 sleep-wait 세마포와 busy-waiting 세마포로 나뉜다.
- sleep-wait 세마포
- P 연산 중 자원 사용을 허가받지 못한 스레드는 사용가능한 자원이 생길 때까지 대기 큐에서 잠을 자고(sleep-wait), V 연산에 의해 사용가능한 자원이 생기게 되면 깨어나서 자원 사용을 허가 받는 형태이다.
- busy-waiting 세마포
- P 연산에서 사용가능한 자원이 생길 때까지 무한 루프를 돌면서 체크(busy-waiting)한다. 그러다가 V 연산에 의해 가용자원이 생기면, P 연산에서 자원을 획득하는 방식이다.
- 대기 큐가 필요 없다.
- sleep-wait 세마포
출처
운영체제(Operating system), 황기태 지음
반응형
'Study > Operating System' 카테고리의 다른 글
[OS] 메모리(Memory)와 메모리 계층 구조 (0) | 2022.04.09 |
---|---|
[OS] 교착 상태(DeadLock)이란? (0) | 2022.04.08 |
[OS] 상호배제(Mutual exclusion)이란? (0) | 2022.04.06 |
[OS] 동기화(Synchronous)에 대해서 (0) | 2022.04.05 |
[OS] CPU 스케줄링 알고리즘 (CPU Scheduling Algorithm) (0) | 2022.04.04 |
Comments