보안/개념

임계 영역 총정리

수달정보보호 2023. 12. 24. 20:34

1. 임계 영역의 개념

한 순간에 반드시 프로세스 하나만 진입해야 하는 것은 일종의 원칙이다. 그래서 둘 이상의 스레드가 공유 자원에 접근할 때, 오직 한 스레드만 접근을 허용해야 하는 경우에 사용하는 것이 임계 영역(Critical Section)이다. 임계 영역은 지정된 시간이 지난 후 종료된다. 임계 영역은 원자성(atomic) 작업으로 실행되어야 한다. 즉, 하나의 스레드나 프로세스가 임계 영역에 들어가면, 다른 모든 스레드나 프로세스는 실행 중인 스레드나 프로세스가 임계 영역을 종료할 때까지 기다려야 한다는 것이다. 

 

스레드가 공유자원의 배타적인 사용을 보장받기 위해서 임계 구역에 들어가거나 나올 때는 세마포어 같은 동기화 메커니즘이 사용된다. 동기화 메커니즘의 목적은 한 번에 하나의 스레드나 프로세스만 임계 영역을 실행할 수 있도록 하는 것이다.

 

여러 스레드나 프로세스가 서로 간섭하지 않고 동시에 실행될 수 있도록 보장하는 것이 필요하기 때문에 임계 영역의 개념은 컴퓨터 시스템 동기화의 핵심이라 할 수 있다. 세마포어, 뮤텍스, 모니터 및 조건 변수와 같은 다양한 동기화 메커니즘을 사용하여 임계 영역을 구현하고 공유 리소스에 상호 배타적인 방식으로 액세스할 수 있도록 하는 것이다.


동기화에서 임계 영역을 사용하면 여러 스레드나 프로세스가 서로 간섭하지 않고 함께 작동할 수 있으므로 동시 시스템의 성능을 향상시키는 데 유리할 수 있을 것이다. 하지만 잘못된 동기화로 인해 레이스 컨디션과 교착 상태가 발생할 수도 있다. 그렇기에 임계 영역을 설계하고 구현할 때는 이 점을 주의하여야 할 것이다.

 

2. 임계 영역의 문제점

위에서 이미 레이스 컨디션과 교착 상태가 발생할 수 있다는 것을 논했다. 임계 영역을 사용하면 생길 수 있는 문제에 대해 확실히 정리를 해보자.

 

ㄱ. 교착상태

둘 이상의 스레드 또는 프로세스가 서로 임계 영역을 해제하기를 기다리는 경우, 스레드 또는 프로세스 중 어느 것도 이동할 수 없는 교착상태가 발생할 수 있다. 교착상태는 탐지는 물론, 해결 자체가 어려울 수 있고, 프로그램의 성능과 신뢰성에 큰 영향을 미칠 수 있을 것이다.

 

ㄴ. 기아

스레드 또는 프로세스가 반복적으로 임계 영역에 진입하지 못하게 된다면, 스레드 또는 프로세스가 진행되지 못하는 기아 현상이 발생할 수 있을 것이다. 이러한 문제는 임계 영역이 비정상적으로 오래 유지되거나, 스레드 또는 프로세스의 우선순위 문제에 따라도 발생할 수 있다.

 

ㄷ. 오버헤드

임계 영역을 사용할 때 스레드나 프로세스가 세마포어를 획득하고 해제해야 하므로 시간과 자원이 소요될 수 있을 것이다. 이로 인해 프로그램의 전체 성능이 저하될 우려가 있다.

 

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

ㄱ. 상호 배제(Mutual exclusion)

프로세스 하나가 임계 영역에서 실행 중인 경우, 임계 영역에서 다른 프로세스는 실행될 수 없다.

 

ㄴ. 진행(Progress)

임계 영역에서 실행 중인 프로세스가 없는 상황인데, 일부 프로세스가 임계 영역에 들어가려는 상황에 놓여 있다. 이때 어떤 프로세스를 임계 영역으로 보내서 실행할 것인지를 결정해줄 필요가 있다.

 

ㄷ. 한정 대기(Bounded waiting)

프로세스가 임계 영역에 들어가도록 요청한 후, 해당 요청이 승인되기 전에 다른 프로세스가 임계 영역에 들어갈 수 있도록 허용하는 횟수에는 한계 또는 제한이 존재한다. 이는 다른 프로세스의 기아를 방지하기 위함이다.

 

추가로, 임계 영역에서 동시 접근을 해결하기 위한 방법으로는 Lock, Semaphore, Monitor 등이 있다. Lock이란 의미 그대로 잠그는 행위를 말한다. 내가 자원을 사용하고 있다면, Lock을 걸어 나만 그 자원을 독점하도록 하는 것이다. 세마포어와 모니터에 관해서는 아래에서 논할 것이다.

 

3. 임계 영역의 구조

임계 영역은 위와 같이 시각화할 수 있을 것이다.

entry section은 진입 구역으로, 임계 구역에 진입하기 위해 허용을 요구한 코드 영역이다.

exit section은 출구 구역으로, 임계 구역 다음에 나오는 영역으로 임계 구역을 벗어나기 위한 코드 영역이다.

remainder section은 나머지 구역으로, 프로그램의 나머지 코드 영역이다.

 

4. 세마포어, 모니터

ㄱ. 세마포어 상호배제 구현 기법

 


운영체제가 제공하는 자원으로 세마포어 S는 정수 값을 가지는 변수이다. S는 초기화 및 두 개의 연산(P, V 혹은 wait과 signal)으로만 접근 가능한 특수한 변수를 이용하여 상호배제를 구현한다. 

세마포어에는 0과 1의 값만을 갖는 이진 세마포어와 0 또는 정수 값도 갖는 계수형 세마포어가 존재한다.

 

ㄴ. 모니터 상호배제 구현 기법

상호배제 구현을 위해 별도의 프로그램을 작성할 필요가 없으며, 공유 자원을 모니터 내부의 지역 변수로 정의하여 상호배제를 구현할 수 있다.

모니터는 High Level Language를 지원하며, 지역 변수는 모니터 내의 함수(프로시저)에만 접근할 수 있다.

프로세스는 모니터의 프로시저 호출을 통해 모니터에 진입할 수 있는데, 언제나 하나의 프로세스만이 모니터 내부에 존재하는 것으로 이해하면 된다.

728x90

'보안 > 개념' 카테고리의 다른 글

디스크 스케줄링 총정리  (1) 2023.12.26
교착상태 총정리  (0) 2023.12.25
스펨 메일 차단 총정리  (1) 2023.12.23
CPU 스케줄링 기법 총정리  (1) 2023.12.21
프로세스 관리 총정리  (0) 2023.12.20