‘Operating System Concepts 8th’를 정리한 글이다.
6.1 배경
협력적 순차적 프로세스 모델은 서로 비동기적으로 실행하면서 데이터를 공유할 수 있다. 3.4.1에는 프로세스들이 메모리를 공유하기 위해 유한 버퍼가 쓰인다.
이 유한버퍼를 쓰기 위한 counter 변수를 만들었다 가정한다. 이 때 적재를 하면 +1을 사용을 하면 -를 넣는다고 할 때 각 프로세스가 동시에 접근하면서 작업을 하게 되면 이 변수 값이 정확하지 않게 된다. 서로 다른 처리 코어에서 병렬로 실행하게 되면 올바른 값을 보장받지 못 한다.
6.2 임계 영역 문제(The Critical-Section Problem)
각 프로세스는 임계 영역이라고 부르는 코드 부분을 포함하고 있고, 그 안에서는 다른 프로세스와 공유하는 변수를 변경하거나, 테이블을 갱신하거나 파일을 쓰거나 하는 등의 작업을 한다.
이 시스템의 중요한 특징은 “한 프로세스가 자신의 임계 영역에서 실행하는 동안 다른 프로세스는 자신의 임계 영역에 들어갈 수 없다”는 것이다. 동시에 두 프로세스가 임계 영역 안에서 실행할 수 없다.
이 시스템을 위해 프로토콜을 설계해야 한다. 임계 영역에 진입하기 위해 진입허가를 요청해야 한다. 이 부분을 진입 영역(entry section)이라 부른다. 임계 영역 뒤에는 퇴출 영역(exit section)이 따라올 수 있다. 코드의 나머지 부분은 나머지 영역(remainder section)이라 부른다.
임계 영역 문제에 대한 해결안은 다음의 세 가지 요구조건을 충족해야 한다.
- 상호 배제(mutual exclusion) : 프로세스 P가 자기의 임계 영역에서 실행된다면, 다른 프로세스들은 그들 자신의 임계 영역에서 실행될 수 없다.
- 진행(progress) : 자기의 임계 영역에서 실행 중인 프로세스가 없고 자신의 임계 영역으로 진입하려고 하는 프로세스들이 있다면 나머지 영역에서 실행 중이지 않은 프로세스들만 임계 영역으로 진입할 프로세스를 결정하는 데 참여할 수 있으며, 이 선택은 무기한 연기될 수 없다.
- 한정된 대기(bounded waiting) : 프로세스가 자기의 임계 영역에 진입하려는 요청을 한 후부터 그 요청이 허용될 때까지 다른 프로세스들이 자신의 임계 영역에 진입하도록 허용되는 횟수는 한계나 제한이 있어야 한다.