728x90

4.1 병행 프로세스의 개요

4.1.1 병행성과 병행 프로세스

동시수행

  • 한 프로세스나 쓰레드가 실행을 시작한 후 종료상태가 되지 않은 상황에서 다른 프로세스나 쓰레드가 실행되는 상황
    병행성(concurrency)
  • 여러 개의 프로세스 또는 쓰레드가 동시 수행되는 시스템의 특성
    병행 프로세스
  • 동시 수행되는 여러 개의 프로세스 또는 쓰레드
    CPU 개수에 따른 병행 프로세스의 실행 형태
  • 하나의 CPU : 인터리빙 형식
  • 여러 개의 CPU(멀티프로세서 시스템) : 메모리 구조에 따른 실행 형태
    • 강결합 시스템 : 하나의 기억장치를 공유하는 여러 CPU를 하나의 운영체제가 제어함
    • 약결합 시스템 : 각 시스템이 개별 운영체제로 독립적으로 운영되고 필요시 네트워크로 통신함

4.1.2 프로세스 간의 관계

독립 프로세스

  • 수행 중인 다른 프로세스의 영향을 주지도 않고 받지도 않는 프로세스
  • 프로세스의 데이터와 상태를 다른 프로세스와 공유하지 않음
  • 프로세스의 실행
    • 결정적 : 실행결과는 입력에 의해서만 결정됨
    • 재생 가능 : 실행결과는 같은 입력에 대해 항상 동일함
  • 타 프로세스와 무관하게 중단되거나 재시작될 수 있음
    협력 프로세스
  • 수행 중인 다른 프로세스와 영향을 주고받으며 동작하는 프로세스
  • 프로세스의 데이터와 상태를 다른 프로세스와 공유함
  • 프로세스의 실행
    • 비결정적 : 실행결과는 실행순서에 좌우됨
    • 재생 불가능 : 실행결과는 같은 입력에 대해 항상 동일함을 보장하지 못함

4.2 병행성 문제

4.2.1 상호배제

상호배제(mutual exclusion)

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

4.2.2 동기화

프로세스 동기화(synchronization)

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

4.2.3 통신

프로세스 간 통신(InterProcess Communication : IPC)

  • 프로세스들이 데이터를 공유하기 위해 반드시 필요한 것
    프로세스 사이의 통신 방법
  • 하나의 변수를 사용하는 방법
  • 메시지를 서로 주고받는 방법

4.3 세마포어

  • 상호배제와 동기화 문제를 해결하기 위한 도구
  • 데이크스트라(Dijkstra, 다익스트라)가 제안함

4.3.1 세마포어의 정의

세마포어(semaphore)

  • 정수형 공용변수
    • 저장값 : 사용 가능한 자원의 수 또는 잠김이나 풀림의 상태
  • 초기화 : 0 이상인 정수로 상황에 맞게 초기화함
  • 두 기본연산 P와 V에 의해서만 사용됨
    • 기본연산 : 인터럽트되지 않고 하나의 단위로 처리됨
    • 연산 P : 검사 또는 감소시키려는 시도
    • 연산 V : 증가
      세마포어 s에 대한 연산 P(s)의 동작
  • 세마포어 s가 0보다 크면, 세마포어 s를 1만큼 감소시킴
  • 세마포어 s가 0보다 크지 않다면, 현재 프로세스는 연산 P를 완료하지 못한 채 대기상태로 전이
    • 이때 세마포어 s의 대기 큐에 현재 프로세스 추가
      세마포어 s에 대한 연산 V(s)의 동작
  • 세마포어 s의 대기 큐가 비어 있다면, 세마포어 s를 1만큼 증가시킴
  • 세마포어 s의 대기 큐가 비어 있지 않다면, 큐에서 한 프로세스를 빼서 준비상태로 전이
    • 이때 큐는 FIFO(First In First Out)로 동작하는 것으로 가정함

4.3.2 상호배제 해결

세마포어 mutex

  • 초깃값 : 1
    진입영역
  • 임계영역에 대한 수행을 해도 되는지 체크하는 코드를 임계영역의 시작부분에 둠
  • 연산 P(mutex)

해제영역

  • 다른 프로세스가 임계영역 수행을 시작할 수 있도록 하는 코드를 임계영역의 끝 부분에 둠
  • 연산 V(mutex)

4.3.3 동기화 해결

  • 프로세스 A가 특정 코드 S_1을 수행한 후에 프로세스 B가 코드 S_2를 수행 하도록 동기화를 하는 경우
  • 세미포어 sync
    • 초깃값 : 0
  • 코드 S_2 앞에 연산 P(sync)
  • 코드 S_1 뒤에 연산 V(sync)

참고 문헌 : 김진욱·이인복. 운영체제 워크북. 한국방송통신대학교출판문화원, 2023.

728x90

+ Recent posts