임계 구역 (Critical Section)
임계 구역이란 한 번에 하나의 프로세스 혹은 스레드만 접근 가능한 코드 영역으로 공유 데이터에 접근하는데 있어서
문제가 발생하지 않도록 하나의 접근만 허용함을 보장한다.
일반적으로 4가지의 코드 영역으로 나눠 볼 수 있는데 그 특징은 아래와 같다.
- entry section
- critical section에 진입하기 위해 진입 허가를 요청하는 영역으로 접근을 제어(lock)한다.
- critical section
- 하나의 프로세스 혹은 스레드만 접근 할 수 있는 영역
- exit section
- 제어(lock)을 해제하는 등, 더 이상 임계 구역에 존재하지 않을 때 알리는 역할을 하는 영역
- remainder section
- 입력, 중요, 종료 세션을 제외한 나머지 코드 부분의 영역
위와 같은 영역으로 둘 이상의 프로세스 혹은 스레드가 동시에 임계 구역에 접근할 수 없다.
따라서 상기된 영역 단계에 맞추어 접근해야 하고 만약 임계 구역에 이미 다른 프로세스가 작업을 하고 있다면 entry section에서 대기하고 있다가 exit section에서 작업 종료 신호를 받으면 critical section에 진입하는 식으로 동기화가 진행된다.
만약 이러한 동시접근에 대한 대응이 없어서 임계 구역에 여러 프로세스가 동시에 진입하면 race condition과 같은 문제가 발생할 수 있다.
임계 영역의 동시접근을 해결하기 위해서는 이곳을 보면 된다.
경쟁 상태 (Race Condition)
경쟁 상태란 여러 프로세스 혹은 스레드가 변경/수정 가능한 공유 데이터를 동시에 접근할 때 실행 순서에 따라 실행 결과가 달라지는 상황이다.
만약 두 개의 스레드가 각각 전역 변수 값을 1씩 증가시킨다고 가정하고 이상적인 작업 순서를 위해 전역 변수가 임계 구역이 된다면
결과는 아래와 같다.
두 개의 스레드가 각각 순차적으로 전역 변수의 값을 1씩 증가시켜 2라는 값이 나왔다.
하지만 임계 구역이 보장되지 않은 상태에서 동시에 공유 데이터에 접근하여 연산을 수행한다면
race condition이 발생하여 아래와 같이 원하지 않은 결과가 도출될 수 있다.
이를 해결 하기 위해서는 상황에 맞는 동기화 처리가 반드시 필요하다.
'CS' 카테고리의 다른 글
Garbage Collection (0) | 2022.05.25 |
---|---|
Process와 Thread (0) | 2022.05.17 |
소프트웨어 개발방법론 (0) | 2022.01.20 |
임계 영역 동시접근 해결 방안 (0) | 2021.12.21 |
객체 지향 프로그래밍 및 설계 5가지 원칙 (0) | 2021.03.22 |