Machineboy空

프로세스 동기화, 레이스 컨디션, 상호 배제를 위한 동기화의 원칙 본문

Computer/CS

프로세스 동기화, 레이스 컨디션, 상호 배제를 위한 동기화의 원칙

안녕도라 2024. 1. 16. 11:16

프로세스와 스레드의 동기화 (동기화에 스레드도 포함된다)

 

동시다발적으로 실행되는 프로세스들은 서로 협력하며 영향을 주고 받는다.

이 과정에서 자원의 일관성을 보장해야 한다.

 

동기화란 무엇인지, 동기화가 왜 필요한지, 동기화를 하지 않으면 어떤 문제가 발생하는지 알아보자!

 


동기화의 의미

 

공동의 목적을 위해 동시에 수행되는 프로세스.

  • ex. 워드 프로세서
    • 맞춤법 검사 프로세스
    • 입력 내용을 화면에 출력하는 프로세스 등

아무렇게나 마구 실행하면 안되고, 올바른 수행을 위해 프로세스들은 동기화되어야 한다.

 

(프로세스)동기화란?

 

프로세스들의 수행 시기를 맞추는 것

  • 실행 순서 제어: 프로세스를 올바른 순서대로 실행하기
  • 상호 배제: 동시에 접근해서는 안되는 자원 하나의 프로세스만 접근하게 하기

*실행의 문맥을 갖는 모든 대상은 동기화 대상이기에 스레드도 동기화 대상

 


실행 순서 제어를 위한 동기화: reader writer problem

  • Writer: Book.txt 파일에 값을 저장하는(=쓰는) 프로세스
  • Reader: Book.txt 파일에 저장된 값을 읽어들이는 프로세스

 

실행의 순서가 있기 때문에 Reader와 Writer 프로세스는 무작정 아무렇게나 실행되어선 안된다.

 

Reader 프로세스는 'Book.txt 안에 값이 존재한다'는 특정 조건이 만족되어야만 실행 가능.

 

따라서, 두 개 이상의 프로세스가 있을 때 실행 순서 제어를 위한 동기화가 필요하다.

 


상호 배제를 위한 동기화: Bank account problem

공유가 불가능한 자원의 동시 사용을 피하기 위한 동기화

(= 반드시 한 번에 하나의 프로세스만 가능한 자원, ex 프린터 같은 것)

 

한 번에 하나의 프로세스만 접근해야하는 자원에 동시 접근을 피하기 위한 동기화

 

  • 현재 계좌에 잔액이 10만원있다고 할 때
    • 프로세스 A: 현재 잔액에 2만원 추가하는 프로세스
    • 프로세스 B: 현재 잔액에 5만원 추가하는 프로세스

  • A,B를 동시에 실행한다면 17만원이 잔액에 남을까?

문맥교환이 되었을 때도 읽기프로세스는 기다리고 있어야 함.


상호 배제를 위한 동기화:  Producer & Consumer problem

  • '총합' 변수 공유
    • 물건을 계속해서 생산하는 생산자 (producer,프로세스 혹은 스레드)
    • 물건을 계속해서 소비하는 소비자(consumer, 프로세스 혹은 스레드)
     

 

  • 이 상태에서 생산자를 100,000번, 소비자를 100,000 번 실행하면 '총합'은? 

동기화가 되지 않았기 때문에 발생한 문제

= 동시에 접근해서는 안되는 자원(총합)에 동시에 접근해서 발생한 문제


공유 자원과 임계 구역

  • 공유자원: 여러 프로세스 혹은 스레드가 공유하는 자원
    • ex. 전역 변수, 파일, 입출력장치, 보조기억장치...
  • 임계구역: 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역
    • ex. 앞선 예시의 '총합' 변수, '잔액' 변수
    • 임계 구역에 동시에 접근하려고 하면 문제가 발생하므로
    • 임계 구역에 진입하고자 하면 진입한 프로세스 이외에는 대기해야 한다.
     
  • 레이스 컨디션(race condition) : 임계 구역에 동시에 접근하면 자원의 일관성이 깨진다
    • ex. bank account problem, producer&consumer problem

이미 임계구역에 들어가 실행중인 프로세스가 있다면 다른 프로세스는 대기해야 한다.

 

고급언어는 컴퓨터가 이해할 수 있는 저급언어로 변환한다.

개발자가 작성하는 소스 코드(고급 언어)는 1줄일지 몰라도, 저급 언어로 변환되면 여러 줄.

 

따라서 딱 1줄을 동시에 실행하더라도 실제로는 여러 줄을 실행하는 것이고,

이 중간에 문맥 교환이 일어나면 자원의 일관성이 깨지기 때문에(race condition) 전혀 다른 결과가 나오기도 한다.

 


상호 배제를 위한 동기화를 위한 3가지 원칙

= 운영체제가 임계구역 문제를 해결하는 세 가지 원칙

기술면접에 나왔대

 

  1. 상호 배제 (mutal exclusion)
    • 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 들어올 수 없다
  2. 진행 (progress)
    • 임계 구역에 어떤 프로세스도 진입하지 않았다면 진입하고자 하는 프로세스는 들어갈 수 있어야 한다.
  3. 유한 대기 (bounded waiting)
    • 한 프로세스가 임계 구역에 진입하고 싶다면 언젠가는 임계 구역에 들어올 수 있어야 한다.
    • 임계 구역에 들어오기 위해 무한정 대기해서는 안 된다.