Critical Section
Critical Section은 (임계구역 또는 공유변수 영역) 병렬프로그래밍에서 둘 이상의 스레드 (멀티스레드)가 동시에
접근해서는 안되는 공유 자원(파일, 입출력, 공유 데이터 등) 을 접근하는 명령문 또는 코드의 일부 영역을 말합니다.
병렬프로그래밍에서 A라는 스레드가 공유 데이터의 값 변경을 시도하는 순간 B라는 스레드가 그 값을 읽는다면
그 값이 변경된 값인지 변경되기 전 값인지 예측할 수 없습니다. 이러한 문제로 동기화 처리 (synchronized)를
반드시 해줘야하며, 임계구역에 실행되는 스레드는 lock을 획득하게 되는데 이 lock은 오직 하나의 스레드만 가질 수 있습니다.
임계 구역 문제를 해결하기 위해서는 아래와 같이 3가지 조건을 충족해야합니다.
상호 배제 (mutual exclusion)
- 하나의 프로세스가 임계 구역에서 실행되고 있다면, 다른 프로세스들은 임계 구역에서 실행될 수 없습니다.
진행 (progress)
- 임계 구역에 실행되고 있는 프로세스가 없을 경우, 들어갈 프로세스를 적절히 선택해줘야합니다.
한정된 대기 (bounded waiting)
- 프로세스의 기아를 방지하기 위해, 한번 임계 구역에서 실행된 프로세스는 다음 실행에 대한 제한을 두어야합니다.
코드의 구역
입장 구역(entry section)
- 각 프로세스가 자신의 임계 구역에 진입하기 위해서 진입허가 요청을 구현하는 코드 영역
임계 구역(critical section)
- 입장 구역에서 진입허가가 나면 임계 구역에 진입
퇴장 구역(exit section)
- 임계 구역을 빠져나왔음을 알리는 코드 영역
나머지 구역(remainder section)
- 이 외에 다른 코드 부분들을 총칭하는 나머지 구역
Ex)
do {
wait(mutex); //입장 구역
임계 구역
signal(mutex); //퇴장 구역
나머지 구역
}
'FreeRTOS > FreeRTOS 기본 학습' 카테고리의 다른 글
Hard Real-Time Task에서 Deadline에 도달하면 어떻게 될까? (0) | 2019.12.18 |
---|---|
FreeRTOS - 힙 메모리 관리 (0) | 2019.08.27 |
14 FreeRTOS Tutorial: Mutex (0) | 2019.07.08 |
12 FreeRTOS Tutorial: Direct To Task Notifications part2 (0) | 2019.06.27 |
11 FreeRTOS Tutorial: Direct To Task Notifications part1 (0) | 2019.06.27 |