본문 바로가기
IT 및 프로그래밍

병행 프로세스와 상호배제 중 병행 프로세스에 대하여

by 데이터 석사 2024. 10. 22.

컴퓨터는 프로그램 작업을 실행하는 데 활용할 수 있는 여러 자원으로 구성된다. 예시를 들면, 실제로 명령을 수행하는 프로세서, 데이터를 저장하는 데 이용하는 메인 메모리, 프로세서의 임시 저장소인 레지스터, 프로세서가 자주 접근하는 캐시, 프로그램을 영구적으로 지니게 하는 디스크 등 메모리와 프린터, 마우스, 키보드 등 입출력장치, 네트워크 포트 등이 있다. 이 중 메모리 같은 자원은 공유 영역을 병렬로 이용한다. 반대로 입출력장치 일부분이나 프로세서는 한 번에 프로세스 하나만 이용할 수 있는 공유 자원이다.

병행 프로세스와 상호배제 중 병행 프로세스에 대하여

병행 프로세스의 개념

병행 프로세스들이 입출력장치, 프로세서, 클록, 메모리 같은 자원을 서로 활용하려고 하면 충돌이 일어난다. 그런데 이런 자원들은 다른 프로세스의 상태가 변하거나 영향을 받으면 안 되므로 프로세스는 다음 세 가지 모습으로 상호작용한다.

 

-프로세스는 입출력 버스를 비롯한 개체를 공유하는 단계에서 간접적으로 서로의 관계를 인지한다. 이때 다른 프로세스에서 얻은 정보에 의존할 수 있고, 프로세스의 타이밍에 영향을 받을 가능성이 있다. 그래서 프로세스들은 개체 공유에 따른 협동이 필수이다.

 

- 프로세스에는 서로를 인지하고 프로세스끼리 연락할 수 있는 기본 함수가 있다. 프로세스가 서로 협동 관계에 있으면 직접 연락이 가능하고 병행해서 다 같이 동작할 수 있다.

 

- 프로세스는 서로 인지하지 못하는 경쟁 관계를 유지한다. 다중 프로그래밍 환경이 대표적인 예시로, 운영체제가 자원 경쟁을 생각하여 같은 디스크나 프린터로 접근을 조정한다.

 

프로세서 하나는 한 번에 프로세스 하나만 수행할 수 있다. 그러나 운영체제가 프로세서를 빠르게 바꾸어 프로세서 시간을 할당하여 마치 프로세스 여러 개를 같은 순간에 실행하는 것처럼 보이게 하는 것을 병행 프로세스라고 한다. 병행 프로세스는 단일 처리 시스템에서 서로 독립적으로 작업을 수행하는 독립 프로세스, 다른 프로세스와 협동하면서 특정 기능을 실행하는 비동기적 병행 프로세서인 협력 프로세스로 구별된다.

 

- 독립 프로세스는 단일 처리 시스템에서 실행하는 병행 프로세스로 다른 프로세스에 영향을 주고받지 않으면서 독립적으로 수행한다. 따라서 다른 프로세스, 데이터와 상태를 공유하지 않고 동작도 구현할 수 있다. 또 주어진 초깃값에 따라 언제나 같은 결과를 보여 주고, 중단했다가 변동 사항 없이 재시작할 수 있다. 다음은 프로세서에서 독립적으로 수행할 수 있는 프로세스의 예시이다.

 

1. 단일 프로그래밍은 프로세서를 이용 중이던 프로세스를 완수한 후 다른 프로세스를 수행한다.

2. 다중프로그래밍은 프로세스 여러 개가 프로세서 하나를 공유한다. 공유하지 않는 상태일 때 디스패치 순번은 관계없다.

3. 다중처리는 프로세서를 2개 이상 이용하여 같은 순간에 프로그램 여러 개를 병렬로 수행한다. 프로세스는 한 번에 프로세서 하나에서 수행하지만, 같은 시스템에서는 서로 다른 시간에 서로 다른 프로세서에서 수행할 수 있다.

 

