본문 바로가기

CS공부🖥️/운영체제

혼공 컴+운 chapter12. 프로세스 동기화

12-1. 동기화란

동기화의 의미

  • 동시다발적으로 실행되는 많은 프로세스는 서로 데이터를 주고받으며 협력하며 실행될 수 있다. 협력적으로 실행되는 프로세스들은 올바른 실행을 위해서 동기화가 필수다. 
  • 프로세스 동기화 : 프로세스들 사이의 수행 시기를 맞추는 것. 
    • 실행 순서 제어 : 프로세스를 올바른 순서대로 실행하기
    • 상호 배제 : 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하게 하기.
  1. 실행 순서 제어를 위한 동기화 : 동시에 실행되는 프로세스를 올바른 순서대로 실행하는 것
  2. 상호 배제를 위한 동기화 : 공유가 불가능한 자원의 동시 사용을 피하기 위해 사용하는 알고리즘. 동시에 접근해서는 안 되는 자원에 동시에 접근하지 못하게 하는 것. 

생산자 소비자 문제

공유 자원과 임계 구역

  • 공유 자원 : 전역변수, 파일, 입출력장치, 보조기억장치 등 공동의 자원
  • 임계 구역 : 동시에 실행하면 문제가 발생하는 자언에 접근하는 코드 영역. 두 개 이상의 프로세스가 임계 구역에 진입하고자 하면 둘 중 하나는 대기해야 한다. 임계 구역에 먼저 진입한 프로세스의 작업이 마무리되면 기다렸던 프로세스가 임계구역에 진입. 
  • 레이스 컨디션 : 임계 구역은 두 개 이상의 프로세스가 동시에 실행되면 안 되는 영역이지만, 잘못된 실행으로 인해 여러 프로세스가 동시 다발적으로 임계 구역의 코드를 실행하여 문제가 발생하는 경우. 
  • 임계 구역 문제 해결
    • 상호 배제 : 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 임계 구역에 들어올 수 없다.
    • 진행 : 임계 구역에 어떤 프로세스도 진입하지 않았다면 임계 구역에 진입하고자 하는 프로세스는 들어갈 수 있어야 한다.
    • 유한 대기 : 한 프로세스가 임계 구역에 진입하고 싶다면 그 프로세스는 언젠가는 임계 구역에 들어올 수 있어야 한다.

12-2. 동기화 기법

뮤텍스락

  • 동시에 접근해서는 안 되는 자원에 동시에 접근하지 않도록 만드는 도구, 상호 배제를 위한 동기화 도구.
  • 자물쇠 역할 : 프로세스들이 공유하는 전역 변수 lock
  • 임계 구역을 잠그는 역할 : acquire 함수. acquire 함수는 프로세스가 임계 구역에 진입하기 전에 호출하는 함수. 
  • 임계 구역의 잠금을 해제하는 역할 : release 함수. release 함수는 임계 구역에서의 작업이 끝나고 호출하는 함수. 

  • 락을 획득할 수 없다면(임계 구역에 진입할 수 없다면) 무작정 기다리고,
  • 락을 획득할 수 있다면(임계 구역에 진입할 수 있다면) 임계 구역을 잠근 뒤 임계 구역에서의 작업을 진행하고,
  • 임계 구역에서 빠져나올 때엔 다시 임계 구역의 잠금을 해제함으로써 임계 구역을 보호할 수 있다.
  • acquire 함수를 보면, 임계 구역이 잠겨 있을 경우 프로세스는 반복적으로 lock을 확인한다. 이런 대기 방식을 바쁜대기라고 한다. 

세마포

  • 뮤텍스 락은 하나의 공유 자원에 접근하는 프로세스를 상정한 방식이지만, 세마포는 공유 자원이 여러 개 있는 상황에서도 적용이 가능한 동기화 도구이다. 
  •  

  • 임계 구역에 진입할 수 있는 프로세스의개수(사용 가능한 고유 자원의 개수)를 나타내는 전역 변수 S
  • 임계 구역에 들어가도 좋은지, 기다려야 할지를 알려주는 wait 함수
  • 임계 구역 앞에서 기다리는 프로세스에 '이제 가도 좋다'고 신호를 주는 signal 함

 

모니터

  • 세마포는 임계 구역에 앞뒤로 일일이 wait와 signal 함수를 명시해야한다. 모니터는 공유자원과 공유 자원에 접근하기 위한 인터페이스를 묶어 관리하기 때문에 세마포에 비하면 사용자가 사용하기에 훨씬 편리한 도구. 
  • 프로세스는 반드시 인터페이스를 통해서만 공유자원에 접근하도록 한다. 
  • 특정 조건을 바탕으로 프로세스를 실행하고 일시중단하기 위해 모니터는 조건 변수를 사용. 
  • 특정 프로세스가 아직 실행될 조건이 되지 않았을 때에는 wait를 통해 실행을 중단한다.
  • 특정 프로세스가 실행될 조건이 충족되었을 때에는 signal을 통해 실행을 재개한다. 


필수문제

1. 뮤텍스 락과 세마포에 대한 설명으로 옳지 않은 것을 고르세요.(4)

  1. 뮤텍스 락은 임계 구역을 잠근 뒤 임계 구역에 진입함으로써 상호 배제를 위한 동기화를 이룹니다.
  2. 세마포는 공유 자원이 여러 개 있는 상황에서도 이용할 수 있습니다
  3. 세파모를 이용해 프로세스 실행 순서 제어를 위한 동기화도 이룰 수 있습니다.
  4. 세마포를 이용하면 반드시 바쁜 대기를 해야 합니다. 

-> 반드시 바쁜 대기를 하는 것은 아니다.