OS에서 race condition은 언제 발생하는가?
1. kernel 수행 중 인터럽트 발생 시
2. process가 system call을 해서 kernel mode로 수행 중인데 context switch가 일어나는 경우
3. Multiprocessor에서 shared memory 내의 kernel data
- 공유 데이터의 동시접근은 데이터의 불일치 문제를 발생시킬 수 있다.
일관성 유지를 위해서는 협력 프로세스간의 실행 순서를 정해주는 메커니즘이 필요하다.
*Race condition
- 여러 프로세스들이 동시에 공유 데이터에 접근하는 상황
- 데이터의 최종 연산 결과는 마지막에 그 데이터를 다룬 프로세스에 따라 달라짐.
race condition을 막기 위해서는 concurrent process는 동기화되어야 한다.
프로그램적 해결법의 충족 조건
1.Mutual Exclusion(상호 배제)
- 프로세스1이 critical section부분을 수행 중이면 다른 프로세스들은 critical section에 들어가면 안됨.
2. Progress(진행)
- 아무도 critical section에 있지 않은 상태에서 들어가고자 하는 프로세스가 있으면 들어가게 해줌.
3. Bounded Waiting(유한 대기)
- 프로세스가 critical section에 들어가려고 요청한 후부터 허용될 때까지 다른 프로세스들이 들어가는 횟수에 한계가 있어야 함.
-> Busy waiting(=spin lock)문제점이 있음. 계속 cpu와 memory를 쓰면서 wait하는 경우
-공유되는 데이터를 획득하고 반납하는 과정에서 semaphore를 사용함.
Busy-wait vs Block/ wakeup
Critical section의 길이가 긴 경우 Block/Wakeup이 적당.
Critical section의 길이가 매우 짧은 경우 Block/wakeup오버헤드가 busy-wait 오버헤드보다 더 커질 수 있음.
일반적으로는 block/wakeup방식이 더 좋음.
busy waiting은 a라는 쓰레드 작업이 끝날 때까지 기다려야할 때, 해당 영역에 접근이 가능한지 무한체크해야 하는 과정을 거친다.
반면, block/wakeup은 a라는 쓰레드가 critical section에 들어가면 무한체크를 하는 것이 아니라 wait queue에 들어가 대기한다.
Deadlock and Starvation
deadlock : 둘 이상의 프로세스가 서로 상대방에 의해 충족될 수 있는 event를 무한히 기다리는 현상
Bounded-Buffer-Problem
Semaphore와 Mutex
semaphore: 공유된 자원의 데이터 혹은 임계영역(critical section)에 여러 process나 Thread가 접근하는 것을 막아줌.
Mutex : 공유된 자원의 데이터 혹은 임계영역에 하나의 process나 thread가 접근하는 것을 막아줌
.
*critical section은 여러 프로세스가 데이터를 공유하면서 수행될 때 각 프로세스에서 공유 데이터에 접근하는 프로그램 코드 부분을 가리킨다.
https://jhnyang.tistory.com/101
[운영체제]세마포어(semaphore) 완전 쉬운 이해! wait(), signal(), 이진, 계수형
운영체제 완전 정복 목차~! semaphore의 유래~! 세마포어란? Semaphore는 깃발이라는 뜻입니다. 옛날에는 기찻길에서 깃발 표식으로 파란색이 걸려있으면 지나가도 되고 빨간색이 걸려있으면 섰다가
jhnyang.tistory.com
세마포어는 공유데이터에 접근할 때마다 lock을 걸어주는 변수가 필요했는데, monitor는 이러한 과정이 필요가 없다.
'운영체제' 카테고리의 다른 글
Memory Management (0) | 2021.06.29 |
---|---|
Deadlock (0) | 2021.06.29 |
CPU Scheduling (0) | 2021.06.28 |
프로세스 생성 (0) | 2021.05.15 |
운영체제 프로세스 (0) | 2021.05.14 |