봉황대 in CS

[Chapter 6. 프로세스 동기화] Readers-Writers Problem 본문

Computer Science & Engineering/Operating System

[Chapter 6. 프로세스 동기화] Readers-Writers Problem

등 긁는 봉황대 2022. 7. 26. 12:51

* 본 글은 '운영체제(Operating System: Concepts) 9th edition'의 내용과 2021학년도 1학기에 수강한 '운영체제' 과목 강의 내용을 함께 정리하여 작성하였습니다.

 

 

고전적인 동기화 문제들에는 다음의 3가지가 존재한다.

 

  1. 생산자-소비자 문제 (Producer-Consumer Problem)
  2. 독자-저자 문제 (Readers-Writers Problem)
  3. 식사하는 철학자들 문제 (The Dining-Philosophers Problem)

생산자-소비자 문제는 앞에서 임계 구역을 통한 해결법을 다뤘으며,

식사하는 철학자들 문제는 'Chapter 7. 교착상태' 파트에서 다룰 예정이다.

 

Readers-Writers Problem과 그 해결 방안에 대하여 알아보자.

 

Readers-Writers Problem


다수의 병행 프로세스들이 공유버퍼를 대상으로 읽기와 쓰기를 한다고 하자.

 

이때 공유버퍼의 내용을 읽기만 하는 프로세스들을 reader,

공유버퍼의 내용을 갱신(읽고 쓰기)하는 프로세스들을 writer라고 한다.

 

 

하나의 writer가 공유 버퍼를 접근하고 있을 때 다른 reader 또는 writer가 동시에 공유 버퍼에 접근하게 될 경우 혼란이 발생하게 될 것이다.

 

따라서 하나의 프로세스가 공유버퍼에 대해 배타적 접근 권한을 가지게 할 필요가 있으며,

이는 프로세스 동기화 즉, 임계 구역을 설정하는 것을 통해 해결할 수 있다.

 

 

하지만 reader 프로세스가 공유 버퍼를 접근하고 있을 때

writer 프로세스들은 해당 프로세스가 실행을 마칠 때까지 대기해야 하는 것은 당연하지만,

다른 reader 프로세스들도 대기하게 하는 것은 불필요하며, 이는 성능 저하를 유발한다.

 

 

따라서 프로세스들끼리 원칙을 만들어서 적용하는 방법으로 성능을 높이게 된다.

 

1. exclusive lock 또는 writer's lock

writer가 공유 변수나 파일에 접근할 경우, 이 프로세스는 모든 프로세스에 대하여 배타적이다.

== 그 어떤 writer나 reader는 동시에 접근할 수 없다.

 

2. shared lock 또는 reader's lock

reader가 공유 변수나 파일에 접근할 경우, reader끼리는 lock을 공유한다.

== reader끼리는 동시에 접근이 가능하다.

 

단, 둘 중 하나의 lock을 얻기 위해서는 reader 모드인지, writer 모드인지를 반드시 밝히도록 해야 한다.

 

 

 

그러나 이 방법만으로는 무한 봉쇄 또는 기아 상태가 발생할 수 있음을 유의하자.

 

만약 reader 프로세스들이 계속 접근하여 shared lock을 오래 차지하게 될 경우

대기하고 있던 writer 프로세스는 무한히 실행되지 못하는 사태가 발생할 수 있다.

 

이에 대한 해결책으로는 reader-writer 대기 큐와 reader 대기 큐를 분리하는 방법이 존재한다.

(reader-writer 대기 큐에는 많은 reader 프로세스들 중 하나만 들어가도록 하여 writer의 기아 상태를 예방)

 

 

반응형
Comments