Computer Science/Operating System

동기화(Synchronization)

DongHo 2023. 5. 14. 03:31

동기화(Synchronization)

작업들 사이에 실행 순서를 정해주는 것입니다.
(단, 레지스터, 스택, PC는 스레드가 공유하지 않습니다.)

 

동기화 이슈

여러 스레드가 동일한 자원(데이터)에 접근하는 경우 동기화 이슈가 발생할수 있다.

 

동기화 이슈 해결방안

1) Mutual Exclusion(상호배제)

한 번에 한 스레드만 들어가서 작업을 할 수 있도록 하는 것

lock.acquire()
for i in range(100000):
	g_count += 1
lock.release()

임계 자원(criritical resource) -> g_count
임계 영역(critical section) -> lock.acquire() ~ lock.release() 의 영역

 

Test-and-Set

더이상 쪼갤 수 없는 것을 Atomic Operation이라고 합니다.
Test(Load)-and-Set(Store/Write) : 두 가지 일을 하나의 명령어로 합니다.
Mutal Exclusion 구현이 가능합니다.

 

Mutex & 세마포어(Semaphore)

Critical Section(임계 구역)에 대한 접근을 막기 위해 Locking 매커니즘이 필요합니다.

Mutex(Binary Semaphore) : 임계구역에 하나의 스레드만 들어갈수 있습니다.
Semaphore : 임계구역에 여러 스레드가 들어갈수 있습니다.(counter를 둬서 동시에 리소스에 접근 할 수 있는 허용 가능한 스레드 수를 제어합니다.)

 

 

2) Deadlock(교착상태) 막기

둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한으로 기다리는 현상입니다.

 

 

3) Starvation(기아 상태) 막기

특정 프로세스가 수행 가능한 상태임에도 불구하고 매우 오랜 기간 동안 스케쥴링 되지 못하는 경우를 말한다.

 

 

Mutual Exclusion 문제의 Software 해결방안

1) 피터슨 알고리즘
2) 데커 알고리즘

이 두가지 해결책이 있습니다.

 

 

 

기타 개념
임계영역(Critical Section) : 공유 메모리가 동시에 참조되지 않게 하기 위해 공유 메모리가 참조되는 부분