병행 프로세스
독립적으로 작업을 수행하거나, 다른 프로세스와 협력하여 특정기능을 수행한다.
프로세스간 통신이 필요하다.
비동기적 병행 프로세스
프로세스간 통신 시 동기화 되어야 하는 프로세스
상호 작용
제한된 자원을 공유하기 위함이며, 상호 작용하는 프로세스는 순서에 맞게 실행되도록 동기화 되어야 한다.
병행성
1 | 다수의 프로세서를 이용한 작업을 수행하며, 다중 처리 시스템, 분산 처리 환경, 다중 프로그래밍 운영체제에서 매우 중요하다. |
다중 처리 시스템의 성공적인 구현을 위한 해결문제
- 공유자원을 상호 배타적으로 사용해야 한다.
- 병행 프로세서들 사이는 협력, 동기화되어야 한다.
- 두 프로세스 사이에 데이터 교환을 위한 통신이 이루어져야 한다.
- 프로세서는 결정성을 확보해야 한다.
- 교착 상태를 해결하고 병행 프로세서들의 병렬 처리 능력 극대화
- 실행 검증 문제 해결
- 병행 프로세서 수행 과정에서 발생하는 상호 배제를 보장해야 한다.
- 동기화 알고리즘이 필요하다.
선행 제약
프로세스가 순서대로 다른 상태로 옮겨간다.
두 프로세스간에 선행 관계가 없으면 이들은 독립적이라 병행 실행이 가능하다.
선행 그래프
제약을 규칙적(논리적)으로 표현한 것
각 문장에 대응되는 노드가 비순환 그래프를 이용한다.
산술 연산 수행 알고리즘
병행 수행을 하기 위해 프로세서 안의 기능 단위를 여러개 두거나 프로세서를 여러개 사용해야 한다.
프로세서를 여러개 사용 시 여러 문장이 동시에 수행되어 총 수행시간을 줄일 수 있다.
Fork-Join
선행 그래프는 연산 부분의 선행 제약을 정의하는데 유용하나, 2차원 이므로 프로그래밍 언어에서 사용하기 어렵다.
병행을 최초로 언어적 표현으로 명시: 콘웨이(Conway 1963), 데니스(Denis 1966), 호른(Van Horn 1966)
병행 문장
프로세스 하나가 여러 가닥의 병렬 프로세스로 퍼졌다가 다시 한 가닥으로 뭉쳐지는 것을 나타내는 고급언어 구조
예) 다익스크라(Dijkstra, 1965)
상호배제, 동기화
1 | 둘 이상의 프로세스가 공유할 수 없는 자원을 임계자원이라 하여, 프로그램에서 이를 이용하는 부분 |
진입 상호배제
1 | 프로세스 하나가 임계영역에 있으면 다른 프로세스가 임계영역에 들어가지 못하게 하는 것. |
임계영역을 해결하기 위한 세가지 요구사항
- 상호배제: 프로세스 p^i가 임계영역에서 수행 중일 때 다른 프로세서는 임계영역에서 수행할 수 없다.
- 진행: 임계영역에서 수행하는 프로세스가 없고 여러개의 프로세스가 임계영역으로 들어가려고 하면 프로세스 선정 알고리즘에 따라 다음 임계영역으로 들어가려고 하면 프로세스 선정 알고리즘에 따라 다음 임계영역에서 수행할 대상을 선정한다.
- 제한된 대기: 한 프로세스가 임계영역을 요청한 후 요청이 수락되기까지 다른 프로세스가 임계영역에 진입할 수 있는 횟수를 제한해야 한다.
test, dest
1 | testandest(a,b); # 논리변수 b 를 읽어 a 에 복사하고 b 를 참으로 하는 명령 |
모니터
1 | 하나 이상의 프로시저, 초기화 코드, 공유 데이터로 구성된 소프트웨어 모듈로 이루어진 객체 |
x.wait 연산
1 | 어떤 프로세스가 x.signal 을 호출할 때 까지 x.wait 을 호출한 프로세스는 연기/중단된다는 의미 |