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 | 31 |
Tags
- git
- 부트캠프
- 너비우선탐색
- 국비지원취업
- 그리디
- KAKAO
- DFS
- 백준
- 컴퓨터공학
- 코테
- 패스트캠퍼스
- LinkSnap
- Javascript
- 알고리즘
- 프론트엔드개발자
- 야놀자
- 자바스크립트
- CS
- CSS
- cpu
- html/css/js
- 국비지원
- github
- computerscience
- 코딩테스트
- 컴퓨터과학
- BFS
- 호이스팅
- js
- nodejs
Archives
- Today
- Total
My Boundary As Much As I Experienced
세마포어(Semaphore) & 뮤텍스(Mutex) 본문
세마포어 : 멀티프로그래밍 환경에서 공유 자원에 대한 접근을 제한하는 방법
공유된 자원에 여러 프로세스가 동시에 접근하면서 문제가 발생할 수 있다.
이때 공유된 자원의 데이터는 한 번에 하나의 프로세스만 접근할 수 있도록 제한을 둬야 한다.
이를 위해 나온 것이 바로 '세마포어'
임계 구역
여러 프로세스가 데이터를 공유하며 수행될 때, 각 프로세스에서 공유 데이터를 접근하는 프로그램 코드 부분
세마포어 P, V 연산
P : 임계 구역 들어가기 전에 수행 ( 프로세스 진입 여부를 자원의 개수(S)를 통해 결정)
V : 임계 구역에서 나올 때 수행 ( 자원 반납 알림, 대기 중인 프로세스를 깨우는 신호 )
// P(S);
procedure P(S) --> 최초 S값은 1임
while S=0 do wait --> S가 0면 1이 될때까지 기다려야 함
S := S-1 --> S를 0로 만들어 다른 프로세스가 들어 오지 못하도록 함
end P
// --- 임계 구역 ---
// V(S);
procedure V(S) --> 현재상태는 S가 0임
S := S+1 --> S를 1로 원위치시켜 해제하는 과정
end V
(사용하냐 안 하냐를 나타내는 것이니 0과 1로만 표현 가능)
1. 먼저 들어간 프로세스가 들어가기 전에 입장권한을 0으로 만든다.
2. 나중에 들어갈 프로세스가 입장권한이 0이니 대기한다.
3. 먼저 들어간 프로세스가 나올 때 입장권한을 또 1로 만든다.
4. 나중에 들어갈 프로세스가 다시 입장권한을 0으로 만들고 들어간다.
5. 계속...
뮤텍스 : 임계 구역을 가진 스레드들의 실행시간이 서로 겹치지 않고 각각 단독으로 실행되게 하는 기술
상호 배제(Mutual Exclusion)의 약자임
해당 접근을 조율하기 위해 lock과 unlock을 사용한다.
- lock : 현재 임계 구역에 들어갈 권한을 얻어옴 ( 만약 다른 프로세스/스레드가 임계 구역 수행 중이면 종료할 때까지 대기 )
- unlock : 현재 임계 구역을 모두 사용했음을 알림. ( 대기 중인 다른 프로세스/스레드가 임계 구역에 진입할 수 있음 )
뮤텍스는 상태가 0, 1로 이진 세마포어로 부르기도 함
'Computer Basics' 카테고리의 다른 글
페이지 교체 알고리즘 (0) | 2023.10.05 |
---|---|
페이징 & 세그멘테이션 (0) | 2023.10.05 |
경쟁 상태(Race Condition) (0) | 2023.09.12 |
동기식 (Synchronous) / 비동기식 (Asynchronous) 이란? (0) | 2023.09.05 |
데드락(Deadlock) (0) | 2023.09.05 |