본문 바로가기
공부/OS 공부

[OS 공부] 프로세스 동기화

by 로디네로 2021. 1. 27.
반응형

 

프로세스 동기화란 : 

여러 프로세스가 공유하는 자원의 일관성을 유지하는 것

여러 프로세스가 동시에 한 자원에 접근하려 할때 이 프로세스들의 순서를 정의해주어 일관성을 유지해야 한다.

 


용어 : 

 

Critical Section : 

동일한 자원에 동시에 접근하는 작업을 실행하는 코드 영역

 

Critical Section Problem : 

프로세스들이 Critical Section 을 같이 사용할 수 있는 프로토콜을 설계하는 것

 


 

해결을 위해 필요한 조건들

 

- Mutual Exclusion (상호 배제)

  1번 프로세스가 Critical Section에서 실행중이라면 다른 프로세스들은 Critical Section에서 실행될 수 없다.

 

- Progress (진행)

  Critical Section 에서 실행중인 프로세스가 없고, 별도의 동작이 없는 프로세스들만 Critical Section에 진입가능하다.

 

- Bounded Waiting (한정된 대기)

  1번 프로세스가 Critical Section에 진입 신청 후 받아들여질때까지, 다른 프로세스들이 Critical Section에 진입하는 횟수는 제한되어야 한다.

 


 

해결책은 ?

 

1. Lock :

 

- 하드웨어 기반의 해결책

 

- 동시에 자원에 접근하는 것을 막기 위해 Critical Section에 진입하는 프로세스는 Lock을 획득하고, Critical Section을 빠져나올 때 Lock을 방출하여 동시 접근이 되지 않도록 한다. 문을 걸고 들어가고 열고 나온다는 의미

 

한계 - 다중처리기 환경에선 시간 효율성 측면 때문에 적용할 수 없다.

 

 

2. Semaphores :

 

- 소프트웨어 기반의 해결책

 

종류 - Counting, Binary

 

P 연산 : Wait동작. 자원을 사용하려는 프로세스들의 진입여부를 카운트를 통해 결정한다. 카운트를 감소시킴

V 연산 : Signal동작. 대기중인 프로세스를 깨우는 신호. 카운트를 증가시킨다.

 

Counting Semaphores - 접근제어용으로 사용

  - 공유 자원의 데이터에 여러 프로세스가 접근하는 것을 막는 것

  - 1개 이상의 스레드가 접근할 수 있다.

  - Semaphores를 소유하고 있지 않는 스레드도 해당 Semaphores를 해제할 수 있다.

  - 각 프로세스에 제어 신호를 전달하여 순서대로 작업을 수행하도록 한다.

 

Binary Semaphores(MUTEX) - 다중 프로세스들 사이의 Critical Section 문제를 해결하기 위함

  - 특정 프로세스가 공유자원을 사용하고 있다면 다른 스레드(프로세스)가 접근하는 것을 막는 것

  - 0,1 값 즉 lock, unlock 두가지 값만 가진다.

  - MUTEX를 소유하고 있는 스레드가 해당 MUTEX를 해제할 수 있다.

  

한계 - Busy Wating, Deadlock

 

Busy Wating - 

  - Semaphores 초기 버전에서 Critical Section에 진입해야 하는 프로세스는 진입하는 코드를 반복실행해야 했고 이는 CPU 자원을 낭비했다. 이를 Busy Waiting 이라고 부르고 비효율적이다.

  - 이의 해결 방법으로는.. Semaphores에서 Critical Section에 진입을 시도했지만 실패한 프로세스에 대해서 Block 시킨 뒤 Critical Section에 자리가 날 때 깨우는 방식 이용한다.

 

Deadlock - 

  Semaphores가 Ready Queue를 가지고 있고 둘 이상의 프로세스가 Critical Section진입을 계속해서 기다리고 있고, Critical Section에서 실행되는 프로세스는 진입대기중인 프로세스가 실행되어야만 빠져나올 수 있는 상황

 

 

3. Monitor :

 

- 코드를 상호배제 하게끔 만든 추상화 된 데이터 형태

 

- 공유자원에 접근하기 위한 key 획득과 반납을 모두 처리한다. Semaphores는 직접 처리해야한다.

반응형

'공부 > OS 공부' 카테고리의 다른 글

[OS 공부] 가상 메모리  (0) 2021.02.12
[OS 공부] 메모리 관리 전략  (0) 2021.02.06
[OS 공부] 동기&비동기  (0) 2021.01.17
[OS 공부] CPU 스케줄러  (0) 2021.01.13
[OS 공부] 스케줄러  (0) 2021.01.10

댓글