일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Visual Micro
- c++
- directx
- vector
- 컴퓨터 그래픽스
- 아두이노 소스
- 운영체제
- LineTracer
- 시스템프로그래밍
- Stack
- queue
- Algorithm
- set
- 아두이노 컴파일러
- 수광 소자
- WinAPI
- priority_queue
- 라인트레이서
- 아두이노
- stl
- C언어
- map
- Array
- 통계학
- 자료구조
- Deque
- Arduino
- html
- list
- arduino compiler
- Today
- Total
Kim's Programming
병행 프로세스와 상호배제(1/2) 본문
1. 병행 프로세스
* 프로세스
- 병행 프로세스: 동시에 여러개 프로세스가 진행되고 있는 경우이나 어느 한 순간에는 하나의 프로세스만 실행 됨.(프로세스 1개)
- 병렬 프로세스: 동시에 여러개의 프로세스가 실행되고 있는 것(프로세스 n개)
- 공유 자원을 상호 배타적으로 사용해야 한다. 통신망 등은 한순간에 프로세스 하나만 사용해야 한다.
- 병행 프로세스 간에는 협력이나 동기화가 되어야한다.
- 실행 순서에 맞게 수행되어야 한다.
- 교착 상태를 해경해야한다.
- 병행 프로세스를 수행하는 과정에서 발생하는 상호배제를 보장해야 한다.
상호배제는 병행 프로세스에서 프로세스 하나가 공유 자원을 사용할 때 다른 프로세스들이 동일한 사원을 사용할 수 없도록 하는 방법이다.(Mutual Exclusion). 변수나 파일은 프로세스별로 하나씩 차례로 읽거나 쓰도록 해야 하는데, 공유 자원을 동시에 사용하지 못하게 실행을 제어하는 방법을 동기화라고한다.
어떤 두 프로세스를 동일한 컴퓨터에서 실행한다고 했을 때 두 프로세스가 동시에 사용할 수 없는 공유 자원을 임계자원(Critical Resource)이라고 하고, 임계자원에 접근하고 실행하는 프로그램 코드 부분을 임계영역(Critical Section)이라고 한다.
어떤 프로세스가 다른 프로세스와 충돌하지 않는 연산을 할 때는 프로세스를 동시에 수행하도록 허용해야하므로 다음 조건들을 만족해야한다.
*상호배제를 만족하는 조건
- 두 프로세스는 동시에 임계영역에 진입할 수 없다.
- 프로세스가 공유 자원을 사용하려고 너무 오래 기다리게 하면 안 된다.
- 임계 영역이 비어 있으면 어느 프로세스나 접근 가능 해야한다.
임계 영역에는 반드시 한 번에 프로세스 하나만 진입할 수 있어야 한다. 임계영역에는 다른 프로세스가 있으면 이 프로세스는 다른 프로세스가 임계영역에 들어가지 못하게 진입 상호배제를 수행해야 한다. 또 임계 영역에서 나오는 프로세스는 탈출 상호배제를 수행하여 다른 프로세스가 임계 영역에 들어갈 수 있도록 해야 한다.
* 임계영역은 다음 세 가지 조건을 만족해야한다.
- 상호배제: 어떤 프로세스가 임계 영역에서 작업 중이면, 다른 프로세는 임계 영역으로 들어갈 수 없다.
- 진행: 임계 영역에 프로세스가 없는 상태에서 여러 프로세스가들어가려고 할 때는 어떤 프로세스는 반드시 진입할 수 있어야 한다.
- 한정 대기: 다른 프로세스가 임계 영역을 무한정 기다리는 상황을 방지해야한다.
위의 경우 처럼 여러 프로세스가 동시에 공유 데이터에 접근할 때 접근 순서에 따라 실행 결과가 달라지는 상황에 놓인 프로세스들을 경쟁상태(Race Condition)에 있다고 한다. 경쟁 상태를 예방하려면 병행 프로세스들을 동기화해야 하는데 이는 임계 영역을 이용한 상호배제로 구현할 수 있다.즉 한 순간에는 하나의 프로세스만 공유변수를 수정할 수 있도록 해야한다.
'Computer Theory > Operating System' 카테고리의 다른 글
교착 상태와 기아 상태 (0) | 2017.06.24 |
---|---|
병행 프로세스와 상호배제(2/2) (0) | 2017.06.24 |
스레드(Thread) (0) | 2017.06.22 |
프로세스(Process) (0) | 2017.06.22 |
운영체제란? (2/2) (0) | 2017.06.21 |