[운영체제]임계영역(Critical Section)

정호석·2022년 6월 1일
0

임계영역이란?

둘 이상의 스레드공유 자원에 접근할 때, 오직 한 스레드만 접근을 허용해야 하는 경우에 사용한다. 일반 동기화 객체와 달리 개별 프로세스의 유저(user) 메모리 영역에 존재하는 단순한 구조체이다. 따라서 다른 프로세스가 접근할 수 없으므로 한 프로세스에 속한 스레드 간 동기화에만 사용한다. 일반 동기화 객체보다 빠르고 효율적이다.

임계영역은 유저 메모리 영역에 생성한다.
(함수 : InitalizeCriticalSection, EnterCriticalSection, LeaveCriticalSection, DeleteCriticalSection)

스레드의 동기화 문제

스레드의 동기화 문제는 다중 스레드일 때 발생가능하며 여러 스레드가 동시에 실행 될 때 2개 이상의 스레드가 동일한 데이터에 접근하여 작업할 경우 문제가 발생할 수 있습니다.
그러므로, 하나의 스레드가 조작하고 있는 공유자원(변수, 데이터)를 다른 스레드가 조작하지 못하도록 하기 위해서 동기화가 필요합니다

LOCK 이란

lock이라는 개념은 의미 그대로 잠그는 행위를 의미한다.
내가 자원을 사용하고 있는 동안에 문을 잠궈서 나 말고는 아무도 못들어오게 하는 방식입니다.
스레드간의 공유도 LOCK 을 이용하여 막습니다.

임계영역의 문제를 해결하기 위해 필요한 조건

  1. 상호 배제(Mutual exclution)
    • 하나의 프로세스가 임계 영역에 들어가 있다면 다른 프로세스는 들어갈 수 없어야한다.
  2. 진행(Progress)
    • 임계영역에 들어간 프로세스가 없는 상태에서 들어가려 하는 프로세스가 여러개라면 어느것이 들어갈지 결정해주어야 한다.
  3. 한정대기(Bounded waiting)
    • 다른 프로세스의 기아(Starvation)를 방지하기 위해, 한번 임계구역에 들어간 프로세스는 다음번 임계 영역에 들어갈 때 제한을 두어야한다.
  • 임계영역의 동시 접근을 해결하기 위한 방법으로는 Lock, Semaphore, monitor 등이 있다
profile
welcome

0개의 댓글