운영체제 06

‘Operating System Concepts 8th’를 정리한 글이다.

6.1 배경

협력적 순차적 프로세스 모델은 서로 비동기적으로 실행하면서 데이터를 공유할 수 있다. 3.4.1에는 프로세스들이 메모리를 공유하기 위해 유한 버퍼가 쓰인다.

이 유한버퍼를 쓰기 위한 counter 변수를 만들었다 가정한다. 이 때 적재를 하면 +1을 사용을 하면 -를 넣는다고 할 때 각 프로세스가 동시에 접근하면서 작업을 하게 되면 이 변수 값이 정확하지 않게 된다. 서로 다른 처리 코어에서 병렬로 실행하게 되면 올바른 값을 보장받지 못 한다.

6.2 임계 영역 문제(The Critical-Section Problem)

각 프로세스는 임계 영역이라고 부르는 코드 부분을 포함하고 있고, 그 안에서는 다른 프로세스와 공유하는 변수를 변경하거나, 테이블을 갱신하거나 파일을 쓰거나 하는 등의 작업을 한다.

이 시스템의 중요한 특징은 “한 프로세스가 자신의 임계 영역에서 실행하는 동안 다른 프로세스는 자신의 임계 영역에 들어갈 수 없다”는 것이다. 동시에 두 프로세스가 임계 영역 안에서 실행할 수 없다.

이 시스템을 위해 프로토콜을 설계해야 한다. 임계 영역에 진입하기 위해 진입허가를 요청해야 한다. 이 부분을 진입 영역(entry section)이라 부른다. 임계 영역 뒤에는 퇴출 영역(exit section)이 따라올 수 있다. 코드의 나머지 부분은 나머지 영역(remainder section)이라 부른다.

임계 영역 문제에 대한 해결안은 다음의 세 가지 요구조건을 충족해야 한다.

  1. 상호 배제(mutual exclusion) : 프로세스 P가 자기의 임계 영역에서 실행된다면, 다른 프로세스들은 그들 자신의 임계 영역에서 실행될 수 없다.
  2. 진행(progress) : 자기의 임계 영역에서 실행 중인 프로세스가 없고 자신의 임계 영역으로 진입하려고 하는 프로세스들이 있다면 나머지 영역에서 실행 중이지 않은 프로세스들만 임계 영역으로 진입할 프로세스를 결정하는 데 참여할 수 있으며, 이 선택은 무기한 연기될 수 없다.
  3. 한정된 대기(bounded waiting) : 프로세스가 자기의 임계 영역에 진입하려는 요청을 한 후부터 그 요청이 허용될 때까지 다른 프로세스들이 자신의 임계 영역에 진입하도록 허용되는 횟수는 한계나 제한이 있어야 한다.

6.3 피터슨의 해결안

6.4 동기화 하드웨어(Synchronization Hardware)

6.5 세마포(Semaphores)

6.5.1 사용법
6.5.2 구현
6.5.3 교착상태와 기아(Deadlock and Starvation)
6.5.4 우선순위 역전

6.6 고전적인 동기화 문제들

6.6.1 유한 버퍼 문제
6.6.2 Readers-Writers 문제
6.6.3 식사하는 철학자들 문제

6.7 모니터(Monitors)

6.7.1 사용법
6.7.2 모니터를 사용한 식사하는 철학자 해결안
6.7.3 세마포를 이용한 모니터의 구현
6.7.4 모니터 내에서 프로세스 실행 재개

6.8 동기화 사례

6.8.1 Solaris의 동기화
6.8.2 Windows XP의 동기화
6.8.3 Linux의 동기화
6.8.4 PThreads의 동기화

6.9 원자적 트랜잭션

6.9.1 시스템 모델
6.9.2 로그 기반 복구
6.9.3 검사점(Checkpoints)
6.9.4 동시 실행 원자적 트랜잭션
6.9.4.1 직렬가능성
6.9.4.2 락킹 프로토콜
6.9.4.3 타임스탬프 기반 프로토콜

6.10 요약

comments powered by Disqus