- 협력 프로세스는 다른 프로세스에 영향을 주고받으며, 곧 상호작용하며 특정 기능을 수행하는 비동기적 프로세스이다. 대개 제한된 컴퓨터 자원의 효과성을 중대하고, 연산 속도를 업그레이드하고, 모듈적 구성을 강화하고, 개별 사용자가 다중 작업을 동시에 실행할 수 있는 편의성을 제공하는데 이용한다. 쉬운 예시로 두 프로세스가 같은 파일을 활용할 때이다. 프로세스 하나가 파일에서 읽기를 실행하는 동안 다른 프로세스가 해당 파일에 쓰기를 하면 서로 영향을 받는다.

 

특히 경쟁 관계에 있는 프로세스들은 서로 정보를 교체하지 않지만, 한 프로세스의 실행이 나머지 프로세스의 실행에 영향에 미칠 수 있어 상호배제가 필수이다.

 

병행 프로세스의 해결 과제

다중 처리 시스템에서는 프로세서들이 모든 입출력 장치와 메모리를 참조할 수 있어 동시에 같은 자원에 접근할 때 충돌이 일어날 수 있다. 그러므로 프로세서 간의 충돌을 해결하는 방법이 필수이다.

 

다중 처리 시스템에서는 각 프로세서의 오버헤드를 줄여 유효성을 증가시키는데, 명령어 여러 개를 세세히 분류하여 동시에 작업하려면 프로세서들은 연결하고 상호작용을 컨트롤해야 한다. 이처럼 병행성은 시스템의 신뢰도를 높이고 처리 속도를 개선하여 처리 능력을 업그레이드 하는 것에 매우 중요하다.

 

병행성은 여러 프로세스를 활용하여 작업을 실행하는 것으로, 다중 처리 시스템, 분산 처리 시스템뿐만 아니라 단일 프로세서로 운영하는 다중 프로그래밍 시스템에서도 매우 중요하다.

 

선행 그래프

프로세스들이 선행 그래프를 활용하여 상호배제를 보완하는 수단을 살펴보기 전에 프로그래밍 언어에서 문장 간의 선행 관계를 그래프로 표현하는 선행 그래프의 개념과 종류를 살펴보자

 

선행 그래프는 선행 제약을 논리적으로 표현한 것이다. 노드 i에서 노드 j로 작동 j를 시작하기 전에 작동 i를 완료해야 한다는 순차적 작동을 표현하는 방향성 비순환 그래프이다. 선행 그래프에서 노드는 소프트웨어 작업이거나 같은 순간에 수행할 수 있는 프로그램 명령일 수 있다.

 

프로세스는 프로세스 그룹과 이것의 선행 제약 두 가지 요소로 설명할 수 있다. 선행 제약은 프로세스를 순번대로 다른 상태로 이동시키는 것이다. 예시를 들면, 프로세스 P1부터 Pn까지가 있고 선행 제약이 Pi < Pj 이면 프로세스 상태는 Pi 에서 Pj로  옮겨 간다. 따라서 Pi < Pj 이고 Pj < Pk가 된다. 두 프로세스에 선행 제약이 없으면 이 둘은 독립적이라서 병행 수행을 할 수 있다.

 

요약 및 결론

• 병행 프로세스는 여러 프로세스가 동시에 작업을 실행하는 것을 말한다. 

• 병행 프로세스는 단일 처리 시스템에서 서로 독립적으로 작업을 수행하는 독립 프로세스와 다른 프로세스와 협력하면서 특정 기능을 수행하는 비동기적 병행 프로세서인 협력 프로세스로 구별된다. 

• 다중 처리 시스템에서는 프로세서들이 모든 입출력 장치와 메모리를 참조할 수 있어 동시에 동일한 자원에 접근할 때 충돌이 일어날 수 있으므로 프로세서 간의 충돌을 해결하는 방법이 필요하다. 

• 선행 그래프는 선행 제약을 논리적으로 표현한 것으로, 노드 i에서 노드 j로 작동 j를 시작하기 전에 작동 i를 완료해야 한다는 순차적 작동을 표현하는 방향성 비순환 그래프이다.