06. 동기화

YeJi Kim·2023년 1월 25일
0

운영체제

목록 보기
6/7
  • 프로세스 동기화
    - 프로세스 동기화란 프로세스들 사이의 수행 시기를 맞추는 것을 의미. 프로세스들 사이의 수행 시기를 맞추는 것은 아래 두 가지를 일컫는다.
    - 실행 순서 제어: 프로세스를 올바른 순서대로 실행하기
    - 상호 배제: 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하게 하기
    - 동기화는 특정 자원에 접근할 때 한 개의 프로세스만 접근하게 하거나, 프로세스를 올바른 순서대로 실행하게 하는 것을 의미.

상호 배제를 위한 동기화

  • 생산자와 소비자 문제
    - 생산자 프로세스와 소비자 프로세스가 제대로 동기화되지 않았기 때문에 발생한 문제

공유 자원과 임계 구역

  • 공유 자원: 동시에 접근해서는 안 되는 공동으로 이용하는 자원. 공유 자원은 전역 변수가 될 수도 있고, 파일이 될 수도 있고, 입출력장치, 보조기억장치가 될 수도 있다.

  • 임계 구역: 동시에 실행하면 문제가 발생하는 공유 자원에 접근하는 코드 영역

  • 레이스 컨디션: 잘못된 실행으로 인해 여러 프로세스가 동시 다발적으로 임계 구역의 코드를 실행하여 문제가 발생하는 경우

    • 레이스 컨디션이 발생하면 데이터의 일관성이 깨지는 문제가 발생
    • 레이스 컨디션이 발생하는 근본적인 이유는 고급 언어 코드는 컴퓨터 내부에서 여러 줄의 저급 언어로 변환되어 실행되기 때문에 이 과정에서 문맥 교환이 일어날 수 있다.
  • 상호 배제를 위한 동기화
    - 두 개 이상의 프로세스가 임계 구역에 동시에 접근하지 못하도록 관리하는 것을 의미
    - 상호 배제를 위한 동기화를 위해서는 아래 세 가지 원칙이 반드시 지켜져야만 한다.
    - 상호 배제: 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 임계 구역에 들어올 수 없다.
    - 진행: 임계 구역에 어떤 프로세스도 진입하지 않았다면 임계 구역에 진입하고자 하는 프로세스는 들어갈 수 있어야 한다.
    - 유한 대기: 한 프로세스가 임계 구역에 진입하고 싶다면 그 프로세스는 언젠가 임계구역에 들어올 수 있어야 한다. (임계 구역에 들어오기 위해 무한정 대기해서는 안 된다.)

동기화 방법

  • 동기화를 이한 대표적인 도구인 뮤텍스 락, 세마포어, 모니터

  • 뮤텍스 락: 좌물쇠 기능을 코드로 구현하여 동시에 접근해서는 안 되는 하나의 공유 자원에 동시에 접근하지 않도록 만드는 도구, 다시 말해 상호 배제를 위한 동기화 도구

    • 뮤텍스 락의 매우 단순한 형태는 하나의 전역 변수와 두 개의 함수로 구현할 수 있다.
      • 자물쇠 역할: 프로세스들이 공유하는 전역 변수 lock
      • 임계 구역을 잠그는 역할: acquire 함수
        • acquire 함수는 프로세스가 임계 구역에 진입하기 전에 호출하는 함수. 만일 임계 구역이 잠겨 있다면 임계 구역이 열릴 때까지 (lock이 false될 때까지) 임계 구역을 반복적으로 확인하고, 임계 구역이 열려 있다면 임계 구역을 잠그는 (lock을 true로 바꾸는) 함수입니다.
      • 임계 구역의 잠금을 해제하는 역할: release 함수
        • release 함수는 임계 구역에서의 작업이 끝나고 호출하는 함수. 현재 잠긴 임계 구역을 열어주는(lock을 false로 바꾸는) 함수라고 보면 된다.
  • 바쁜 대기: 쉴 새 없이 반복하며 확인해보는 대기 방식.

    • 뮤텍스 락과 세마포어에서 사용할 수 있는 공유 자원이 없는 경우 프로세스는 무작정 무한히 반복하며 확인해보는 대기 과정을 거친다. 이렇게 바쁜 대기를 반복하며 확인하는 과정에서 CPU 주기를 낭비한다.
  • 세마포어: 공유 자원이 여러 개 있는 상황에서도 적용 가능한 동기화 도구. 세마포어의 종류에도 이진 세마포어, 카운팅 세마포어가 있으며 이진 세마포어는 뮤텍스 락과 비슷한 개념이다.

    • 세마포어는 뮤텍스 락과 비슷하게 하나의 변수와 두 개의 함수로 단순하게 구현 가능
      • 임계 구역에 진입할 수 있는 프로세스의 개수(사용 가능한 공유 자원의 개수)를 나타내는 전역 변수 S
      • 임계 구역에 들어가도 좋은지, 기다려야 할지를 알려주는 wait 함수
      • 임계 구역 앞에서 기다리는 프로세스에 ‘이제 가도 좋다’고 신호를 주는 signal 함수
    • CPU 주기를 낭비하지 않기 위해 세마 포어는 큐를 사용하는 다른 더 좋은 방법을 사용.
  • 모니터: 세마 포어에 비해 사용자가 사용하기 편리한 동기화 도구로 조건 변수를 사용한다. 공유 자원을 다루는 인터페이스에 접근하기 위한 큐(모니터에 진입하기 위한 큐)를 만들고, 모니터 안에 항상 하나의 프로세스만 들어오도록 하여 상호 배제를 위한 동기화를 제공.


[참고자료]
혼자 공부하는 컴퓨터구조+운영체제(저자: 강민철, 출판사: 한빛미디어)
profile
이전의 기록들 👉 https://blog.naver.com/reviewerkyj

0개의 댓글