6-1주차. 병행 제어

나우히즈·2024년 7월 22일

OS

목록 보기
9/27

지난 시간

(옵시디언 문제로 다른 장소에 작성한 노트가 업데이트되지 않아서 추후 5-2주차를 올리도록 하겠습니다)

Semaphore: 일종의 추상 자료형.

세마포어 변수가 있다면, 그것을 다루는 연산은 P(S), V(S) 두 가지가 있다.
P는 공유 자원을 얻는 과정, V는 공유 자원을 반납하는 과정.

세마포 값이 1이라고 하면, 하나의 프로세스만 공유 데이터 접근이 가능. mutual exclusion 문제를 푸는데 적용.

자원의 갯수를 세는 의미(resource count)로, 세마포 변수 값을 1보다 큰 정수값으로 주면 남은 자원을 세는 역할을 한다.

P, V 연산 구현은 원자적으로 이루어져있으니, 세마포를 이용해서 syncronization을 맞춘다.

세마포가 지원이 되면 임계영역의 문제를 해결할 수 있게 된다.

블록 앤 웨이크업 방식으로 구현.


Deadlock and Starvation

Deadlock: 둘 이상의 프로세스가 서로 상대방에 의해 충족될 수 있는 이벤트를 무한히 기다리는 현상
Starvation: indefinite blocking, 프로세스가 suspend된 이유에 해당하는 세마포어 큐에서 빠져나갈 수 없는 현상.

자원을 얻는 순서를 조절하여 데드락을 방지할 수 있다.

Classical Problem of Synchronization

Bounded-Buffer problem (Producer-Consumer Problem)

버퍼를 채우는 producer 입장에서 서로 같은 버퍼 칸을 채우려는 시도를 하게 되면 데이터가 유실됨.

  1. Empty 버퍼 대기
  2. 공유 데이터(버퍼)에 lock 건다.
  3. Empty buffer 에 데이터 입력 및 buffer 조작
  4. Lock 을 푼다.
  5. Full buffer 하나 증가

위 방식으로 synchronization 진행.

버퍼를 비우는 consumer 입장에서는 비워진 버퍼에 다른 consumer도 같이 채우려는 시도를 하게됨.

  1. full 버퍼 대기
  2. 공유데이터에 lock 건다.
  3. Full buffer에 데이터를 꺼내고 버퍼 조작
  4. lock 해제
  5. empty 버퍼 하나 증가.

여기서 Shared data는 버퍼 자체 및 버퍼의 조작 변수(empty/full buffer의 시작 위치)
Binary Semaphore(= mutex)를 이용하여 버퍼에 오직 하나의 프로세스만 접근할 수 있도록 한다.
또한 남은 full/empty buffer의 수를 세기 위해(resource counting) semaphore갯수를 버퍼 갯수에 맞춰주도록 하자.

Readers and Writers Problem

읽기-쓰기의 문제.
한 process가 DB에 쓰기 중일때, 다른 프로세스가 접근하면 안됨.
읽기는 동시에 여럿이 해도 됨. read는 락을 걸고 접근하면 비효율적이다.
Writer에 대해서는 배타적으로 데이터에 접근하도록 만들어야함.

Solution
1. Writer가 DB 에 접근 허가를 아직 얻지 못한 상태에서는 모든 대기중인 Reader들을 다 DB에 접근하게 해준다.
2. Writer는 대기중인 Reader가 하나도 없을 때 DB 접근이 허용된다.
3. 일단 Writer가 DB에 접근 중이면 Reader들은 접근이 금지된다.
4. Writer가 DB에서 빠져나가야만 Reader의 접근이 허용된다.

이 경우 공유 데이터는 DB 자체와 현재 DB에 접근 중인 Reader의 수(readcount 변수).
-> readcount를 접근하기 위해 mutual exclusion을 보장하기 위해 mutex 사용.
-> db : Reader와 writer가 공유 DB 자체를 올바르게 접근하게 하기위해 세마포 사용.

Dining-Philosophers Problem

식사하는 철학자 문제!
동시에 모든 철학자가 왼쪽 젓가락을 잡으면 모두 밥을 못먹고 다음 젓가락을 기다리는 데드락으로 starvation 발생.

모든 철학자가 동시에 배가 고파져서 왼쪽 젓가락을 집어버린 경우.
Deadlock 발생 가능성이 있다.

해결방안!
1. 4명의 철학자만 테이블에 동시에 앉을 수 있도록 한다.
2. 젓가락을 두 개 모두 집을 수 있을 때에만 젓가락을 집을 수 있게 한다. (젓가락의 상태 확인)
3. 비대칭 -> 짝수 철학자는 왼쪽 젓가락 / 홀수 철학자는 오른쪽 젓가락부터 집도록

0개의 댓글