임계구역 (Critical Section)
: 여러 프로세스가 특정 공유자원을 병행하며 읽고 쓰면 "경쟁조건이 발생했다" 라고 말한다.
이 때, 프로그램의 결과는 자원에 접근한 프로세스의 순서에 따라서 달라지는데, 이러한 영역을 임계구역이라고 한다.
ex) 생산자-소비자 문제
- Producer는 물건을 생산하는 input method 를 호출한 뒤 sum을 하나 증가시킨다.
- Consumer는 물건을 소비하는 output method를 호출한 뒤 sum을 하나 감소시킨다.
이 때, 둘 다 sum = 3인 상태에서 동시에 전역 변수 sum에 접근하여 (1) Producer는 sum = 4, (2) Consumer는 sum = 2로 업데이트 하려고 하면 (1)->(2) or (2)->(1) 어떤 순서로 작업이 진행되는지에 따라 최종 sum에 저장되는 값이 달라진다.
임계구역 문제 해결 조건 3가지
o 상호배제 (Mutual Exclusion)
: 한 프로세스가 임계구역에 들어가면 다른 프로세스는 접근 불가
o 한정대기 (Bounced Waiting)
: 특정 프로세스가 임계구역에 접근하지 못하는 무한대기는 발생하면 안됨
o 진행의 융통성 (Progress Flexibility)
: 한 프로세스가 다른 프로세스를 방해해서는 안됨
임계구역 해결 알고리즘 - 뮤텍스(Mutex)와 세마포어(Semaphore)
o 뮤텍스(Mutex)
: 하나의 프로세스가 임계구역에 진입할 때 lock을 수행 --> 임계구역을 빠져나올 수 때 unlock을 수행하여 상호배제를 가능하게 한다.
o 세마포어(Semaphore)
: 하나의 프로세스가 임계구역에 진입할 때 사용가능한 resource의 cnt를 하나 감소시키고 --> 임계구역을 빠져나올 때 다시 cnt를 하나 증가시킨다. 세마포어는 cnt<=0일 때 lock을 발생시키고 다시 cnt>0일 때 unlock을 발생시킨다.
(세마포어의 cnt가 1이면 뮤텍스처럼 동작한다.)
[뮤텍스와 세마포어를 화장실사용에 비교한 설명]
참고: https://worthpreading.tistory.com/90
'CS > OS' 카테고리의 다른 글
[OS] 프로그램이 메모리 사이즈보다 크다면? - 메모리 오버레이 기법 (0) | 2021.11.14 |
---|---|
[OS] 교착상태 (Dead Lock) (0) | 2021.08.30 |
[OS] CPU 스케줄링 방법 (0) | 2021.08.10 |
인터넷익스플로어와 크롬에서 멀티탭 기능 구현 차이 (0) | 2021.08.07 |
[OS] 멀티태스킹, 멀티프로세싱, 멀티스레드 (0) | 2021.08.07 |