Concurrency 방안 3가지
1. Software Approaches - 알고리즘을 잘 설계
2. HW instruction을 이용
3. OS가 제공하는 동기화 툴 이용 (e.g. 세마포, 모니터)
1번과 2번에 이어 3번에 대해 알아보자
3. OS가 제공하는 동기화 툴 이용
2가지에 대해서 다룰 거다
ㅇ세마포(Semaphore): 정수 변수 + (blocked)큐가 결합된 구조체 변수
오로지 3개의 동작만 수행한다
① Initialize: 세마포를 0이나 양수값으로 초기화
(음수값으로 초기화 하는 건 의미가 없다)
② semWait: 세마포값 -1, "blocked 큐에서 wait!"
if (세마포값 >=0) 통과
else if(세마포값 < 0) 프로세스 blocked(blocked 큐에 가서 대기)
③ semSignal: 세마포값 +1, "blocked 큐에서 ready 큐로 이동 signal!"
세마포값 +1 후에 만약 큐에 대기하고 있는 프로세스가 있으면 그중에 하나를 unblocked(ready 큐로 꺼낸다)
- 더한 값은 당연히 0이하다 (만약에 더한 값이 양수라면 대기하고 있는 프로세스가 없다라고 생각하면 된다)
(여기서 알 수 있는 법칙)
세마포(s) = 0: 세마포 큐(blocked 큐)에 프로세스가 0개
세마포(s) = -1: 세마포 큐(blocked 큐)에 프로세스가 1개
세마포(s) = -2: 세마포 큐(blocked 큐)에 프로세스가 2개
프로세스를 semSignal(s)로 하나씩 이동시켜주는 순서에는 2가지 방식이 있다
ㅇStrong Semaphores: FIFO
들어간 순서대로 semSignal(s)
ㅇWeak Semaphores: 순서가 따로 정해져 있지 않다
요즘 대부분의 세마포 방식
ㅇBinary 세마포
<Binary 세마포의 상호배제>
Binary 세마포도 똑같다
ㅁProducer/Consumer Problem
Producers 라는 프로세스들과 Consumers 라는 프로세스들이 있다
Producers: data를 만들어 버퍼에 집어넣는다
Consumers: 버퍼에서 data를 가져간다
(Bounded Buffer)
코드로 나타내면 다음과 같다 (세마포 사용 X)
세마포를 이용해보자!
n: 버퍼에 들어있는 데이터의 개수
e: 버퍼의 빈자리 개수 (버퍼 크기)
bust-waiting 문제 X
Q. 만약에 순서가 바뀐다면 어떻게 될까?
제안) 사용자가 모니터를 이용해서 상호배제 + 동기화 문제를 쉽게 해결
ㅇ모니터(Monitors): 세마포를 이용한 라이브러리 함수
<모니터의 구성>
- 변수들 (모니터 안에서만 사용 가능한 지역변수)
- function들
- 변수들을 초기화하는 코드
<모니터의 특성>
- 프로세스는 function을 통해 모니터 안으로 들어간다
- 모니터 안에서 한 프로세스만 실행 가능 (mutual exclusion)
- 동기화를 위한 condition 변수 有
cwait(c) = semWait(s)
csignal(c) = semSignal(s)
<모니터의 구조>
하얀색 부분: 모니터 / 회색 부분: 모니터에 들어가기 위해 큐에서 대기하는 영역
모니터에 들어가기 위해 큐에서 대기
-> 모니터 자체가 mutual exclusion이 지켜지는 c.s.이다!
모니터를 이용한 Producer/Consumer Problem
Q. (잘못 작성된)세마포와 달리 모니터에서는 데드락이 안 생기는 이유
A. 모니터 안에서 멈춰있는 게 아니라 모니터의 바깥 큐에서 대기하고 있어서 (c.s.안에서 멈춰있지 않다)
ㅁReaders/Writers Problem
- Reader 두 명은 동시에 작업해도 O (단순히 읽는 거라 아무 영향 x)
- Writer 두 명은 동시에 작업하면 X (앞의 은행 예제와 같이 race condition이 발생)
W && W (X)
W && R (X)
R && W (X)
R && R (O)
[Reader가 우선권을 갖는 경우]
효율성 ↑
공정성 ↑
Starvation 방지
<readcount의 2가지 의미>
① 내가 첫 번째 reader인지 마지막 reader인지
② 몇 명이 같이 shared data를 읽고 있는지
(Writer가 우선권을 갖는 코드도 있기는 하다)
(3. OS가 제공하는 동기화 툴 이용 정리)
- 세마포
- 모니터
[장점]
Starvation X
busy-waiting X
3개 이상 process 가능
[단점]
multiple c.s.을 사용하는 경우에 데드락 O
<Concurrency 방안 3가지 총정리>
참고 및 출처: Operating Systems: Internals and Design Principles(William Stalling), Operating System Concepts(Silberschatz, Abraham)
'Computer Science > 운영체제' 카테고리의 다른 글
[운영체제] ep6) Memory Management (1) | 2024.07.02 |
---|---|
[운영체제] ep5) Concurrency: Deadlock and Starvation (0) | 2024.06.30 |
[운영체제] ep4-2) Concurrency: Mutual Exclusion and Synchronization (0) | 2024.06.29 |
[운영체제] ep4-1) Concurrency: Mutual Exclusion and Synchronization (1) | 2024.06.29 |
[운영체제] ep3) 스레드(thread) (1) | 2024.04.08 |