임계 구역(critical section) 또는 공유변수 영역은 병렬컴퓨팅에서 둘 이상의 스레드가 동시에 접근해서는 안되는 공유 자원(자료 구조 또는 장치)을 접근하는 코드의 일부를 말한다. 임계 구역은 지정된 시간이 지난 후 종료된다. 때문에 어떤 스레드(태스크 또는 프로세스)가 임계 구역에 들어가고자 한다면 지정된 시간만큼 대기해야 한다. 스레드가 공유자원의 배타적인 사용을 보장받기 위해서 임계 구역에 들어가거나 나올때는 세마포어 같은 동기화 매커니즘이 사용된다. Show 코드의 구역[편집]각 프로세스는 자신의 임계 구역에 진입하려면 진입허가를 요청해야 한다. 이런 요청을 구현하는 코드 부분을 입장 구역(entry section)이라고 한다. 입장 구역에서 기다리다가 진입 허가가 나면 임계 구역에 들어간다. 임계 구역 이후에는 임계 구역을 빠져나왔음을 알리는 코드 부분인 퇴장 구역(exit section)이 있다. 또한, 그밖의 나머지 코드 부분들을 총칭하여 나머지 구역(remainder section)이라 한다.
do { wait(mutex); //입장 구역 임계 구역 signal(mutex); //퇴장 구역 나머지 구역 } 임계 구역 문제[편집]임계 구역 문제란 임계 구역으로 지정되어야 할 코드 영역이 임계 구역으로 지정되지 않았을 때 발생할 수 있는 문제를 말한다. 관련 문제[편집]
같이 보기[편집]
병행이란? 병행이란 말 그대로 같이 존재하고 있다는 뜻이며 메모리에 다수의 프로세스가 같이 존재한다는 의미이다. 이런 프로세스들이 어떤 순서로 실행될 것인가 하는 일차적 문제는 스케줄링에서 담당하겠지만 실제 실행 과정에서 프로세스 간의 관계로부터 발생하는 좀 더 복잡한 문제는 세심한 관리를 요구한다. 비동기적(Asynchronous) 병행 프로세스들이 서로 비동기적이라는 말은 다른 프로세스들이 어떤 상태에 있는지, 어떤 자원을 가지고 있는지, 어디까지 실행됐는지 모른 채 실행되고 있음을 의미한다. 공유하는 자원이나 데이터가 있는 병행 프로세스들이 각자 비동기적으로 실행되는 것을 관리하지 못한다면 문제가 생기게 된다. #1. 병행 프로세스 (Concurrent Processes)병행 프로세스들의 비동기적 실행은 서로 공유된 자원이 없는 한 아무 문제없이 독립적으로 진행되지만, 공유된 자원이 있을 경우 이 자원의 접근에는 일정한 룰(Rule)을 따라야 한다. 공유된 자원이나 데이터에 대해 병행 프로세스들이 따라야 하는 룰은 "한 번에 한 프로세스만이 접근하도록 하고, 해당 자원에 대해 의도했던 실행을 완료하도록 보장한다."는 것을 의미한다. #2. 상호배제 (Mutual Exclusion)
임계 영역 문제를 해결하는 메커니즘에 대한 세 가지 충족 요건
#3. 상호 배제를 위한 소프트웨어 기법들Dekker의 알고리즘
Peterson의 알고리즘
Lamport의 Bakery 알고리즘
소프트웨어 기법들의 문제점
#4. 상호 배제를 위한 하드웨어 기법들인터럽트 금지를 사용한 기법
TestAndSet과 Exchange 명령어 testandset과 exchange 명령어
세마포어(Semaphore)
세마포어를 활용하면 상호 배제뿐만 아니라 프로세스 간의 동기화도 쉽게 구현할 수 있다. 하지만 연산 P와 V가 뒤바뀔 경우 임계 영역 문제, 교착 상태 문제가 일어날 수 있다. #5. 생산자-소비자 문제(Producer-consumer Problem)
OS 모니터와 관련한 참고 사이트 : https://codemcd.github.io/study/OperatingSystem-11%EC%9E%A5-%EB%AA%A8%EB%8B%88%ED%84%B0/ Mutex와 세마포어 차이 : https://worthpreading.tistory.com/90 참고 자료
'OS' Related Articles |