[운영체제] 동기화

이재혁·2024년 4월 14일
0

동기화란

동시다발적으로 실행되는 프로세스들은 서로 협력하며 영향을 주고 받는다 이 과정에서 자원의 일관성을 보장해야 한다

→ 프로세스들의 동기화를 고려해야 한다

동기화의 의미

동기화란?

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

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

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

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

Reader와 Writer 프로세스는 무작정 실행되어서는 안된다.

실행의 순서가 있기 때문

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

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

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

생산자 소비자 문제

‘총합’ 변수를 공유하는 producer, consumer

생산자를 10만번, 소비자를 10만번 실행하면 ‘총합’은?

→ 전혀 예상치 못한 결과가 나온다.

ex) 63078, -13750

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

공유 자원과 임계 구역

  • 공유 자원: 전역 변수, 파일, 입출력장치, 보조기억장치 와 같은 프로세스 혹은 스레드가 공유하는 자원
  • 임계 구역: 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역
    • 임계 구역에는 한번에 하나의 프로세스만 진입할 수 있다. 나머지는 대기
💡 레이스 컨디션 임계 구역에 동시에 접근하여 자원의 일관성이 깨질 수 있다

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

  • 상호 배제: 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 들어올 수 없다
  • 진행: 임계 구역에 어떤 프로세스도 진입하지 않았다면 진입하고자 하는 프로세스는 들어갈 수 있어야 한다
  • 유한 대기: 한 프로세스가 임계 구역에 진입하고 싶다면 무한정 대기하지 않아야한다.

동기화 기법

여러가지가 있지만, 몇 가지만 알아보자.

Mutex lock

상호 배제를 위한 동기화 도구

  • 자물쇠 역할: 프로세스들이 공유하는 전역 변수 lock

  • 임계 구역을 잠그는 역할: acquire 함수

  • 임계 구역의 잠금을 해제하는 역할: release 함수

  • 바쁜 대기(busy waiting)

    • 임계 구역이 잠겨 있는지를 반복적으로 확인

세마포

  • 임계 구역 앞에서 멈춤 신호를 받으면 잠시 기다리기

  • 임계 구역 앞에서 가도 좋다는 신호를 받으면 임계 구역 진입

  • 사용할 수 있는 자원이 없을 경우 대기 상태로 만듦(PCB를 대기큐에 삽입)

  • 사용할 수 있는 자원이 생겼을 경우 준비 상태로 만듦(PCB를 대기큐에서 꺼내 준비큐에 삽입)

모니터

개발자가 다루기 편리한 동기화 도구

상호 배제를 위한 동기화

  • 인터페이스를 위한 큐
  • 공유자원에 접근하고자 하는 프로세스를 큐에 삽입
  • 큐에 삽입된 순서대로 공유 자원 이용

실행 순서 제어를 위한 동기화

  • 조건 변수 사용
    • 프로세스나 스레드의 실행 순서 제어하기 위해 사용하는 특별한 변수
profile
서비스기업 가고 싶은 대학생

0개의 댓글

관련 채용 정보