일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 알고리즘
- Heap
- Proxy
- 자료구조
- 백준
- 운영체제
- 디자인 패턴
- IT
- mongoDB
- react
- MySQL
- design pattern
- Galera Cluster
- Java
- JPA
- redis
- spring webflux
- Data Structure
- 파이썬
- 컴퓨터구조
- Kafka
- c언어
- 네트워크
- JavaScript
- Spring
- Algorithm
- C
- OS
- MSA
- 자바
Archives
- Today
- Total
시냅스
프로세스 동기화 Process Synchronization 본문
프로세스 동기화 Process Synchronization
Cooperation process
- 서로 영향을 주는 process
- thread를 공유하거나, shared memory massage passing
- 위의 경우 데이터 일관성에 유의해야 한다 => 실행 순서를 보장해야 한다. (Integrity of Data)
producer - consumer problem
while(true)
{
/* produce an item in next_produced */
while (count == BUFFER_SIZE)
; /* do nothing */
buffer[in] = next_produced;
in = (in + 1) % BUFFER_SIZE;
count++;
}
while(true)
{
while (count == BUFFER_SIZE)
; /* do nothing */
next_consumed = buffer[out];
out = (out + 1) % BUFFER_SIZE;
count--;
/* consume the item in next_consumed */
}
이 때 count 가 5라는 가정을 하여 병행하게 실행하면 기대값인 6 대신 4, 5, 6이 된다.
register1 = count
register1 = register1 + 1 // count = 6, interrupt
count = register1 // resume, count = 6
register2 = count
register2 = register2 - 1
count = register2 // count = 4
위와 같은 상황에 기인한다.
count 를 6으로 할당한 상황에서 context switch가 일어나서 register2의 코드가 실행되면서,
count 가 4인 상황에서 다시 한 번 resume 되어 count는 기대값인 5 대신 6으로 할당받게 된다.
위와 같은 상황을 우리는 경쟁 상황이라고 한다.
경쟁 상황 Race Condition
- 여러개의 프로세스(혹은 thread)가 동일한 데이터를 병행할 때 실행 결과가 실행 순서 (context switching)에 따라 달라짐
임계 영역 critical section
- 다른 프로세스(thread)와 공유하는 코드영역 -> 임계 영역 critical section
- 동기화의 목적은 하나의 프로세스가 진행될 때 다른 프로세스는 접근하지 않아야 한다.
- 진입 영역 (entry section) : 임계 영역 진입 허가
- ciritical section
- 퇴출 구역 (exit section) : 임계 영역 퇴출 허가
- 나머지 구역 (reminder section)
임계 영역 문제에 대한 해결안
- 상호 배제 (mutual exclusion) : 다른 프로세스는 진입하지 않아야 한다.
- 진행 (progress) : 무한대로 진입 연기될 때 프로세스를 선택해야 한다.
- 한정된 대기 (Bounded waition) : 기다리는 시간 제한.
동기화를 위한 하드웨어 지원 hardware support for synchronization
- 원자성 (Atomicity)
- 더이상 쪼갤 수 없게 만들어 inturrupt가 발생되지 않게 한다.
- 특정 instruction 을 atomic instruction으로 만든다. e.g. test_and_set, compare_and_swap()
'운영체제' 카테고리의 다른 글
교착상태, Deadlock (0) | 2022.05.15 |
---|---|
뮤텍스 락, 세마포어, 모니터, 라이브니스, Mutex Locks, Semaphores, monitors, Liveness (0) | 2022.04.28 |
실시간 CPU 스케줄링 Real-Time CPU Scheduling (0) | 2022.04.21 |
다중 처리기 스케줄링 Multiple-Processor Scheduling (0) | 2022.04.21 |
스레드 스케줄링 Thread Scheduling (0) | 2022.04.21 |
Comments