세마포어

2021. 2. 25. 17:28Computer(인강)/운영체제

728x90
반응형

안녕하세요 bannavi입니다^ㅅ^

오늘은 세마포어에 대해서 다뤄볼거에요

그럼 바로 시작하겠습니다!!

 

 

 

동기화(Synchronization) 이슈

 

동기화 : 작업들 사이에 실행 시기를 맞추는 것

여러 스레드가 동일한 자원(데이터) 접근시 동기화 이슈 발생

- 동일 자원을 여러 스레드가 동시 수정시, 각 스레드 결과에 영향을 줌

 

 

 

 

동기화 이슈 해결 방안 

- Mutual exclusion(상호 배제)

- 쓰레드는 프로세스 모든 데이터를 접근할 수 있으므로,

1. 여러 스레드가 변경하는 공유 변수에 대해 Exclusive Access 필요

2. 어느 한 스레드가 공유 변수를 갱신하는 동안 다른 스레드가 동시 접근하지 못하도록 막기

 

 

 

 

Mutual exclusion(상호 배제)

1. 임계 자원(critical resource)

2. 임계 영역(critical section)

 

 

 

동기화(Synchronization)와 세마포어

 

Mutex와 세마포어(Semaphore)

 

* Critical Section(임계 구역)에 대한 접근을 막기 위해 LOCKING 메커니즘이 필요

- Mutex(binary semaphore)

: 임계구역에 하나의 스레드만 들어갈 수 있음

 

- Semaphore

: 임계구역에 여러 스레드가 들어갈 수 있음

: counter를 두어서 동시에 리소스에 접근할 수 있는 허용 가능한 스레드 수를 제어

 

 

 

세마포어(Semaphore)

P: 검사(임계영역에 들어갈 때)(lock.acquire())

- S값이 1 이상이면, 임계 영역 진입 후, S값 1 차감(S값이 0이면 대기)

 

V: 증가(임계영역에서 나올때)(lock.release())

- S값을 1 더하고, 임계 영역을 나옴

 

S: 세마포어 값(초기 값만큼 여러 프로세스가 동시 임계 영역 접근 가능)

 

 

 

 

 

 

세마포어 (Semaphore) - 바쁜 대기

- wait()은 S가 0이라면, 임계영역에 들어가기 위해, 반복문 수행

- 바쁜 대기, busy waiting

 

 

 

세마포어 (Semaphore) - 대기큐

-> 운영체제 기술로 보완 - 대기큐

* S가 음수일 경우, 바쁜 대기 대신, 대기큐에 넣는다.

 

 

 

세마포어 (Semaphore)

* wakeup() 함수를 통해 대기큐에 있는 프로세스 재실행

 이렇게 하면 roop를 돌지 않기 때문에, cpu 부하를 줄이면서도 여러 스레드를 세마포어로 처리할 수 있다.

 

 

참고: 주요 세마포어 함수 (POSIX 세마포어)

* sem_open() : 세마포어를 생성

* sem_wait() : 임계영역 접근 전, 세마포어를 잠그고, 세마포어가 잠겨있다면, 풀릴때까지 대기

* sem_post() : 공유자원에 대한 접근이 끝났을때 세마포어 잠금을 해제한다.

728x90
반응형

'Computer(인강) > 운영체제' 카테고리의 다른 글

가상 메모리 개념  (0) 2021.02.25
deadlock과 starvation  (0) 2021.02.25
스레드 동기화 문제  (0) 2021.02.25
스레드 장단점  (0) 2021.02.23
스레드 개념  (0) 2021.02.23