Home [운영 체제] 4강 - 병행 프로세스
Post
Cancel

[운영 체제] 4강 - 병행 프로세스

💡해당 게시글은 방송통신대학교 김진욱 교수님의 '운영 체제' 강의를 개인 공부 목적으로 메모하였습니다.



학습 개요


  • 최근에는 여러 프로세스가 단순히 순차 처리가 아닌 병행 처리될 필요가 많음
  • 음악 파일을 배경 음악으로 재생하며 동영상도 틀어 놓고 문서 작업을 하는 경우, 운영 체제는 이들을 병행으로 처리해야 함
  • 특히 이렇게 병행 처리되는 프로세스가 서로 유기적으로 상호 작용하며 동작하는 경우에는 해결해야 할 다양한 문제가 존재함
  • 병행 프로세스의 기본 개념과 함께 상호 배제와 동기화 문제를 알아보고 이를 해결하기 위해 제공되는 장치들에 대해 학습함



학습 목표


  • 병행성과 병행 프로세스의 개념을 설명할 수 있음
  • 병행성 문제를 설명할 수 있음
  • 세마 포어의 개념을 설명할 수 있음



강의록


병행 프로세스의 개요

병행성과 병행 프로세스

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

병행 프로세스의 실행 형태

  • 1개의 CPU

    image.png

    • 인터리빙 형식
  • 여러 개의 CPU

    image.png

    • 병렬 처리 형식
  • 멀티프로세서 시스템에서의 메모리 구조에 따라

    • 강 결합 시스템 (공유 메모리 구조)

      image.png

    • 약 결합 시스템 (분산 메모리 구조)

      image.png

프로세스 간의 관계

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

병행성 문제

병행성 문제

  • 협력 프로세스인 경우 발생 가능한 문제
    • 상호 배제
    • 동기화
    • 통신

상호 배제

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

      image.png

      image.png

동기화

  • 2개 이상의 프로세스에 대한 처리 순서를 결정하는 것

    image.png

    • 프로세스 동기화
  • 상호 배제

    • 임계 영역에 대한 동기화 문제

      image.png

통신

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

세마포어

세마포어(semaphore)

  • 상호 배제와 동기화 문제를 해결하기 위한 도구
  • Dijkstra가 제안
  • 정수형 공용 변수
    • 저장 값: 사용 가능한 자원의 수 또는 잠김이나 풀림의 상태
  • 상황에 맞춰 0 이상인 정수로 초기화
  • 두 기본 연산 p와 v에 의해서만 사용됨
    • 기본 연산: 인터럽트되지 않고 하나의 단위로 처리됨
  • 연산 P
    • 검사, 감소 시키려는 시도

      1
      2
      3
      4
      5
      6
      
        void P(semaphore s) {
            if (s > 0)
                s--;
            else
                현재 프로세스를 대기시킴;
        }
      
  • 연산 V
    • 증가

      1
      2
      3
      4
      5
      6
      
        void V(semaphore s) {
            if (대기 중인 프로세스 없음)
                s++;
            else
                대기 중인 프로세스 1 진행;
        }
      
  • 세마 포어마다 대기 큐 필요

상호 배제 해결

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

    image.png

    • 진입 영역
      • 임계 영역에 대한 수행을 해도 되는지 체크
    • 해제 영역
      • 다른 프로세스가 임계 영역 수행을 시작할 수 있도록 함
  • 세마 포어 이용

    image.png

    • 세마포어 mutex 초깃값은 1
    • 진입 영역
      • P(mutex)
    • 해제 영역
      • V(mutex)
    • 대기 큐는 FIFO로 동작
    • 세마포어 sync 초깃 값은 0

상호 배제 해결 예

image.png

  • 프로세스 A가 P의 mutex를 확인
    • mutex가 1이므로 임계 영역 진입 후 mutex 값 1 감소 시킴
  • 프로세스 B가 P의 mutex를 확인
    • mutex 값이 0이므로 대기 큐에서 대기
  • 프로세스 c가 P의 mutex를 확인
    • mutex 값이 0이므로 대기 큐에서 대기
  • 프로세스 A가 V의 mutex를 확인
    • mutex 값이 0이고 대기 큐에 프로세스가 있으므로 대기 큐에 있는 B를 임계 영역에 진입 시킴
  • 프로세스 B가 V의 mutex를 확인
    • mutex 값이 0이고 대기 큐에 프로세스가 있으므로 대기 큐에 있는 C를 임계 영역에 진입 시킴
  • 프로세스 C가 V의 mutex를 확인
    • mutex 값이 0이고 대기 큐에 프로세스가 없으므로 mutex 값 1 증가 시킴

동기화 해결

  • 상황
    • 프로세스 A가 코드 S1을 수행한 후 프로세스 B가 코드 S2를 수행하도록 동기화

      image.png

      • 세마포어 sync 초깃 값은 0
  • 정상 처리 시 동기화 해결
    • 프로세스 A가 S1을 처리 후 V 연산자 실행
      • 대기 하는 프로세스가 없으므로 sync 값 1 증가 시킴
    • 프로세스 B가 S2 처리 전 P 연산자 실행
      • sync 값이 0보다 크므로 1 감소 시키고 S2 처리
  • 정상적이지 않은 처리 동기화 해결
    • 프로세스 B가 먼저 S2 처리 전 P 연산자 실행
      • sync 값이 0이기 때문에 대기 큐에서 프로세스 B 대기 시킴
    • 프로세스 A가 S1 처리 후 V 연산자 실행
      • 대기하는 프로세스가 있으므로 프로세스 B를 깨워 처리함



정리 하기


  • 병행성은 여러 개의 프로세스 또는 쓰레드가 동시에 수행되는 시스템의 특성을 의미하고, 동시에 수행되는 여러 개의 프로세스 또는 쓰레드를 병행 프로세스라고 함
  • 병행 프로세스는 프로세스 간의 관계에 따라 독립 프로세스 또는 협력 프로세스임
  • 협력 프로세스는 병행성과 관련하여 상호 배제, 동기화, 통신과 관련한 다양한 문제가 발생할 수 있음
  • 임계 영역은 2개 이상의 프로세스가 동시에 사용하면 안 되는 공유 자원을 액세스하는 프로그램 코드 영역을 의미함
  • 상호 배제는 2개 이상의 프로세스가 동시에 임계 영역을 수행하지 못하도록 하는 것임
  • 동기화는 2개 이상의 프로세스에 대한 처리 순서를 결정하는 것임
  • 세마포어는 상호 배제와 동기화 문제를 해결하기 위한 정수형 공용 변수로, 2개의 기본 연산 PV에 의해서만 사용될 수 있음

[파이썬 프로그래밍 기초] 4강 - 파이썬 시작하기

[데이터 정보 처리 입문] 4강 - 통계 정보의 검색 및 활용 2