일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- RALL
- dp
- C/C++
- BOJ
- 알고리즘
- Java
- UnmanagedRanguage
- DynamicProgramming
- 백준
- 문제풀이
- 동적계획법
- Memozation
- 게임서버
- ManagedRanguage
- Today
- Total
devStory
[운영체제] 프로세스 동기화 (Synchronization) 본문
프로세스 동기화(Process Synchronization)
: 공유 자원에 여러 프로세스들이 동시에 접근했을 경우 데이터 무결성에 문제가 발생 할 수 있다.
이러한 문제를 해결하기 위해 동기화 (Synchronization) 개념이 도입되었다. 즉, 공유 데이터에 대하여 동시에 접근을 하려 할 때,
처리 순서에 상관없이 원하는 결과를 얻기 위함이다. - 데이터 일관성(Data Consistency)
내 통장에 10000원의 잔고가 남아있다.
(A)내가 5000원을 출금하는 동시에 (B)친구가 5000원을 송금했다.
그렇다면 내 통장에 남은 잔고는? 10000원이 남아야한다.
그러나, 동시에 접근했기 때문에 A와 B 프로세스는 각각 10000원의 데이터를 가지고 계산을 수행 할 수 있다.
때문에 각각의 결과가 (A) 10000 - 5000 = 5000원, (B) 10000 + 5000 = 15000원이 되는 문제가 발생할 수 있다.
계산 결과가 A가 조금 더 늦게 끝났다면 내 통장 잔고는 5000원, B가 늦게 끝났다면 15000원이 남게 된다.
은행에서 이러한문제가 실제로 일어난다면 아주 큰 문제일 것이다.
1. 경쟁상태 (Race condition)
: 여러 프로세스가 동시에 공유자원에 접근했을 때 논리적 오류가 발생하는 상황
2.임계구역 (Critical Section)
: 하나의 프로세스만 접근이 가능하도록 지정 된 공유자원
: 경쟁 조건이 발생 할 수 있는 부분의 코드 영역
3.상호배제 (Mutual Exclusion) = 뮤텍스 (Mutex)
: 경쟁 상태에서 각 프로세스가 번갈아가며 공유자원을 사용하도록 임계구역을 유지하는 방법
: 어떤 프로세스가 임계영역 내에서 작업중일 때, 다른 프로세스의 임계구역 접근을 막는 것.
4.세마포어 (Semaphore)
: 열쇠(lock)를 획득하고 해제하는 방법으로 임계구역 문제를 제어하는 것. (인터럽트 X)
: S - 세마포어 변수
: wait(S) - 열쇠를 가지고 있는지 확인하는 함수 -> 경쟁 자원 개수 -1
: signal(S) - 열쇠를 해제하는 함수 -> 경쟁 자원 개수 +1
문제점 : 세마포어 변수 S 자체도 결국은 공유변수이기 때문에 임계영역 문제를 근본적으로 해결 하지 못한다.
5. 교착상태 (Deadlock)
: 둘 이상의 프로세스가 서로가 가진 Resource를 요구하면서 무한대기 상태가 되어버리는 상태
: 필요조건 4가지
- Mutual exclusion
- Hold and Wait
- Non Preemption
- Circular wait
: 해결 (예방 방법)
- 예방 기법 : 필요 조건들 중 적어도 하나가 성립하지 않게 시스템 제어 -> 자원 낭비가 심함
- 회피 기법 : 은행원 알고리즘
- 발견 기법 : 시스템에 교착 상태가 발생했는지 점검하여 교착상태가 있는 프로세스와 자원을 발견하는 것.
: 자원할당 그래프 이용
- 회복 기법 : 교착 상태의 프로세스에 할당된 자원을 선점하여 프로세스나 자원을 회복하는 것
'운영체제' 카테고리의 다른 글
[운영체제] 스케줄링 알고리즘 ( Scheduling Algorithm) (0) | 2018.10.13 |
---|---|
[ 운영체제 ] 프로세스와 스레드 (0) | 2018.10.13 |