병행 프로세스의 개요

  • 병행성 : 여러 개의 프로세스 또는 스레드가 동시 수행되는 시스템의 특성
  • 병행 프로세스 : 동시 수행되는 여러 개의 프로세스 또는 쓰레드

  1. 병행 프로세스의 실행 형태
    • 1개의 CPU : 인터리빙 형식
      (이해가 가지 않아서 추가로 더 찾아봤는데 과거에는 1개의 CPU = 1개의 코어라서 사용했던 개념이고 현재의 멀티코어 CPU에서는 1개의 CPU여도 이렇게 적용되지 않음. 또는 초기 개념자체를 1개의 코어라고 이해해도 될듯)
    • 여러개의 CPU : 병렬처리 형식

  2. 멀티프로세서 시스템에서의 메모리 구조에 따라
    • 강결합 시스템 : 공유 메모리 구조. 하나의 메모리를 두고 공유함
    • 약결합 시스템 : 분산 메모리 구조. CPU마다 메모리를 별도로 두고있고 묶음들이 통신선을 두고 공유함

프로세스 간의 관계

  1. 독립 프로세스
    • 수행중인 다른 프로세스에 영향을 주지도 받지도 않음
    • 데이터 및 상태를 다른 프로세스와 공유하지도 않음
    • 프로세스의 실행
      • 결정적 : 실행결과는 입력에 의해서만 결정됨
      • 재생 가능 : 같은 입력에 대해 항상 동일한 실행 결과

  2. 협력 프로세스
    • 수행 중인 다른 프로세스와 영향을 주고받음
    • 데이터 및 상태를 다른 프로세스와 공유
    • 프로세스의 실행
      • 비결정적 : 실행결과는 실행 순서에 좌우됨
      • 재생 불가능 : 같은 입력에 대해 항상 동일한 재생 결과를 보장하지 못함

협력 프로세스의 병행성 문제

협력 프로세스인 경우 발생 가능한 문제

  1. 상호배제
    2개 이상의 프로세스가 동시에 임계영역을 수행하지 못하도록 하는 것
    • 임계영역 : 2개 이상의 프로세스가 동시에 사용하면 안되는 공유자원을 액세스하는 프로그램 코드 영역

  2. 동기화
    2개 이상의 프로세스에 대한 처리순서를 결정하는 것
    • 상호배제 : 임계영역에 대한 동기화 문제

  3. 통신
    • 프로세스들이 데이터를 공유하기 위해 반드시 필요
    • 프로세스간 통신(IPC)
    • 통신방법
      1) 하나의 변수 사용
      2) 메시지를 서로 주고받음

세마포어

  • 상호배제와 동기화 문제를 해결하기 위한 도구
  • Dijkstra가 제안한 방식

  • 정수형 공용 변수
    • 저장값 : 사용 가능한 자원의 수 또는 잠김이나 풀림의 상태
  • 상황에 맞춰 0 이상인 정수로 초기화
  • 두 기본연산 p와 v에 의해서만 사용됨
    • 기본연산 : 인터럽트되지 않고 하나의 단위로 처리됨

  1. 연산 p
    • 검사, 감소 시키려는 시도
       void P(semaphore s)
       {
        if (s>0) {
            s--;
        } else {
            현재 프로세스를 대기시킴
        }
       }
      


  2. 연산 v
    • 증가 시키려는 시도
       void V(semaphore s)
       {
        if (대기 중인 프로세스 없음) {
            s++;
        } else {
            현재 프로세스 1 진행
        }
       }
      


  1. 세마포어마다 대기 큐 필요

세마포어를 이용한 상호배제 해결

  1. 상호배제를 위한 일반적인 요구사항
    • 한 프로세스가 임계영역 수행 중. 다른 프로세스는 임계영역에 진입해서는 안됨
    • 임계영역 수행중이던 프로세스가 임계영역 벗어남. 누군가 하나는 임계영역을 새로이 수행할 수 있어야 함
    • 임계영역 진입 못하고 대기하는 프로세스. 적절한 시간 내에 임계영역 수행을 시작할 수 있어야 함

  2. 상호배제를 위한 임계영역 주변의 코드 영역
     ...
     [ 진입영역 ] // 임계영역에 대한 수행을 해도 되는지 체크
     [ 임계영역 ]
     [ 해제영역 ] // 다른 프로세스가 임계영역 수행을 시작할 수 있도록 함
     ...
    


  1. 세마포어 이용
     ...
     [ P(mutex) ]
     [ 임계영역 ]
     [ V(mutex) ]
     ...
    
    • 세마포어 mutex 초기값은 1
    • 대기 큐는 FIFO로 동작

세마포어를 이용한 동기화 해결

상황 : 프로세스 A가 코드 s1을 수행한 후, 프로세스 B가 코드 s2를 수행하도록 동기화

  1. 프로세스 A
     ...
     [ s1 ]
     [ V(sync) ]
     ...
    
    • 세마포어 sync 초기값은 0

  2. 프로세스 B
     ...
     [ P(sync) ]
     [ s2 ]
     ...
    

Updated: