데이터가 저장되어있는 위치에서 읽어와서
연산을 해서 연산결과를 원래 위치에 저장
연산을 실행하는 주체 CPU
데이터를 저장하고 있는 곳 메모리
#CPU가 하나밖에 없는 시스템은 문제가 발생안한다.
공유 데이터 (shared data)의 동시 접근(concurrent access)은 데이터의 불일치 문제(inconsistency)를 발생 시킬 수 있다.
일관성(consistency)유지를 위해서는 협력 프로세스 (cooperating process)간의 실행 순서 (orderly execution)를 정해주는 메커니즘 필요
Race condition
#여러 프로세스들이 동시에 공유 데이터를 접근하는 상황
#데이터의 최종 연산 결과는 마지막에 그 데이터를 다룬 프로세스에 따라 달라짐
race condition을 막기 위해서는 concurrent process는 동기화(synchronize)되어야 한다.
critical section에 들어갈 때 락을 걸고 나올 때 락을 푸는 간결한 방법
n 개의 프로세스가 공유 데이터를 동시에 사용하기를 원하는 경우
각 프로세스의 code segment에는 공유 데이터를 접근하는 코드인 critical section이 존재
Problem
- 하나의 프로세스가 critical section에 있을 때 다른 모든 프로세스는 cirtical section에 들어갈 수 없어야 한다.
두 개의 프로세스가 있다고 가정 P0, P1
프로세스들의 일반적인 구조
프로세스들은 수행의 동기화(synchronize)를 위해 몇몇 변수를 공유할 수 있다. -> synchronization variable
Mutual Exclusion(상호 배제)
- 프로세스 Pi가 critical section 부분을 수행 중이면 다른 모든 프로세스들은 그들의 critical section에 들어가면 안된다.
*둘이 동시에 들어가는걸 막음
Progress(진행)
- 아무도 critical section에 있지 않은 상태에서 critical section에 들어가고자 하는 프로세스가 있으면 critical section에 들어가게 해주어야 한다.
*둘이 동시에 못 들어가게 막으려다 보니 아무도 안들어가는걸 막음
Bounded Waiting
- 프로세스가 critical section에 들어가려고 요청한 후부터 그 요청이 허용될 때 까지 다른 프로세스들이 critical section에 들어가는 횟수에 한께가 있어야 한다.
*기다리는 시간이 유한해야함
*가정
- 모든 프로세스의 수행속도는 0보다 크다.
- 프로세스들 간의 상대적인 수행속도는 가정하지 않는다.
추상자료형 : 논리적으로 정의 하는거지 실제 컴퓨터에서 어떻게 구현되는지와는 별개의 자료형
busy-wait는 효율적이지 못함
Block & WakeUp 방식의 구현
Block/wakeup overhead vs Critical section 길이
counting semaphore
- 도메인이 0 이상인 임의의 정수 값
- 주로 resource counting에 사용
Binary semaphore(=mutex)
- 0 또는 1 값만 가질 수 있는 semaphore
- 주로 mutual exclusion (lock/unlock)에 사용
Deadlock
- 둘 이상의 프로세스가 서로 상대방에 의해 충족될 수 있는 event를 무한히 기다리는 형상
S와Q가 1로 초기화된 semaphore라 하자
Starvation
- indefinite blocking: 프로세스가 suspend된 이유에 해당하는 세마포어 큐에서 빠져나갈 수 없는 현상
Synchronization variables
semaphore full=0, empty = n, mutex = 1
한 process 가 DB에 write 중 일 때 다른 Process가 접근하면 안됨
read는 동시에 여럿이 해도 됨
solution
- Writer가 DB에 접근허가를 아직 얻지 못한 상태에서는 모든 대기중인 Reader들을 다 DB에 접근하게 해준다.
- Writer는 대기 중인 Reader가 하나도 없을 때 DB접근이 허용된다.
- Writer는 대기 중인 Reader가 하나도 없을 때 DB접근이 허용된다.
- 일단 Writer가 DB에 접근 중이면 Reader들은 접근이 금지된다.
- Writer가 DB에서 빠져나가야만 Reader의 접근이 허용된다.
Shared data
DB자체
readcount = 현재 DB에 접근 중인 Reader의 수
Synchronization variables
*mutex = 공유 변수 readcount를 접근하는 코드 (critical section)의 mutual exclusion 보장을 위해 사용
여러 프로세스가 동시에 사용하면 안되는 구역(Critical section/임계구역)
공유자원을 서로 사용하기 위해 경쟁하는 것을 경쟁조건이라고 한다.
임계구역 문제를 해결하기 위해서는 (상호 배제/Mutual Exclusion)메커니즘이 필요하다.
상호 배제의 요구사항
1. 임계영역엔 동시에 하나의 프로세스만 접근한다.
2. 여러 요청에도 하나의 프로세스의 접근만 허용한다.
3. 임계구역에 들어간 프로세스는 빠르게 나와야한다.
세마포어의 단점을 해결한 방법 모니터
모니터는 운영체제가 아니라 프로그래밍 언어 차원에서 지원하는 방법이다.붙은
synchronized키워드가 붙은 함수는 프로세스중에서 하나만 사용해야한다.