CS/컴퓨터구조-OS

동기화/동기화기법

이-프 2023. 8. 16. 15:36

💡
Q. 동기화란?

: 특정 자원에 접근할 때 한개의 프로세스만 접근하게 하기

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

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

    프로세스를 올바른 순서대로 실행하기

  • 상호 배제를 위한 동기화

    동시에 접근해서는 안되는 자원에 하나의 프로세스만 접근하게 하기

    ex ) 생산자와 소비자 문제

    : 프로세스나 스레드가 자신만의 독자적인 메모리 주소공간을 사용하지 않고 공유하는 메모리 주소공간이 있을 경우 발생하는 문제

    ⇒ count(총합)이란 데이터를 공유하고 있기에 문제

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

    • 상호배제 : 한 프로세스가 임계구역에 진입했다면 다른 프로세스는 임계 구역에 들어올 수 없다.
    • 진행 : 임계 구역에 어떤 프로세스도 진입하지 않았다면 임계구역에 진입하고자 하는 프로세스는 들어갈 수 있어야 한다.
    • 유한대기 : 한 프로세스가 임계구역에 진입하고 싶다면, 그 프로세느느 언젠가는 임계구역에 들어올 수 있어야한다.
💡
Q. 공유자원이란?

: 전역변수, 파일, 입출력장치, 보조기억장치 등등 프로세스들이 동시에 사용하는 공동의 자원

💡
Q. 임계구역이란?

동시에 시행하면 문제가 발생하는 자원(공유자원)에 접근하는 코드 영역

💡
Q. Race Condition이란?

: 프로세스가 동시 다발적으로 임계 구역의 코드를 실행하여 문제가 발생하는 경우

💡
Q. 동기화 도구는 무엇이 있는가?
  • 뮤텍스 락
  • 세마포
  • 모니터
💡
Q. 뮤텍스 락이란?

동시에 접근해서는 안되는 자원에 동시에 접근하지 않도록 만드는 도구

: 하나의 공유 자원에 접근하는 프로세스를 상정한 방식

  • 자물쇠 역할 : 프로세스들이 공유하는 전역 변수 lock
  • 임계 구역을 잠그는 역할 : acquire 함수
  • 임계 구역의 잠금을 해제하는 역할 : release 함수

문제점

  • Busy Wait

    프로세스가 반복적으로 임계 구역이 잠겨있는지 (lock)를 확인하는 문제

💡
Q. 세마포란?

** 뮤텍스 락에 비해 일반화된 동기화 도구

: 공유자원이 여러개 있을 경우, 여러 개의 프로세스가 각각 공유 자원에 접근할 때

  • 전역변수 S : 임계구역에 진입할 수 있는 프로세스의 개수 (= 사용 가능한 공유 자원의 개수)
  • wait 함수(P) : 임계구역에 들어가도 좋은지, 기다려야 할지 알려주는 함수
  • signal 함수(V) : 임계구역 앞에서 기다리는 함수에게 “들어가도 된다”고 신호를 주는 함수

[상호 배제를 위한 동기화]

문제점

  • Busy Wait

    프로세스가 반복적으로 임계 구역이 잠겨있는지 (lock)를 확인하는 문제

해결점

  1. wait함수는 사용할 수 있는 자원이 없을 경우 해당 프로세스 상태를 대기 상태로 만들고, 그 프로세스의 PCB를 세마포를 위한 대기 큐에 집어 넣는다.
  1. 다른 프로세스가 임계 구역에서의 작업이 끝나고 signal 함수를 호출하면 signal 함수는 대기 중인 프로세스를 대기 큐에서 제거하고, 프로세스 상태를 준비 상태로 변경한 뒤 준비큐로 옮긴다.

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

: 세마포어 변수 S를 0으로 두고 먼저 실행할 프로세스 뒤에 signal 함수, 다음에 실행할 프로세스 앞에 wait 함수를 붙이기

💡
Q. 모니터란?

** 매번 임계 구역 앞뒤로 일일이 wait와 signal함수를 명시하는 세마포에 비해 편리한 도구

[상호 배제를 위한 동기화]

: 공유 자원과 공유 자원에 접근하기 위한 인터페이스를 묶어서 관리 (프로세스 → 인터페이스 → 공유자원 접근가능)

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

: 특정 조건을 바탕으로 프로세스를 실행하고 일시 중단하기 위해 조건변수(CV) 사용

  • wait : 특정 프로세스가 아직 실행될 조건이 되지 않았을 때, wait을 통해 실행을 중단
  • signal : 특정 프로세스가 실행될 조건이 충족되었을 때 signal을 통해 실행을 재개


Uploaded by N2T