본문 바로가기

cs

OS - 병행 프로세스 문제 해결

병행 프로세스 문제 해결


 * 동시에 두 개 이상의 프로세스들을 병행처리하면 여러 가지 문제가 발생 할 수 있다
 * 상호배제 기법, 임계영역, 동기화 기법 등으로 해결 가능하다

1. 비동기 병행 프로세스


1.1 상호배제

 비동기 병행 프로세스들은 실행 시 메모리를 공유하여 사용하다 보니 어떤 프로세스가 메모리에 쓰고 있는 동안 다른 프로세스가 메모리를 읽는 현상이 발생되기도 한다. (경쟁조건) 가끔 순서에 따라 출력되는 결과가 달라질 수 있다 이러한 현상을 제어하기 위해 상호배제가 필요하다
  • 한 프로세스가 공유 기억장치 또는 공유 기억 파일을 사용 중 일때 다른 프로세스들이 사용하지 못하도록 배제시키는 제어기법
  • 임계영역의 개념을 이용하여 두 프로세스가 하나의 공유자원을 상호배타적으로 사용할 수 있게 하면서 동시에 수행할 수 없도록 하는 것

1.2 임계영역

  • 한 순간에 하나의 프로세스만 사용할 수 있는 영역
  • 공유자원의 독점 보장
  • 임계영역의 문제해결을 위한 조건
    • 상호배제 조건
      • 두 개 이상의 프로세스들이 동시에 임계영역에 있어서는 안 된다
      • 임의의 프로세스 P가 임계 영역에서 수행 중일때 다른 프로세스는 임계영역에서 수행될 수 없다
      • 각 프로세스는 임계영역에 들어가기위해 미리 요청한다
    • 진행 조건
      • 임계영역 바깥에 있는 프로세스가 다른 프로세스의 임계영역 진입을 막아서는 안 된다
      • 임계영역에서 수행하는 프로세스가 없고 여러 개의 프로세스가 임계영역으로 들어가려 하면 프로세스 선정 알고리즘을 이용해 다음 대상 선정
    • 한계 대기 조건
      • 임의 프로세스가 임계영역으로 들어가는 것이 무한정 연기 되어서는 안 된다

2. 동기화된 프로세스


2.1 Test-and-set

  • 논리변수를 읽어 다른 저장소에 보관하고 그 변수에 새로운 값을 부여하는 일련의 명령을 인터럽트를 허용하지 않고 처리해 주는 단일 하드웨어 명령문
function TestAndSet(boolean lock) { // 초기값 = false 
  boolean initial = lock
  lock = true
  return initial
 }

 // 임계영역에 존재 = true
 // 임계영역에 존재하지 않음 = false

2.2 semaphore(세마포어)

  • 여러 개의 프로세스가 동시에 자원을 요청하면 시스템이 순서를 정해 각 프로세스에 제어신호를 전달하여 순서대로 작업 수행
  • P연산(- 연산)과 V연산(+ 연산)으로 동기화를 유지
  • Wait (P연산)
    • P(S) = S - 1
    • 자원점유를 알리는 것으로 자원의 갯수를 감소시킨다
  • Wake Up (V연산)
    • V(S) = S + 1
    • 자원을 반납한 것을 알리는 것으로 자원의 갯수를 증가시킨다

2.3 시간종속 오류

  • 프로세스들이 임의로 변수를 공유할 때 발생
  • 어떤 특정 순서로 실행될 때에만 발생하는 데, 항상 발생하지 않기 때문에 탐지하기가 어렵다
  • 세마포어 사용으로도 발생 가능하다

2.4 모니터

  • 순차적으로만 사용할 수 있는 공유자원 또는 공유자원 그룹을 할당하기 위한 병행성 구조
  • 공유자원과 데이터를 처리하는 프로시저로 구성되며 모니터 내의 공유자원을 사용하기 위해서는 모니터의 진입부를 호출해야 한다
  • 여러 개의 프로세스들이 동시에 모니터에 들어가려 할 경우 모니터 자체는 한순간에 하나의 프로세스만 진입하여 자원을 사용할 수 있도록 한다
  • 모니터 내부의 변수는 모니터 내부에서만 접근 가능하다

3. 프로세스 간의 통신


 * 프로세스간 자원을 송수신

3.1 직접통신

  • 메시지를 주고받기를 원하는 각각의 프로세스가 통신의 송신자나 수신자의 이름을 외부적으로 표현하여 직접 send, receive 명령을 통해 메시지 송수신

직접통신

3.2 간접통신

  • 2개의 프로세스가 공유 우편함을 통해 통신

간접통신

'cs' 카테고리의 다른 글

network 개요  (0) 2022.06.28
OS - 교착상태  (0) 2022.05.16
OS - 병행 프로세스  (0) 2022.05.15
OS - 스케줄링 알고리즘  (0) 2022.05.14
OS - 프로세스  (0) 2022.05.14