혼공컴운 챕터 12. 프로세스 동기화

김민영·2023년 2월 11일
0

혼공학습단

목록 보기
10/22

12-1 동기화란

동기화의 의미

  • 여러 프로세스들은 동시에 실행되고 있다.
  • 프로세스 동기화 : 프로세스 간 수행 시기를 맞추는 것. (스레드도 동기화 대상)
    • 실행 순서 제어 : 프로세스를 올바른 순서대로 실행하기
    • 상호 배제 : 동시에 접근해서 안 되는 자원에 하나의 프로세스만 접근토록 하기

생산자와 소비자 문제

  • 생산자 : 물건을 계속 생산함
  • 소비자 : 물건을 계속 소비함
  • 동기화를 하지 않으면, 생산자의 작업이 끝나기 전, 소비자가 작업하거나, 반대의 상황이 발생 -> 생산과 소비의 수가 같아도 결과가 0이 아니게 됨.

공유 자원과 임계 구역

  • 공유 자원 : 여러 프로세스가 같이 사용해야하는 자원
    • 전역 변수, 파일, 입출력장치, 보조기억장치 ...
  • 임계 구역 : 동시에 실행하면 문제 생기는 자원에 접근하려는 코드 영역
  • 레이스 컨디션 : 잘못된 실행으로 인해 여러 프로세스가 임계 구역에 접근해서 문제가 발생
    • 데이터의 일관성이 깨짐 ex. 생산 10, 소비 10 -> 결과가 0이 아님
    • 고급 언어로는 1줄 이어도, 저급 언어로 여러 줄임. 저급 언어 여러 줄이 실행되는 중 다른 프로세스로 문맥 교환이 발생할 때 문제.
  • 상호 배제를 위한 동기화
    • 상호 배제 : 한 프로세스가 임계 구역 접근 중, 다른 프로세스는 접근 불가
    • 진행 : 임계 구역에 접근 중인 프로세스가 없으면, 진입하고자하는 프로세스는 진입 가능
    • 유한 대기 : 임계 구역에 접근하려는 프로세스는 언젠가 꼭 접근해야 함. (무한정 대기는 안됨)

12-2 동기화 기법

뮤텍스 락

  • 임계 구역에 접근하고 있는 프로세스가 있으면, 뮤텍스 락으로 임계구역에 자물쇠를 걸어둠
  • 구현
    • 자물쇠 : 프로세스들이 공유하는 전역 변수 lock
    • 임계구역 잠금 : acquire 함수
    • 임계구역 잠금 해제 : release 함수
  • acquire 함수
    • 프로세스가 임계구역 진입 전에 호출
    • 임계구역이 잠겨있으면, 열릴 때까지 확인
    • 임계구역이 열려있으면, 잠금
  • release 함수
    • 프로세스가 임계구역에서 작업 끝나고 호출
  • acquire 함수가 계속 lock 여부를 확인함 : 바쁜 대기
    • C/C++, Python : 뮤텍스 락을 지원

세마포어 (카운팅 세마포어)

  • 이진 세마포어 : 뮤텍스 락과 비슷
  • 카운팅 세마포어 : 임계구역에 접근하는 프로세스의 개수를 통해 관리
  • 구현
    • 임계구역에 진입 가능한 프로세스 개수 ( 사용가능한 공유자원 개수 ) 전역 변수 S
    • 임계구역 접근 가능 여부. 임계구역 진입 전 : wait 함수
      • S가 0 이하면, 가능해질 때까지 확인
      • S가 1 이상이면, S-- & 임계구역 진입
    • 기다리는 프로세스에게 접근 가능하다고 알림. 임계구역 진출 : signal 함수
      • 임계구역 작업 후, S++
    • 바쁜 대기는 CPU 주기를 낭비하므로 좋지 않음
  • 대기 큐 사용
    • wait 함수에서 S--, 사용할 수 있는 자원이 없으면, 대기 큐에 넣고, 해당 프로세스를 대기 상태로 만듦.
    • signal 함수에서 S++, 대기 큐에서 프로세스를 빼고, 그 프로세스를 대기 상태에서 준비 상태로 만듦.

모니터

  • 공유자원과 공유자원에 접근하기위한 인터페이스(통로)를 무껑서 관리.
    • 프로세스는 인터페이스를 통해서만 공유자원에 접근 가능
  • 모니터는 인터페이스에 접근하기 위한 큐를 만듦.
    • 모니터에 하나의 프로세스만 접근하도록 하여 상호 배제를 위한 동기화
    • 조건 변수를 사용해서 프로세스 실행, 중단 제어. 실행 순서 제어를 위한 동기화
  • 큐는 두 종류 존재
  • 모니터에 진입하기 위해 삽입되는 큐 (상호 배제를 위한 큐)
  • wait가 호출되어 실행이 중단된 프로세스들이 삽입되는 큐 (조건 변수에 대한 큐)
  • 구현
    • wait 함수 : 실행 중지
    • signal 함수 : 실행 재개

p.367 1번

profile
노션에 1차 정리합니당 - https://cream-efraasia-f3c.notion.site/4fb02c0dc82e48358e67c61b7ce8ab36?v=

0개의 댓글