공유자원과 임계 영역
공유자원과 임계 영역
공유 자원 (Shared Resource):
공유 자원은 여러 프로세스나 스레드에 의해 동시에 접근될 수 있는 데이터나 자원을 가리킵니다.
예를 들어, 메모리, 파일, 네트워크 연결, 데이터 구조, 프린터 등은 공유 자원의 예입니다.
여러 프로세스나 스레드가 공유 자원을 동시에 수정하거나 읽는 경우,
데이터 일관성과 안전성 문제가 발생할 수 있습니다.
임계 영역 (Critical Section):
임계 영역은 공유 자원에 접근하는 코드 또는 섹션을 가리킵니다.
임계 영역은 여러 프로세스나 스레드가 동시에 접근하지 못하도록 보호되어야 합니다.
그렇지 않으면 공유 자원에 대한 경쟁 조건 (Race Condition)이 발생할 수 있습니다.
이것은 예측할 수 없는 결과를 초래할 수 있으며 데이터 불일치와 같은 문제를 유발합니다.
임계 영역을 관리하기 위한 조건
상호 배제 (Mutual Exclusion):
임계 영역에 들어가려는 프로세스나 스레드는 다른 프로세스나 스레드가 진입하지 못하도록 막아야 합니다.
진행 (Progress):
어떤 프로세스나 스레드가 임계 영역에 들어가려고 하는데 아무런 문제가 없을 때,
반드시 어떤 프로세스나 스레드가 들어가야 합니다. 즉, 무한 대기 상태에 빠지지 않아야 합니다.
한정된 대기 (Bounded Waiting):
임계 영역에 들어가려고 하는 프로세스나 스레드는 한정된 횟수 내에서 들어갈 수 있어야 합니다.
다른 프로세스나 스레드에게 계속해서 밀리는 상황을 방지하기 위함입니다.
임계 영역을 관리하기 위한 여러 동기화 메커니즘과 알고리즘이 존재하며,
세마포어, 뮤텍스, 모니터 등이 그중 일부입니다.
이러한 메커니즘을 사용하여 공유 자원에 안전하게 접근할 수 있고,
다중 프로세스나 스레드 환경에서의 동시성 문제를 해결할 수 있습니다.
임계 영역 관리
뮤텍스 (Mutex):
뮤텍스는 상호 배제를 구현하는 가장 일반적인 동기화 메커니즘 중 하나입니다.
오직 하나의 스레드만 임계 영역에 들어갈 수 있도록 뮤텍스를 사용합니다.
다른 스레드가 해당 뮤텍스를 획득하기 위해서는 뮤텍스가 해제될 때까지 대기해야 합니다.
세마포어 (Semaphore):
세마포어는 뮤텍스와 비슷한 원리로 상호 배제를 제공하지만,
여러 스레드가 동시에 접근할 수 있는 허용 가능한 스레드 수를 지정할 수 있습니다.
세마포어는 일반적으로 정수로 나타내며, 이 값이 1인 경우 뮤텍스와 동일한 동작을 합니다.
모니터 (Monitor):
모니터는 객체 지향 언어에서 사용되는 동기화 메커니즘으로,
객체에 속한 메서드나 코드 블록을 동기화합니다.
모니터를 사용하면 오직 한 스레드만 모니터에 진입할 수 있으며,
다른 스레드는 대기합니다. Java의 synchronized 키워드와 C#의 lock 문은 모니터를 사용하는 예입니다.
스핀락 (Spinlock):
스핀락은 다른 스레드가 임계 영역을 떠날 때까지 계속해서 반복하여 임계 영역에 접근을 시도하는
동기화 메커니즘입니다.
스핀락은 대기 시간을 최소화하려는 목적으로 사용되며,
다른 동기화 메커니즘과 달리 블록되지 않고 계속해서 CPU를 사용합니다.
이러한 동기화 메커니즘 중에서 선택하는 것은 프로그램의 요구사항과 특성에 따라 다릅니다.
뮤텍스와 세마포어는 가장 일반적으로 사용되는 동기화 메커니즘 중 하나이며,
모니터는 객체 지향 언어에서 유용하게 활용됩니다.
스핀락은 대기 시간을 최소화해야 하는 고성능 시스템에서 사용됩니다.
동기화 메커니즘을 올바르게 사용하면 다중 스레드 환경에서의 임계 영역 문제를 효과적으로
관리할 수 있습니다.
공유자원 임계영역 자세히알기!!
물류 센터에서 여러 로봇이 상자를 이동시키는 작업을 고려해 보겠습니다.
이때, 상자를 이동하는 로봇들은 공유 자원이며, 상자를 집거나 놓는 부분은 임계 영역입니다.
공유 자원 예시: 상자
여러 로봇이 공유 자원인 '상자'에 동시에 접근하려고 할 수 있습니다.
여러 로봇이 동시에 상자를 끌거나 놓을 경우, 상자의 위치와 상태가 정확하지 않게 되어 충돌이
발생할 수 있습니다.
이것이 공유 자원을 관리하지 않았을 때의 문제입니다.
임계 영역 예시: 상자를 집거나 놓는 부분
여러 로봇이 상자를 동시에 집거나 놓을 때, 이 과정을 임계 영역으로 간주합니다.
임계 영역에서는 오직 한 대의 로봇만 상자를 조작할 수 있어야 합니다.
즉, 두 로봇이 동시에 상자를 집거나 놓으려고 하면 충돌이 발생하므로 이를 방지해야 합니다.
임계 영역을 관리하기 위해 뮤텍스, 세마포어, 또는 다른 동기화 메커니즘을 사용하여 한 번에
하나의 로봇만 상자를 조작할 수 있도록 보호합니다.
이로써 충돌을 방지하고, 상자의 위치와 상태를 안전하게 유지할 수 있습니다.
*바쁜 사람을 위한 깜찍한 정리
공유자원은 여러 프로세스나 스레드에 의해 동시에 접글될 수 있는 데이터를 나타내는 것으로 프린터 등을 공유 자원이라고 합니다. 해당 공유 자원을 동시에 접근을 하거나 수정을 하는 경우 안전성 문제가 발생할 수 있기 때문에 이것을 보호하고 방지해 주는 것이 임계 영역입니다. 하나의 스레드만 임계 영역에 들어갈 수 있게 해주는 뮤텍스 허용 가능한 스레드 수를 지정할 수 있는 세마포어 등이 있습니다.
'목차훔치기 > 면접을 위한 CS 전공지식 노트' 카테고리의 다른 글
CPU 스케줄링 알고리즘(면접을 위한 CS 전공지식 노트) (0) | 2023.09.23 |
---|---|
교착 상태(면접을 위한 CS 전공지식 노트) (0) | 2023.09.22 |
스레드와 멀티스레딩(면접을 위한 CS 전공지식 노트) (0) | 2023.09.20 |
멀티프로세싱(면접을 위한 CS 전공지식 노트) (0) | 2023.09.19 |
PCB(면접을 위한 CS 전공지식 노트) (0) | 2023.09.18 |