일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 알고리즘
- Database
- 백준
- 다이나믹 프로그래밍
- vscode
- DP
- network
- 자바
- BFS
- 프로그래머스
- DFS
- react
- db
- Graph
- LeetCode
- Redux
- Data Structure
- Javascript
- frontend
- Algorithm
- Python
- CS
- git
- VIM
- 리트코드
- java
- 그레이들
- 동적 계획법
- TypeScript
- 안드로이드
- Today
- Total
늘 겸손하게
CS - Operating System - 공유자원과 임계 영역, 세마포어 & 뮤텍스 본문
CS - Operating System - 공유자원과 임계 영역, 세마포어 & 뮤텍스
besforyou999 2022. 11. 24. 20:20공유자원
시스템 안에서 프로세스, 스레드가 함께 접근 가능한 자원이나 변수를 의미. 이 공유 자원을 2개 이상의 프로세스가 동시에 읽거나 쓰는 상황을 경쟁 상태(race condition)라고 한다. 동시에 접근을 시도할 때 접근 순서에 따라 결과값이 달라질 수 있는 상황.
임계 구역 - Critical Section
공유 자원의 접근 순서에 따라 실행 결과가 달라지는 프로그램 영역
공유 데이터를 여러 프로세스가 동시에 접근할 때 잘못된 결과를 만들 수 있기 때문에, 한 프로세스가 임계구역을 수행할 때는 다른 프로세스가 접근하지 못하도록 해야 한다.
임계 구역을 해결하기 위한 방법은 크게 뮤텍스, 세마포어, 모니터 세 가지가 있으며 모두 상호 배제, 한정 대기, 융통성이라는 조건을 만족합니다. 이 방법의 토대가 되는 매커니즘은 잠금(lock)입니다.
세마포어
일반화된 뮤텍스로 간단한 정수 값과 두 가지 함수 wait( P 함수 ) 및 signal ( V 함수 )로 공유 자원에 대한 접근을 처리합니다.
wait()은 자기 차례를 기다리는 함수이며, signal은 다음 프로세스로 순서를 넘겨주는 함수입니다.
바이너리 세마포어
바이너리 세마포어는 0과 1의 두 가지 값만 가질 수 있는 세마포어입니다. 구현의 유사성으로 인해 뮤텍스는 바이너리 세마포어라고 할 수 있지만 엄밀히 말하면 뮤텍스는 잠금을 기반으로 상호배제가 일어나는 '잠금 매커니즘'이고, 세마포어는 신호를 기반으로 상호 배제가 일어나는 '신호 매커니즘'입니다.
카운팅 세마포어
카운팅 세마포어는 여러 개의 값을 가질 수 있는 세마포어로 여러 자원에 대한 접근을 제어하는 데 사용합니다.
세마포어 P, V 연산
P : 임계 구역 들어가기 전에 수행 (프로세스 진입 여부를 자원의 개수(S)를 통해 결정)
V : 임계 구역에서 나올 때 수행 ( 자원 반납 알림, 대기 중인 프로세스 깨우는 신호 )
예시 : 최초 S 값은 1이고, 현재 해당 구역을 수행할 프로세스 A, B가 있다고 가정하자
- 먼저 도착한 A가 P(S)를 실행하여 S를 0으로 만들고 임계구역에 들어감
- 그 뒤에 도착한 B가 P(S)를 실행하지만 S가 0이므로 대기 상태
- A가 임계구역 수행을 마치고 V(S)를 실행하면 S는 다시 1이 됨
- B는 이제 P(S)에서 while문을 빠져나올 수 있고, 임계구역으로 들어가 수행됨
뮤텍스 - Mutex
임계 구역을 가진 스레드들의 실행시간이 서로 겹치지 않고 각각 단독으로 실행되게 하는 기술
상호 배제 (Mutual Exclusion)의 약자
해당 접근을 조율하기 위해 lock와 unlock을 사용한다.
- lock : 현재 임계 구역에 들어갈 권한을 얻어옴 ( 만약 다른 프로세스/스레드가 임계 구역 수행 중이면 종료할 때까지 대기 )
- unlock : 현재 임계 구역을 모두 사용했음을 알림 ( 대기 중인 다른 프로세스/스레드가 임계구역에 진입할 수 있음 )
뮤텍스는 상태가 0, 1로 이진 세마포어로 부르기도 함. 구현의 유사성으로 세마포어로 부르긴 하나 뮤텍스는 잠금을 기반으로 상호배제가 일어나는 '잠금 매커니즘'이고 세마포어는 신호를 기반으로 상호배제가 일어나는 '신호 매커니즘'.
모니터
모니터는 둘 이상의 스레드나 프로세스가 공유 자원에 안전하게 접근할 수 있도록 공유 자원을 숨기고 해당 접근에 대해 인터페이스만 제공합니다.
모니터는 세마포어보다 구현하기 쉬우며 모니터에서 상호 배제는 자동인 반면, 세마포어에서는 상호 배제를 명시적으로 구현해야 하는 차이점이 있습니다.
'Computer Science > Operating System' 카테고리의 다른 글
CS - Operating System - 메모리 계층 (0) | 2023.04.14 |
---|---|
CS - Operating System - Memory (0) | 2022.11.24 |
CS - Operating System - Race Condition (0) | 2022.11.24 |
CS - Operating System - DeadLock (교착 상태) (0) | 2022.11.24 |
CS - Operating System - CPU Scheduling (0) | 2022.11.24 |