--목차--
프로세스 동기화
임계영역
임계영역 문제 해결
--------
1. 프로세스 동기화
1) 정의
하나의 자원을 한 순간에 하나의 프로세스만 이용하도록 정의하는 것
2) 목적
데이터의 비일관성을 방지하기 위함.
(Race Condition : 둘 이상의 동시성을 가진 프로세스/스레드가 하나의 자원에 접근하기 위해 경쟁하는 상태)
- Race Condition이 발생하는 조건
- 커널 작업 수행 중 인터럽트 발생
- 커널 모드에서 데이터를 Load하여 작업을 수행하던 중 인터럽트 발생(같은 데이터 조작)
- 인터럽트의 작업 반영 불가.
- 커널모드에서 작업을 수행하는 동안, 인터럽트를 disable시켜 인터럽트가 CPU 제어권을 가져가지 못하게 함.
- 프로세스가 System call을 통해 커널 모드로 진입하여 작업 수행 도중 Context Switch 발생한 경우
- 프로세스1이 커널모드에서 데이터를 조작하던 도중, 시간이 초과되어 CPU 제어권이 프로세스2로 넘어가 같은 데이터 조작(프로세스2작업 반영 불가)
- 프로세스가 커널모드에서 작업을 수행하는 동안, 시간이 초과되어도 CPU 제어권이 다른 프로세스에게 넘어가지 않도록 함.
- 멀티프로세서에서 공유 메모리 내 커널 데이터에 접근할 경우
- 멀티프로세서 환경에서 2개의 CPU가 동시에 커널 내부의 공유 데이터에 접근하여 조작하는 경우
- 커널 내부에 있는 각 공유 데이터에 접근할 때마아 데이터에 대한 Lock/Unlock 수행
- 커널 모드에서 데이터를 Load하여 작업을 수행하던 중 인터럽트 발생(같은 데이터 조작)
- 커널 작업 수행 중 인터럽트 발생
2. 임계 영역(Critical Section)
1) 정의
동일한 자원을 동시에 접근하는 작업(공유하는 변수 사용, 동일 파일 사용 등)을 실행하는 코드 영역
2) 임계영역 문제(Critical Section Problem)
ㄱ. 정의
프로세스들이 임계영역을 함께 사용할 수 있는 프로토콜을 설계하는 것.
3. 임계영역 문제 해결
1) Requirements
ㄱ. 상호 배제(Mutual Exclusion)
프로세스가 임계영역에서 실행중이라면, 다른 프로세스들은 그들이 가진 임계영역에서 실행될 수 없다.
ㄴ. 진행(Progress)
임계영역에서 실행중인 프로세스가 없고, 별도의 동작이 없는 프로세스들만 임계영역 진입 후보로 참여될 수 있다.
ㄷ. 한정된 대기(Bounded Waiting)
프로세스가 임계영역에 진입 신청 후부터 받아들여질 때까지, 다른 프로세스들이 임계영역에 진입하는 횟수는 제한이 있어야 한다.
2) 해결책
ㄱ. Mutex Lock
ㄱ) 특징
동시에 공유 자원에 접근하는 것을 막기 위해 임계영역에 진입하는 프로세스는 Lock을 획득하고, 임계영역을 빠져나올 때 Lock을 방출한다.
ㄴ) 한계
다중처리기 환경에서는 시간적 효율성 측면에서 적용할 수 없다.
ㄴ. Semephore
소프트웨어상에서 임계영역 문제를 해결하기 위한 동기화 도구
ㄱ) 종류
Counting Semephore
가용한 개수를 가진 자원에 대한 접근 제어용으로 사용됨.
Semephore(가용한 자원 개수로 초기화)
자원 사용시 Semephore 감소, 방출시 Semephore 증가
Binary Semephore
특징
- Mutex와 동일.
- 0과 1 사이 값만 할당 가능.
- 다중 프로세스들 간 임계영역 문제를 해결하기위해 사용
단점
- Busy Waiting
- (Semephore 초기 버전(Spin Lock)에서 임계영역에 진입해야 하는 프로세스는 진입 코드를 계속 반복 실행해야하면서 CPU 시간을 낭비하는 현상.)
- 해결책 : Semephore에서 임계영역에 진입하려다 실패한 프로세스에 대해 Block시킴 + 임계영역에 자리가 날 때 다시 깨움.
- DeadLock(교착 상태)
- Semephore가 ready queue를 가지고 있고, 둘 이상의 프로세스가 Critical Section 진입을 무한정 기다리고 있고, 임계영역에서 실행되는 프로세스는 진입 대기 중인 프로세스가 실행되어야만 빠져나올 수 있는 상황
ㄷ. Monitor
고급 언어의 설계 구조물.
개발자의 코드를 상호배제 하게끔 만든 추상화된 데이터 형태.
공유자원에 접근하기 위한 키 획득과 자원 사용 후 해제를 모두 처리.(Semephore는 직접 키 해제. 공유자원 접근 처리 필요.)
'이론 공부 내용 정리' 카테고리의 다른 글
| [CS 스터디] 동기와 비동기의 차이 (0) | 2022.11.07 |
|---|---|
| [CS스터디] CPU 스케줄러 (0) | 2022.11.07 |
| [CS스터디] 스케줄러 (0) | 2022.11.07 |
| [CS 스터디] DNS Round Robin (0) | 2022.10.31 |
| [CS스터디] 멀티 스레드 (0) | 2022.10.30 |