일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Intellj
- 알고리즘
- MVC
- Kafka
- retry
- 쿼리
- 코딩
- DP
- golang
- SQL
- JPA
- Spring Cloud Feign
- db
- PL/SQL
- 페이징
- 운영체제
- Spring
- 자바
- 백준
- feign
- aws
- 디자인 패턴
- Spring Cloud
- 자료구조
- Jenkins
- MST
- 데이터베이스
- 오라클
- 클라우드
- Spring Boot
- Today
- Total
justgo_developer
세마포어(Semaphore) 본문
세마포어(Semaphore)
Concurrency 문제를 해결하기 위해 semaphore 사용
즉, 공유된 자원에 여러 프로세스들이 동시에 접근하면서 문제가 발생하는데,
공유된 자원 속 하나의 데이터는 한번에 하나의 프로세스만 접근할수있도록 만들기 위해 사용
Semaphore : integer variable s
3가지 연산만 사용 가능
- Initialization operation : 음수가 아닌 값으로 초기화
- Wait operation : s--
- Signal operation : s++
■ semWait(s)
- 세마포어 값 감소
- 만약 값이 음수가 되면 프로세스는 블럭(대기)한다
- 음수가 아니면 프로세스는 계속 수행한다.
■ semSigna(s)
- 세마포어 값 증가
- 만약 값이 양수가 아니면 semWait 연산에 의해 블록된 프로세스를
ready상태로
● Semaphore 값이 0보다 크거나 같을때
- 세마포어 값은 block되지 않고 semWait을 수행해서 무사 통과할 수 있는 프로세스의 개수
● Semaphore 값이 음수일 때,
- Semaphore의 절대값은 semaphore queue에서 기다리고 있는 프로세스의 개수
**세마포어를 사용하면
- Busy-waiting 없음 : 세마포어 큐에서 기달림
- Starvation 해결 : 세마포어 큐에서 순서대로 처리함
■ Producer/Consumer 문제
-Infinite buffer
- Bounded buffer
◆ 오류인 경우
- mutual exclusion X
- Deadlock
'IT > 운영체제' 카테고리의 다른 글
메모리관리(memory management) (0) | 2018.01.06 |
---|---|
교착상태(Deadlock) (0) | 2018.01.06 |
병행성(concurrency) (0) | 2018.01.02 |
스레드(Thread) (0) | 2018.01.02 |
Process Switching vs Mode Switching (0) | 2017.12.30 |