티스토리 뷰

운영체제

[운영체제] 프로세스 동기화

Hani_Levenshtein 2020. 12. 24. 20:14

스케쥴링을 알아볼 때, 한 프로세스에서 다른 프로세스로 넘어가는 Context Switching을 알아봤었습니다.

프로세스는 최소 하나의 Thread라는 것을 포함하는데 사실 프로세스를 진행시키는 것은 Thread를 진행시키는 것입니다.

한 프로세스 내의 여러 개의 Thread가 스위칭되며 진행될 때 한 프로세스가 여러 동작을 하는 것처럼 보이고, 여러 프로세스의 여러 개의 Thread가 스위칭되며 진행될 때 여러 개의 프로세스가 동시에 동작되는 것처럼 보이게 됩니다.

따라서 Context Switching에서의 스위칭되는 요소는 사실 프로세스가 아니라 Thread라고 할 수 있습니다.

 

현대의 OS는 프로그램을 Thread단위로 실행하기 때문에 Thread에 대하여 더 알아볼 필요가 있습니다.

지난 포스팅에선 OS의 주요 기능 중 하나인 프로세스 관리의 Scheduling에 대하여 다뤘습니다.

이번에는 프로세스 관리 측면의 또 다른 기능인 Thread Synchronization에 대하여 알아볼 것입니다.


Thread들은 프로세스의 메모리 공간과 자원 공유하지만 개별적인 PC, SP, 레지스터, 스택 등은 공유하지 않기 때문에, 공유하지 않는 정보들은 Context Switching이 발생할 때 PCB에 저장시켜놓습니다.

하지만 RAM에는 여러 프로세스가 존재하며, Thread들이 동시에 하나의 공유 자원 또는 주소에 접근하고 업데이트할 때 문제가 발생할 수 있습니다. 여기서 프로세스 간 공유하는 요소를 임계 구역(Critical Section)이라고 합니다. 

 

Critical Section

임계 구역에 복수의 Thread가 진입하여 해당 요소를 건드려 문제가 생기는 것을 방지하기 위한 조건이 있습니다. 

Mutual Exclusion : 임계 구역에는 한 번에 하나의 Thread만 접근할 수 있습니다.

Progress : 어느 Thread도 점유하고 있지 않은 임계 구역은 어떤 Thread도 진입할 수 있습니다.

Bounded Waiting : Starvation을 방지하기 위해서 Thread는 유한 시간 안에 임계 구역으로 진입할 수 있어야 합니다.

 

이렇게 공유 요소, 즉, 임계 구역을 어느 Thread가 어떤 순서로 사용할지 규칙을 정하는 것이 프로세스 동기화입니다.

스케쥴링 방식에도 여러 가지가 있듯이, 동기화에도 여러 방식이 존재하는데 이를 알아볼 것입니다.


Mutex

Thread가 임계 구역에 진입하기 위해선 Key가 필요한데 Key가 하나뿐이라 임계 구역에는Thread가 하나만 진입할 수 있으며 임계 구역에 대한 용건이 끝나면 Thread는 Key를 반환합니다.

Mutex의 이름에서도 상호 배제(MUTual EXclusion)적인 성격을 알 수 있습니다.

 

Semaphore

임계 구역에 접근할 수 있는 최대 Thread의 개수가 정해져 있어서 Thread가 임계 구역에 들어올 때마다 앞으로 들어올 수 있는 Thread의 개수가 줄어드는 방식입니다. 들어올 수 있는 Thread의 개수가 0이면 해당 Thread는 먼저 들어간 Thread가 나올 때까지 대기해야 합니다. 임계 구역에 대한 용건이 끝나면 앞으로 들어올 수 있는 Thread의 개수를 증가시킨 후 나가게 됩니다.

임계 구역에 접근할 수 있는 최대 Thread의 개수가 1인 Binary Semaphore를 제외하곤 상호 배제적 성격이 없습니다.

 

Mutex와 Semaphore의 차이점

Mutex는 공유 자원을 보호하고, Semaphore는 Signaling을 위해 사용되어야하며, 반대 되는 목적을 가지면 안됩니다.

 

 

'운영체제' 카테고리의 다른 글

[운영체제] 메모리와 페이징  (0) 2021.01.01
[운영체제] 교착상태  (0) 2020.12.26
[운영체제] CPU 스케쥴링  (0) 2020.12.24
[운영체제] 시스템 콜  (0) 2020.09.20
[운영체제] 인터럽트  (0) 2020.09.15
댓글