1. 병행 프로세스의 의미
가. 개념
운영체제가 프로세서를 빠르게 전환, 프로세서 시간을 나눠 마치 프로세스 여러 개를 동시에 실행하는 것처럼 보이게 하는 것
나. 종류
1) 독립 프로세스
단일 처리 시스템에서 수행하는 병행 프로세스, 다른 프로세스에 영향 주고받지 않으면서 독립 실행
다른 프로세스, 데이터와 상태 공유하지 않고 동작도 재현 가능
주어진 초기값에 따라 항상 동일한 결과가 나옴.
중지 후 변동 없이 다시 시작 가능
독립적으로 실행할 수 있는 프로세스
2) 협력 프로세스
다른 프로세스와 상호작용하며 특정 기능을 수행하는 비동기적 프로세스
제한된 컴퓨터 자원의 효율성 증대, 계산 속도 향상, 모듈적 구성 강화, 개별 사용자의 여러 작업을 동시에 수행하여 편의성 제공에 사용됨.
프로세스 하나가 파일에서 읽기 수행 동안 다른 프로세스가 해당 파일에 쓰기 수행을 하면 영향을 줌.
병행 프로세스들이 입출력장치, 메모리, 프로세서 등 자원을 서로 사용 시 충돌 발생
충돌을 피하기 위한 프로세스의 상호작용 형태
① 프로세스는 서로 인식하지 못하는 경쟁 관계 유지
다중 프로그래밍 환경이 대표적인 예로, 운영체제가 자원 경쟁을 고려하여 동일한 디스크나 프린터로 접근 조절
② 프로세스는 입출력 버스를 비롯한 개체를 공유하는 단계에서 간접적으로 서로 관계 인식
이때 다른 프로세스에서 얻은 정보에 의존하여 프로세스의 타이밍 조절
프로세스들은 개체 공유에 따른 협력 필요
③ 프로세스에는 서로 인식하고 프로세스끼리 통신할 수 있는 기본 함수가 있음.
프로세스가 서로 협력 관계에 있으면 직접 통신 가능
병행해서 함께 동작 가능
다. 병행 프로세스의 해결 과제
1) 병행성
여러 프로세스를 이용하여 작업을 수행하는 것
시스템 신뢰도 높이고 처리 속도 개선, 처리 능력 높이는 데 중요
병행 프로세스의 문제점
공유 자원을 상호 배타적으로 사용함.(프린터, 통신망 등은 한 순간에 프로세스 하나만 사용 가능)
병행 프로세스 간의 협력이나 동기화가 되어 있어야 함.(상호배제도 동기화의 한 형태)
두 프로세스 간 데이터 교환을 위한 통신이 필요함.
동시에 수행하는 다른 프로세스의 실행 속도와 관계 없이 항상 일정한 실행 결과 보장해야 함.
교착 상태를 해결하여 병행 프로세스들의 병렬 처리 능력 극대화하고 실행 검증 문제 해결할 수 있어야 함.
병행 프로세스 수행 과정에서 발생하는 상호배제를 보장해야 함.
2. 선행 그래프
가. 의미
선행 제약의 논리적 표현
프로세스 시스템은 프로세스 집합과 이것의 선행 제약, 두 가지 요소로 정의됨.
선행 제약이란 프로세스 집합 내에서 프로세스 간의 제약 관계를 뜻함.
어느 두 프로세스에 선행 제약이 없으면 이 둘은 독립적이고 병행 실행이 가능함.
순차적 활동을 표현하는 방향성 비순환 그래프
선행 그래프에서 노드는 소프트웨어 작업이거나 동시에 실행할 수 있는 프로그램 명령
위 그림의 경우 a는 x와 y를 더한 값(S1)이고, b는 z와 1을 더한 값(S2)이므로, S1과 S2는 서로 영향을 주지 않는 독립적인 관계임.
하지만 c는 a에서 b를 뺀 값(S3)이므로 S1과 S2가 S3 이전에 선행되어야 함.
마찬가지로 S3가 S4 보다 선행되어야 함.
3. 언어적 표현과 병행 문장
가. Fork 와 Join 구조
선행 그래프는 연산의 선행 제약 정의에 유용하지만 2차원이라 프로그래밍 언어에는 사용이 곤란함.
선행 관계 명시 위해 Fork와 Join 구조, 병행 문장 (Parbegin/Parend) 등 다른 방법 필요
콘웨이(1963년)와 데니스(1966년), 혼(1966년)이 소개
Fork와 Join 두 명령어를 사용하여 병행을 최초로 언어적으로 표현
나. Fork 명령어
병행 수행을 생성함. 명령어를 보면 S1을 수행하고 fork L에 따라 병행 수행 L을 생성함.
따라서 이후 나오는 S2와 L에 명시된 S3를 병행 수행함.
다. Join 명령어
fork L1 명령어에 의해 L1에 명시된 S2와 이후 나오는 S1을 병행 수행함.
이후 goto L2가 나오고 L2에 명시된 join count 명령어에 의해 S1, S2 총 2개(count)의 작업이 하나로 재결합됨.
재결합되는 작업이 모두 끝나면 S3를 수행함.
라. Fork와 Join 구조의 알고리즘과 선행그래프
마. 병행 문장
하나의 프로세스가 여러 병렬 프로세스로 퍼졌다가 다시 하나로 뭉쳐지는 것을 나타냄.
대표적인 예: 다익스트라(1965년)가 제안한 Parbegin/Parend
Parbegin과 Parend 사이의 모든 문장을 병행 수행함.
begin과 end 사이의 모든 문장은 순서대로 수행함.(선행 관계)