오래 못 할 짓 하지 않기
[ 운영체제 ] 14. 동기화 (Synchronization) 본문
Synchronization
● 배경
Process가 서로 communication 하는 법으로는
- Message passing
- Shared memory
두 가지가 있다.
이런 경우에는 주로 Shared memory에서 Conflict 가 생기는데
그에 대해 대표적인 예시가 Producer - consumer problem이다.
● Interleaved problem
"나뭇잎 사이사이에 뭐가 들어온다."
이 흐름은 저번에 했음.
주의해서 봐야하는 건 Produer와 Consumer에 있는 counter ++ , -- 이다.
▼ 저걸 Assembly Language로 바꿔보면 다음과 같다.
근데 만약에 counter ++ 관련 3개의 줄에서
만약 2번째 줄에서 context switch가 일어난다면 어떻게 될까?
만약 counter = 5 로 시작했다고 가정해보자.
< Producer >
P1 : reg1 에 5를 담음
P2 : reg1 의 값에서 1을 더함 (reg1 == 6)
'>>아직 counter값은 업데이트 X라서 counter == 5임.'
< Consumer >
C1 : reg2 에 5를 담음
C1 : reg2 의 값에서 1을 뺀다 (reg2 ==4)
'>>counter 값 업데이트 X couter ==5'
< 다시 Producer >
P3 : Counter에 reg1 값을 넣는다.
'>> Counter == 6'
< 다시 Consumer >
C3 : Counter에 reg2 값을 넣는다.
'>> Counter == 4'
생각해보면 Counter ++,-- 한 번씩 하면 그대로 5여야 하는데 4 or 6 이 나온다.
● Interleaved problem
어디서 context swich가 일어나냐에 다라 결과가 달라진다.
= 실행 순서에 따라 결과가 달라진다.
● 원인
경쟁상태 : 여러 프로세스가 같은 데이터를 동시에 접근하고 수정하려고 하는 상황
● 해결법
Only one process can access and maipulate the data at a time
The Critical Section Problem
프로세스들은 Critical section이란 걸 가지고 있다.
이는 Shared Data나 정보들을 수정하는 부분이다.
그래서, 이 때 섞이지 않아야 하므로
Critical Section에 하나의 프로세스가 들어가면, 다른 process는 들어가서는 안 된다.
따라서, Critical Section problem의 해결법은
Process가 Share data 에 대해 같이 일을 할 때, 동기화 하는 구조를 디자인하는 것이다.
● Process의 구조
- Entry section : Critical section 로 들어가기 위한 Permsion Request
- Critical section : Shared resources 를 다루는 곳
- Exit section : Critical section에서 나간다고 알리는 곳
- Critical section : Shared resources 를 다루지 않는 곳
Critical Section Problem 에 대해 필요한 것
● Mutual Exclusion (상호 배제)
: 하나의 Process가 Critical section에서 돌아가고 있으면, 다른 Process는 거기서 작업 X
= 하나의 Process만 Ciritcal section에서 동작할 수 있다.
● Progress ( Deadlock 있으면 X )
: crtical section에 실행되는 게 없는데 critical 에 들어가려고 하는 상황이면
process가 무기한으로 기다려줄 수 없음.
(뒤에 누가 기다리고 있으면 적당히 하다가 나와야 함)
이런 상황이 있으면 안 됨
ex) 얘들아 이거 하자
A: B하면 함
B : C하면 함
C : A하면 함
서로가 서로를 기다리고 있음
● Bounded Waiting ( 횟수 제한 )
: Process들이 Critical section에 몇 번 들어갈 수 있는지 횟수를 정해두어야 한다.
(Critical section으로 입장을 신청하고 받아들여지는 사이에 확인되어야 함)
Critical - Section
Os 가
i) Non - Preemptive
- 비선점이면 프로세스가 작업하는 중에 빼앗길 일이 없다.
> Context switch 생기지 않음
> Race condition 에서 자유롭다.
ex) 내가 count ++ 이거 다 끝낼 때까지는 count -- 관련된 놈 실행이 안 된다.
근데 비선점이면 OS가 유연하게 돌아가거나 빨리 끝내야하는 걸 끝내는 게 잘 안 됨
ii) Preemptive
- 선점 가능될 수 있음
> 근데 그 이외 기능들 때문에 장점이 더 많음
> real-time process 에 적합하다.
(출처)
한동대학교 고윤민교수님 - 운영체제
'3학년 1학기 > 운영체제 (OS)' 카테고리의 다른 글
[ 운영체제 ] 16. Sychronization tool (0) | 2024.05.06 |
---|---|
[ 운영체제 ] 15. 동기화와 관련된 문제 해결 (0) | 2024.04.30 |
[ 운영체제 ] 13. 리눅스 스케줄러 (0) | 2024.04.19 |
[ 운영체제 ] 12. Scheduling ( Multiple - Process / Real - Time CPU ) (1) | 2024.04.16 |
[ 운영체제 ] 11. Scheduling Algorithms (0) | 2024.04.12 |