ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 8일차 - Process Syncronization(2)
    CS지식/운영체제 2021. 4. 28. 23:31

    저번 시간에 이어 프로세스 동기화에 대해 배웠다.

    오늘은 동기화 시에 발생하는 대표적인 문제에 대해 알아보고 코드를 보면서 해결법을 알아보는 시간을 가졌다.

     

     

     

    1. Bounded-Buffer Problem (Producer-Consumer Problem)

    동기화 문제 중 첫 번째로 Bounded-Buffer Problem이다.

    버퍼의 크기가 유한한 환경에서의 producer(생산자)와 consumer(소비자)의 문제이다.

    버퍼에는 Producer 프로세스와 consumer 프로세스 2가지가 존재하고 버퍼는 공유되어 사용된다.

    producer 프로세스는 공유버퍼에 데이터를 집어넣는 역할을 하고 consumer 프로세스는 공유 버퍼에서 데이터를 꺼내는 역할을 한다.

     

    여기서 발생하는 동기화 문제는 어떠한게 있을까?

    1) 버퍼공간을 사용하려는 경우이다.

    빈 버퍼 공간을 여러 producer가 본 후에 데이터를 넣으려고 동시에 접근한다고 생각해보자.

    이러한 경우 마지막에 데이터를 저장하고 나간 producer 것만 저장되는 문제가 발생한다.

    consumer입장에서도 비슷한 현상이 발생할 것이다.

     

    2) 버퍼공간이 꽉 차있거나 텅 빈 경우이다.

    버퍼공간이 꽉 차있으면 Producer들은 데이터를 넣기 위해서 버퍼 공간이 빌 때까지 기다려야한다.

    하지만 consumer가 접근하지 않는 상황이라면 데이터를 꺼내가지 않게 되고 producer는 계속해서 기다려여야하는 문제가 발생할 수 있다.

    버퍼공간이 모두 비어있는 상황에서는 consumer가 비슷한 상황을 겪게 된다.

     

    이러한 동기화 문제를 해결하기 위해 저번 시간에 언급한 semaphore를 사용하여 해결할 수 있다.

    동시에 공유 버퍼에 접근하는 것을 막기 위해서 lock을 걸어서 하나의 프로세스만 접근할 수 있도록 하고 일을 마치면 unlock하여 다음 프로세스가 접근할 수 있도록한다.

    또한, 버퍼가 가득차거나 모두 비어있을 대 가용자원의 갯수를 세는 용도로 사용할 수 있다.

     

     

    2. Readers-Writers Problem

    위에서는 공유 데이터를 버퍼로 생각하여 문제상황을 알아보았다.

    readers-writers에서는 공유 데이터를 database로 명명하여 문제를 생각해보려고 한다.

    그 이유는 아무래도 데이터베이스에서 데이터를 읽어가고 데이터를 쓰는 과정이 발생하기때문이다.

    여기서는 readers 프로세스와 writers프로세스 2가지가 존재한다.

    readers프로세스는 데이터를 데이터베이스에서 읽어가는 역할을 하고

    writers는 데이터를 데이터베이스에 쓰는 역할을 한다.

     

    우리가 해결해야할 동기화 문제는 다음과 같다.

    write를 할때에는 동시에 작업하면 문제가 발생한다. 여러 프로세스가 하나의 데이터베이스에 접근하여 write한다면 마지막에 저장하고 나간사람의 결과만 저장되기 때문에 문제가 발생한다.

    반면에 read를 할 경우에는 여러 프로세스가 동시에 작업해도 문제가 발생하지 않는다.

     

    문제가 발생하지 않도록 하기위해서는 어떻게 해야할까?

    데이터베이스에 reader프로세스가 접속 중이라면 다른 reader프로세스가 접근하는 것은 허용하도록 해주고 writer 프로세스는 접근하지 못하도록 하면된다.

    반대로 데이터베이스에 writer프로세스가 접속 중이라면 작업이 끝날 때까지 모든 프로세스가 접근하지 못하도록 한다.

    여기서 문제해결상황을 생각해보면 starvation이 발생할 수 있다.

    reader프로세스가 데이터베이스에 접속 중이면 writer 프로세스는 대기 중인 reader가 없을 때까지 기다려야하는 상황이 발생한다.

    이러한 상황(starvation 현상)을 방지하기위해 우선순위를 부여하여 해결해야한다.

     

     

    3. Dining-Philosophers Problem

    여기서 말하는 문제는 5명의 철학자가 식탁에 앉아있는 환경을 가정하여 생각해 본 것이다.

    식탁에서는 생각을 하는 시간을 가지기도 하지만 식사를 하기도 한다.

    하지만 식탁에는 젓가락이 5개만 존재하여 식사를 하고 싶으면 양쪽에 있는 젓가락이 잡아야 한다.

    5명의 철학자가 식탁에 앉아있는 환경

    철학자는 양 쪽에 있는 젓가락을 동시에 잡을 수 없고 왼쪽 젓가락을 잡고 오른쪽 젓가락을 잡으면서 순차적으로 진행된다. 식사를 마친 후에도 왼쪽 젓가락을 놓고 오른쪽 젓가락을 놓는다.

     

    여기서 발생하는 문제는 무엇일까?

    Deadlock이 발생할 가능성이 있다.

    만약 모든 철학자가 식사를 하고 싶어 왼쪽 젓가락을 들고 있는 상황이라면 아무도 식사를 못하는 상황이 발생한다.

    이 외에도 발생할 문제가 있을 수 있지만 대표적인 문제만 언급하고 넘어가겠다.

     

    문제를 해결할 수 있는 방법으로는 여러 개가 있다. 젓가락을 양쪽 모두 집을 수 있는 환경이 만들어져야만 젓가락을 집을 수 있게 하거나 짝수 번째 철학자는 왼쪽 젓가락부터 홀수 번째 철학자는 오른쪽 젓가락부터 집게 하면 해결할 수 있다.

     

    'CS지식 > 운영체제' 카테고리의 다른 글

    10일차 - Memory Management(1)  (0) 2021.05.04
    9일차 - Deadlock(교착상태)  (0) 2021.05.01
    7일차 - Process Syncronization(1)  (0) 2021.04.25
    6일차 - CPU Scheduling  (0) 2021.04.21
    5일차 - 프로세스 관리(Process Management)  (0) 2021.04.18

    댓글

Designed by Tistory.