병행 프로세스의 개념
- 병행성은 여러 프로세스 또는 여러 스레드가 동시에 수행되는 시스템의 특성을 의미함
- 병행 프로세스는 이러한 병행성 환경에서 동시에 수행 중인 프로세스들을 의미함
- 여기서 동시에 수행된다는 말은 반드시 같은 순간에 물리적으로 함께 실행된다는 뜻만은 아님
- 어떤 시점에 여러 프로세스가 모두 종료되지 않은 채 진행 중이라면 병행 수행으로 볼 수 있음
병행성에서의 동시 수행 의미
- 하나의 프로세스는 생성 이후 종료될 때까지 수행 중인 상태로 볼 수 있음
- CPU를 잠깐 사용하지 않는 준비 상태나 대기 상태도 전체 수행 구간 안에 포함됨
- 따라서 특정 시점에 여러 프로세스가 모두 살아 있다면 동시에 수행 중이라고 볼 수 있음
- 이런 의미에서 여러 프로세스가 함께 존재하고 진행되는 성질을 병행성이라고 함
인터리빙 방식의 병행 수행
- CPU가 하나인 시스템에서는 여러 프로세스가 번갈아 가며 CPU를 사용함
- 이를 인터리빙 방식이라고 함
- 실제로는 한 시점에 CPU 하나만 동작하지만
- 전체적으로 보면 여러 프로세스가 함께 진행되는 것처럼 보이게 됨
의미
- A 실행
- B 실행
- C 실행
- 다시 A 실행
이와 같이 CPU 사용이 교차되면서 병행 수행이 이루어짐
병렬 처리와 병행 처리의 관계
-
CPU가 여러 개라면 여러 프로세스를 정말 동시에 처리할 수 있음
-
이런 방식은 병렬 처리라고 볼 수 있음
-
인터리빙 방식이든 병렬 처리 방식이든
-
여러 프로세스가 동시에 진행된다는 점에서는 모두 병행성에 해당함
-
CPU 하나면 인터리빙 방식의 병행 수행
-
CPU 여러 개면 병렬 방식의 병행 수행
강결합 시스템의 의미
- CPU가 여러 개이고 메모리는 하나인 구조를 강결합 시스템이라고 함
- 하나의 메모리를 여러 CPU가 함께 사용하므로 공유 메모리 구조라고 볼 수 있음
- 이 경우 프로세스들은 같은 메모리 공간을 통해 데이터를 주고받을 수 있음
특징
- 메모리 공유 가능
- 데이터 전달 빠름
- 프로세스 간 협력 처리에 유리함
약결합 시스템의 의미
- CPU마다 메모리가 따로 존재하는 구조를 약결합 시스템이라고 함
- 이 경우 메모리가 분리되어 있으므로 분산 메모리 구조라고 볼 수 있음
- 프로세스 간 데이터 전달은 메모리 공유가 아니라 통신선을 통해 이루어짐
특징
- 각 CPU가 독립적으로 동작함
- 데이터 공유에는 메시지 전달 필요
- 네트워크 기반 처리와 유사한 구조로 이해 가능함
독립 프로세스의 특징
- 독립 프로세스는 다른 프로세스와 영향을 주고받지 않는 프로세스를 의미함
- 데이터 공유 없음
- 상태 공유 없음
- 서로 간섭 없음
특징
- 결정적 실행 - 실행결과는 입력에 의해서만 결정
- 재생 가능 - 같은 입력에 대해 항상 동일한 실행결과
의미
- 같은 입력이면 언제 실행해도 같은 결과가 나옴
- 실행 순서나 다른 프로세스의 존재에 영향을 받지 않음
협력 프로세스의 특징
- 협력 프로세스는 다른 프로세스와 영향을 주고받는 프로세스를 의미함
- 데이터 공유 가능
- 상태 공유 가능
- 실행 순서에 따라 결과 달라질 수 있음
특징
- 비결정적 실행 - 실행결과는 실행순서에 좌우됨
- 재생 어려움 - 같은 입력에 대해 항상 동일한 실행결과를 보장하지 못함
의미
- 같은 입력이라도 실행 순서에 따라 결과가 달라질 수 있음
- 다른 프로세스의 동작이 현재 프로세스 결과에 영향을 줄 수 있음
병행성 문제의 종류
병행 프로세스에서는 다음과 같은 문제가 발생 가능함
- 상호배제 문제
- 동기화 문제
- 통신 문제
상호배제의 의미
- 상호배제는 두 개 이상의 프로세스가 임계 영역을 동시에 수행하지 못하게 하는 것을 의미함
- 동시에 접근하면 안 되는 공유 자원을 보호하기 위한 개념임
핵심
-
한 프로세스가 사용 중이면
-
다른 프로세스는 기다려야 함
-
공유 자원을 동시에 사용하는 상황을 막는 역할
임계 영역의 의미
- 임계 영역은 두 개 이상의 프로세스가 동시에 실행하면 안 되는 코드 영역을 의미함
- 보통 공유 자원을 읽거나 수정하는 코드 부분이 이에 해당함
예
- 계좌 잔액 읽기
- 잔액 계산
- 최종 잔액 저장
이 과정이 한 덩어리로 안전하게 처리되어야 할 때 그 부분이 임계 영역이 됨
상호배제가 필요한 이유
- 여러 프로세스가 같은 공유 자원을 동시에 수정하면 잘못된 결과가 나올 수 있음
- 예를 들어 두 프로세스가 같은 계좌 잔액을 동시에 읽고 각각 값을 계산한 뒤 다시 저장하면
- 최종 결과가 정상값과 달라질 수 있음
문제 원인
- 공유 자원을 동시에 사용함
- 읽기와 쓰기 사이에 다른 프로세스가 끼어듦
- 순서가 꼬이면서 결과가 틀어짐
해결
- 읽기, 계산, 저장 전체를 하나의 임계 영역으로 보호해야 함
상호배제에서 필요한 조건
상호배제가 제대로 이루어지려면 다음 조건이 필요함
- 어떤 프로세스가 임계 영역 수행 중이면 다른 프로세스는 진입 불가 => 보호 필요
- 임계 영역 수행이 끝나면 다른 프로세스가 진입 가능해야 함 => 해제 필요
- 기다리는 프로세스는 무한정 대기하지 않아야 함 => 공정성 보장 필요
동기화의 의미
- 동기화는 두 개 이상의 프로세스 사이의 처리 순서를 맞추는 것을 의미함
- 어떤 작업이 먼저 끝난 뒤 다른 작업이 시작되어야 할 때 필요함
- 순서 관계를 보장하는 역할
예
- 출금 후 입금
- 데이터 생성 후 사용
- 선행 작업 후 후속 작업
동기화가 필요한 이유
- 협력 프로세스에서는 작업 순서가 바뀌면 결과가 달라질 수 있음
- 예를 들어 계좌 이체 상황에서 입금이 출금보다 먼저 처리되면
- 전체 금액이 일시적으로 잘못 계산될 수 있음
정상 흐름
- 출금 수행
- 그 다음 입금 수행
비정상 흐름
- 입금 먼저 수행
- 출금 나중 수행
따라서 프로세스 간 순서를 보장하는 동기화가 필요함
통신 문제의 의미
- 협력 프로세스는 서로 데이터를 주고받아야 할 수 있음
- 이를 위해 프로세스 간 통신이 필요함
- 병행성 환경에서는 이 통신 방식 역시 중요한 문제가 됨
통신 방식 예
- 공유 변수 사용
- 메시지 전달 사용
이 부분은 병행 프로세스의 협력 구조와 직접 연결됨
세마포어의 개념
-
세마포어는 상호배제와 동기화 문제를 해결하기 위한 도구임
-
여러 프로세스가 함께 사용할 수 있는 공유 변수임
-
정수형 값을 가짐
-
항상 정해진 연산을 통해서만 접근 가능함
-
단순 변수처럼 임의로 값을 바꾸는 것이 아니라
-
정해진 방식으로만 사용해야 하는 동기화 도구임
세마포어 값의 의미
세마포어는 상황에 따라 다음과 같은 의미로 사용 가능함
- 사용 가능한 자원의 개수
- 잠금 상태 여부
- 진입 가능 여부
예
- 1이면 사용 가능
- 0이면 사용 불가
또는
- 남은 자원 수가 3이면 세마포어 값 3
- 남은 자원 수가 0이면 세마포어 값 0
세마포어 초기화의 필요성
- 세마포어는 사용 전에 반드시 초기화가 필요함
- 초기값은 사용 목적에 따라 달라짐
예
- 상호배제 목적이면 보통 1로 초기화
- 어떤 작업 완료 신호를 기다리는 목적이면 0으로 초기화
즉 세마포어는
- 0 또는 그 이상의 정수값으로 시작 가능
- 초기값의 의미를 먼저 정한 뒤 사용해야 함
세마포어 연산 P의 역할
- P 연산은 세마포어 값을 검사하고 감소시키는 역할을 함
- 값이 0보다 크면 1 감소시키고 계속 진행함
- 값이 0이면 현재 프로세스를 대기 상태로 보냄
의미
- 자원이 있으면 사용 시작
- 자원이 없으면 기다림
P 연산은 진입 가능 여부를 확인하는 연산으로 볼 수 있음
세마포어 연산 V의 역할
- V 연산은 세마포어 값을 증가시키거나
- 대기 중인 프로세스를 다시 진행시키는 역할을 함
동작
- 대기 중인 프로세스가 없으면 세마포어 값 1 증가
- 대기 중인 프로세스가 있으면 그 가운데 하나를 깨워서 진행시킴
의미
- 사용 끝남
- 다음 프로세스 진입 가능
V 연산은 자원 반납 또는 다음 프로세스 진행 허용 역할을 함
세마포어 연산의 특징
- P와 V는 세마포어를 다루는 기본 연산임
- 이 연산들은 중간에 끊기지 않고 하나의 단위로 처리되어야 함
- 그래야 병행성 환경에서도 안전하게 동작 가능함
핵심
- 검사 중간에 끊기면 안 됨
- 감소 중간에 끊기면 안 됨
- 증가 중간에 끊기면 안 됨
P와 V는 원자적 연산으로 이해 가능함
세마포어와 대기 큐의 관계
- 세마포어를 사용할 때는 해당 세마포어와 연결된 대기 큐가 필요함
- P 연산에서 진입하지 못한 프로세스는 이 대기 큐에서 기다리게 됨
- V 연산이 실행되면 대기 큐에서 하나를 꺼내 다시 진행시킴
- 세마포어 값 관리
- 대기 프로세스 관리
두 기능이 함께 이루어짐
세마포어를 이용한 상호배제 처리
상호배제를 위해서는 다음 구조 사용 가능함
-
진입 영역에서
P(뮤텍스)사용 -
임계 영역 수행
-
해제 영역에서
V(뮤텍스)사용 -
뮤텍스세마포어를 1로 초기화함
의미
- 처음에는 한 프로세스 진입 가능
- 이미 하나가 들어갔다면 값이 0이 되어 다른 프로세스는 대기
- 나가면서 V 연산 수행 시 다음 프로세스 진입 가능
세마포어로 상호배제를 보장하는 원리
-
첫 번째 프로세스가 P 연산 수행 시 세마포어 값 1에서 0으로 감소
-
이 프로세스는 임계 영역 진입 가능
-
이후 들어오는 다른 프로세스는 세마포어 값이 0이므로 대기 상태로 감
-
임계 영역을 끝낸 프로세스가 V 연산 수행
-
대기 중인 프로세스가 있으면 하나를 깨워 진입 가능하게 함
- 임계 영역에는 항상 하나의 프로세스만 들어감
- 이것이 상호배제 보장 원리임
세마포어를 이용한 동기화 처리
동기화 문제는 다음 구조로 해결 가능함
-
먼저 수행되어야 할 코드 뒤에
V(Sync)사용 -
나중에 수행되어야 할 코드 앞에
P(Sync)사용 -
Sync세마포어를 0으로 초기화함
의미
- 후속 작업은 처음에는 진행 불가
- 선행 작업이 끝난 뒤 V 연산을 통해 후속 작업 진행 가능
- 순서 관계를 세마포어로 강제 가능함
세마포어로 동기화를 보장하는 원리
- 후속 프로세스가 먼저 P 연산에 도달하면 세마포어 값이 0이므로 대기 상태가 됨
- 선행 프로세스가 작업을 끝내고 V 연산 수행
- 그러면 대기하던 후속 프로세스가 다시 진행 가능해짐
결과
- 선행 작업 먼저 수행
- 후속 작업 나중 수행
- 세마포어를 이용하면 프로세스 간 실행 순서를 안전하게 제어 가능함
병행 프로세스 정리
- 병행성은 여러 프로세스 또는 스레드가 동시에 수행되는 특성을 의미함
- 동시에 수행되는 여러 개의 프로세스 또는 쓰레드를 병행 프로세스라고 하며, 병행 프로세스는 프로세스 간의 관계에 따라 독립 프로세스 또는 협력 프로세스로 나뉨
- 협력 프로세스에서는 상호배제, 동기화, 통신 문제가 발생 가능함
- 임계영역은 2개 이상의 프로세스가 동시에 사용하면 안되는 공유자원을 액세스하는 프로그램 코드 영역을 의미
- 상호배제는 2개 이상의 프로세스가 동시에 임계영역을 수행하지 못하도록 하는 것
- 동기화는 2개 이상의 프로세스에 대한 처리순서를 결정
- CPU 하나에서는 인터리빙 방식으로 병행 수행 가능함
- CPU 여러 개에서는 병렬 방식의 병행 수행 가능함
- 프로세스는 독립 프로세스와 협력 프로세스로 구분 가능함
세마포어 정리
- 세마포어는 병행성 문제를 해결하기 위한 공유 정수 변수임
- P 연산은 검사 및 대기 역할 수행
- V 연산은 증가 및 재개 역할 수행
- 상호배제 문제 해결 가능
- 동기화 문제 해결 가능
- 임계 영역 보호와 순서 제어에 모두 활용 가능함