본문 바로가기
컴퓨터공학/운영체제

8. 상호배제와 동기화

by meow0110 2024. 7. 3.

■ 상호배제
- 병행 프로세스에서 프로세스 하나가 공유 자원 사용 시 다른 프로세스들이 동일한 일을 할 수 없도록 하는 방법이다.

- 읽기는 동시에 접근 가능

- 그러나 쓰기 작업의 경우, 동시에 하면 데이터 손상이 나타남.

 

 

■ 동기화 :

- 공유 자원을 동시에 사용하지 못하게 해서, 실행을 제어하는 방법

- 프로세스 간 동기화 라고 부를 수 있다.

 

■ 임계 영역 : 공유 메모리를 말함.

■ P1이 사용중이다. 그래서 P2가 진입이 불가능. 이러한 개념을 프로세스 간 동기화(상호배제) 라고 함 

 

■ 생산자 소비자 프로세스

- 여러 프로세스가 공통 작업을 수행하기 위해, 서로 협력하는 대표적인 예시

- 병행처리 예시

- 협력관계의 대표적인 예시

 

■ 버퍼

- 위의 가운데 문자, 어셈블리 코드, 적재 모듈에 대해

- 생산자가 만든 생산물을 저장하는 공간. 즉 버퍼라고 부름

 

 

■ 버퍼의 구조

- 가운데 빙글빙글 돈다. 즉, 유한적인 공간, 버퍼를 효율적으로 쓰는 모습이다.

- 회전초밥집을 생각하자. 음식을 만들면 컨베이어 벨트에 올린다. 그러면 소비자는 그것을 사용해서 쓴다. 비어진 공간이 요리사 앞으로 오면 새로운 요리를 올린다. 이런 개념으로 생각하면 될듯 하다.

- 생산자와 소비자 간의 동기화가 잘된 구조라고 생각하자.

 

■ 버퍼에 대한 문제

- a는 가득찬 상태다. 생산자가 데이터를 생산해도 저장할 공간이 없음

- c는 소비자가 쓸 데이터가 없는 상태다.

- 결론 : 생산자, 소비자 사이에 동기화가 제대로 이루어져야 함. 안그러면 문제가 생김.

 

■ 공유 버퍼에 상호배제 개념을 넣어, 생산자와 소비자 문제를 해결!

- 하나 생산하면, 생산된 값을 가져갈 수 있도록, 

- 생산하지 않았다면 가져가지 못하도록 대기!

- 가득 생산하면 더이상 버퍼에 프로세스들이 생산하지 못하도록!

 

■ 왼쪽 그림 : 생산자 입장

- 가득참? 쓰지마

 

■ 오른쪽 그림 : 소비자 입장

- 비어있음? 쓰지마!

 

 

■ 생산자, 소비자 프로세스를 프로그램 알고리즘으로 나타낸 것.

 

■ 왼쪽 그림 : 생산자

- 버퍼 사이즈와 같을 때까지는 계속 실행함.

- 그러나 카운터가 버퍼사이즈보다 오버될 경우(버퍼 꽉찼어!), while문을 빠져나오게 된다. 즉 중단이다!

 

■ 오른쪽 그림 : 소비자

- 버퍼 사이즈 내에서 계속 사용한다. 즉 맨 아래 counter --; 를 보다시피 계속해서 소비를 함

- 위와는 반대로 0 이하가 되면, 즉 아무것도 없을 경우(버퍼가 싹 비었어!) 는 while문을 빠져나가게 된다. 중단이다!

 

 

■ 경쟁상태

- 병행 프로세스 중에 발생하는 오류로 보면 된다.

- 즉, 마지막 프로세스가 쓴 값, 결과로 인해 발생하는 오류라고 생각하자.

- 이를 해결하기 위해서는,  적절한 순서가 보장되어야 해결된다.

 

■ 경쟁상태

- 위에서 언급했다시피, 적절한 순서가 보장되어야 해결된다.

- 읽기를 먼저, 그다음 쓰기 명령을 수행하게 한다.

 

■ 결론

- 경쟁상태를 방지하기 위해서는, 동기화가 필요하다. 

- 동기화를 제대로 수행하기 위해서는 상호배제임계영역이 필요하다.

 

 

■ 임계영역 : 

