병행 프로세스의 개요
병행성(concurrency)
여러 개의 프로세스 또는 스레드가 동시 수행되는 시스템의 특성
병행 프로세스
동시 수행되는 여러 개의 프로세스 또는 스레드
병행 프로세스의 실행 형태
- 1개의 CPU: 인터리빙 형식
- 여러 개의 CPU: 병렬처리 형식
CPU가 하나의 프로세스를 담당해 동시에 처리가 가능
강결합 시스템과 약결합 시스템
멀티프로세서 시스템에서의 메모리 구조에 따라 구분
프로세스 간의 관계
독립 프로세스
- 수행 중인 다른 프로세스에 영향을 주지도 받지도 않음
- 데이터 및 상태를 다른 프로세스와 공유하지 않음
- 프로세스의 실행
결정적: 실행결과는 입력에 의해서만 결정됨
재생 가능: 같은 입력에 대해 항상 동일한 실행결과
협력 프로세스
- 수행 중인 다른 프로세스와 영향을 주고받음
- 데이터 및 상태를 다른 프로세스와 공유
- 프로세스의 실행
비결정적: 실행결과는 실행순서에 좌우됨
재생 불가능: 같은 입력에 대해 항상 동일한 실행결과를 보장하지 못함
병행성 문제
협력 프로세스인 경우 발생할 수 있는 문제
독립 프로세스는 프로세스끼리 영향을 주고받지 않기 때문에 협력 프로세스에서만 발생함
- 상호배제
- 동기화
- 통신
상호배제
2개 이상의 프로세스가 동시에 임계영역을 수행하지 못하도록 하는 것
임계영역: 2개 이상의 프로세스가 동시에 사용하면 안 되는 공유자원을 액세스 하는 프로그램 코드 영역
동기화
2개 이상의 프로세스에 대해 처리순서를 결저하는 것
상호배제도 큰 의미에서는 동기화의 영역이라고 볼 수 있음 (임계영역의 처리 순서를 정하는 것이기 때문에)
통신
프로세스들이 데이터를 공유하기 위해서 반드시 필요 (프로세스 간 통신 IPC)
통신 방법
- 공통된 하나의 변수 사용
- 네트워크 등을 이용해 메시지를 서로 주고받음
세마포어
상호배제와 동기화 문제를 해결하기 위한 도구
- 정수형 공용변수
저장값: 사용 가능한 자원의 수 또는 잠김이나 풀림의 상태 (보통 0, 1로 설정하고 임계영역을 수행할 수 있는 상태냐 아니냐를 잠김 풀림이라고 함) - 상황에 맞춰 0 이상의 정수로 초기화
- 두 기본 연산 p, v에 의해서만 사용됨
기본연산: 인터럽트 되지 않고 하나의 단위로 처리됨
연산 p와 연산 v
세마포어마다 대기 큐가 필요하다.
상호배제 해결
상호배제를 위한 일반적인 요구사항
- 한 프로세스가 임계영역 수행 중
다른 프로세스는 임계영역에 진입해서는 안 됨 - 임계영역 수행 중이던 프로세스가 임계영역 벗어남
누군가 하나는 임계영역을 새로이 수행할 수 있어야 함 - 임계영역 진입 못하고 대기하는 프로세스
적절한 시간 내에 임계영역 수행을 시작할 수 있어야 함
상호배제를 위한 임계영역 주변의 코드영역
세마포어 이용
- 세마포어 mutex 초깃값은 1
- 진입영역: P(mutex)
mutex 값을 검사해서 임계영역이 잠겨있는지 풀려있는지 확인 - 해제영역: V(mutex)
프로세스의 실행이 끝난 뒤 대기하고 있는 프로세스가 있는지 확인해서 있으면 다음 프로세스를 실행시켜 주고, 없으면 mutex 값을 다시 증가시키고 종료한다. - 대기 큐는 FIFO로 동작
동기화 해결
프로세스가 원하는 순서대로 실행될 수 있도록 해줘야 함
세마포어 sync 초깃값은 0
s1을 먼저 수행하고 v에서 sync 값을 +1 해준다.
-> p에서 sync 값을 검사해서 1일 경우에는 실행시키고 0인 경우에는 대기시킨다.
자료출처: 방통대 운영체제 강의 자료
'공부 > 운영체제' 카테고리의 다른 글
5. 병행 프로세스 (2) (0) | 2024.02.29 |
---|---|
3. 프로세스 스케줄링 (0) | 2024.02.22 |
2. 프로세스와 스레드 (0) | 2024.02.22 |
1. 운영체제 소개 (0) | 2024.02.21 |