- 임계영역은 공유 메모리가 참조되는 프로그램의 부분으로 다수의 프로세스가 접근 가능한 영역이면서 한 순간에 하나의 프로세스만 사용할 수 있는 영역을 의미한다.

- 임계자원을 이용하는 그 영역을 말한다. 즉, 다수의 프로세스가 접근은 가능함. 하지만 하나가 점유하면 다른 프로세스는 사용하지 못한다. 

 

■ 진입영역

- 특정 프로세스가 임계영역으로 들어가기 전에 먼저 요청해야하는 곳이다.

 

■ 출구영역 (잔류영역)

- 특정 프로세스가 임계영역을 다쓰고 나가는 곳이다.

 

 

■ 임계영역을에서 사용하는 코드 라고 생각하자

 

■ 진입영역

- 계속 대기중인 곳이라 생각하자. 즉, 아직 임계영역에 진입하지 못한 상황

- /* 임계영역   */   : 임계영역 안으로 들어와서 수행하는 모습이다. 코드는 없는 모습. 그냥 해당 위치라고 보자.

 

■ 탈출영역

- 나가는 곳!

 

 

 

 

■ 임계영역의 3가지 조건

 

■ 상호배제 : 작업중임. 들어오지마!

■ 진행

- 임계영역에 진행중인 프로세스가 없음. 즉 비어있음.

- 다수의 프로세스들이 임계영역으로 들어와서 작업을 할려고 함

- 이 때, 프로세스 선정 알고리즘에 의해서 다음 임계영역에서 수행할 프로세스를 선정하는 과정이 필요하다.

- 그리고 비어있는 임계영역은 프로세스들을 대기시키며, 무한정 미룰 수 없다. 

 

■ 제한된 대기

- 한 프로세스가 임계영역 사용을 계속해서 기다리게 하는 것이 아닌 것을 보장한다고 생각하자.

- 즉, 내가 요청하면, 얼마 후에는 반드시 임계영역에 들어갈 수 있다! 

 

 

■ 데커 알고리즘 

- 임계영역을 설명하고자하는 대표적인 프로그램 알고리즘.

 

■ 프로세스 간의 동기화를 위해 만들어진 데커알고리즘의 예제다. 살펴보기만 하자.

 

■ 세마포 :

- 프로세스 간의 동기화를 해결하기 위한 개념.

- P, V 연산과 관련됨.

 

■ 세마포어 개념: 

- 세마포를 의미하는 S는 표준 단위 연산 P(프로세스 대기하게 하는 wait 동작, 임계 영역에 진입하는 연산)와 V(대기 중인 프로세스 깨우려고 신호 보내는 signal 동작, 임계 영역에서 나오는 연산)로만 접근하는 정수 변수이다.

 

 

■ 세마포어 정의

 

■ 세마포 공유자원 접근관리 모습

- 공유자원이 있을 떄, wait 기다리고  singal 신호를 보내고

- 신호를 통해 임계영역에 들어가게 되면, 해당하는 정보 공유 자원을 사용한다. 

- 다 쓰면 나간다. 

- 그리고 누군가 쓸 땐 다시 기다리는 형태다.

 

■ 세마포 동기화

- signal, wait 라는 값을 통해 동기화를 하고 있는 모습이다. 

 

 

 

 

■ 학습정리

병행 프로세스간 상호작용

  • 병행 프로세스에서 프로세스 하나가 공유 자원 사용 시 다른 프로세스들이 동일한 일을 할 수 없도록 하는 방법이다.

 

 

임계영역

  • 임계영역은 공유 메모리가 참조되는 프로그램으 부분으로 다수의 프로세스가 접근 가능한 영역이면서 한 순간에 하나의 프로세스만 사용할 수 있는 영역을 의미한다.

 

 

세마포어

  • 세마포를 의미하는 S는 표준 단위 연산 P(프로세스 대기하게 하는 wait 동작, 임계 영역에 진입하는 연산)와 V(대기 중인 프로세스 깨우려고 신호 보내는 signal 동작, 임계 영역에서 나오는 연산)로만 접근하는 정수 변수이다.

'컴퓨터공학 > 운영체제' 카테고리의 다른 글

10. 교착 상태 2  (0) 2024.07.08
9. 교착 상태 1  (0) 2024.07.08
7. 병행 프로세스  (1) 2024.07.03
6. 스케쥴링 알고리즘  (0) 2024.06.25
5. 프로세서 스케쥴링  (0) 2024.06.12