운영체제 기본

프로세스 간 동기화 및 통신

홍박스 2021. 6. 7. 23:16
728x90

6장 프로세스 간 동기화 및 통신

더 깊은 내용

두개이상의 일을 하나의 프로세스가 수행할때 어케 하는가

 

  1. 병행 프로세스

두개 이상의 프로세스들이 동시에 수행됨

협력하여 하나의 기능을 수행

협력시 동기화 또는 통신이 필요함

 

병행 프로세스 처리는 제한된 자원을 공유하기 위하여 상호작용이 필요함 -> 누가 먼저 사용할것인지

상호작용:프로세스는 순서에 맞게 실행되도록 동기화되어야함

 

상호작용하는 프로세스들을 동기화 하지 않으면?

1.교착상태문제, 2.임계구역문제, 3.결과예측 불가 등이 발생 할 수 있음

 

반드시 해결해야할 내용

공유자원은 상호 배타적인 사용을 보장해야함,동기화 문제 해결 -> 한번에 같이 할수없음

항상 같은 결과를 얻을 수 있어야함 -> 순서만 다른것

교착상태 해결 -> 둘다 수행 못하지 않게

통신문제 해결

 

 

임계구역

중요한지역!

교차로 = 동시에 임계구역에 오면 안되기 때문에 상호 배제를 보장해야함 

상호배제 : 하나 오면 다른 하나는 못오게 막는것 - 누가해줌? 운영체제

임계구역에 있는 애는 가능한 빨리 수행되어야함

상호배제의 문제점

다수의 프로세스들이 하나의 공유 자원을 상호 배타적으로 사용

(동시사용불가) => 동시사용하면? 예측할수 없는 결과가 나온다.

 

상호배제 알고리즘의 요구 조건

  1. 공유자원에 대해서는 어느 한 순간에 반드시 하나의 프로세스만이 임계구역에 진입해야함(상호배제)
  2. 무한 대기 하지 않아야함(진행)
  3. DEADlock, Starvation 이 발생하지 않아야한다.(힌정된 대기, 교착상태)
  4. 사용중이아니면 임계구역에 진입하기 원하는 프로세스에게 즉시 진입하도록 허용해야함(가능한 빨리)
  5. 진입한 프로세스는 일정한 시간 내에 임계구역을 빠져나와야함(나와야함)

 

 

 

 

 

 

 

 

 

상호배제 알고리즘

1단계 상호배제 프리미티브(1단계 알고리즘)

  • 한순간에 단지 하나의 프로세스만이 임계구역에 진입하도록 보장함
  • 프로세스들이 임계구역에서 교대로 수행되는 알고리즘

(한개의 processnumber 변수 사용)

 

진행순서 : p1,p2 동시수행 -> processnumber 변수에 따라 수행 -> 수행 후 양보

 

문제점 

  • 임계 구역 진입을 교대로 진입해야함, 빠른 프로세스가 느린 프로세스를 기다려야함
  • 한 프로세스가 임계구역 내에서 중지된다면 다른 프로새스도 수행을 할 수 없음
  • 공유변수 설정에 따라 시작되는 순서가 결정됨(무조건 p1이 먼저됨) -> 순서가 정해짐

장점 : 상호배제는 보장됨

 

 

2단계 상호배제 알고리즘

-2개의 변수를 가지고 상호배제를 해결하고자함

 

진행순서 : 둘다 F -> 실행할때 확인 후 T로 변경하고 수행 -> 수행 완료 후 반납

 

문제점

2개의 프로세스가 동시에 임계구역 진입한 경우가 발생하여 상호배제가 보장되지 않음

 

 

3단계 상호배제 알고리즘(2단계에서 문제 해결)

자신의 플래그를 true로 미리 변경함

문제점

데드락(교착상태)-> 둘다 진행 못할 수 있음

-두 프로세스가 while문 이전에 차례대로 true로 변경하면, 내부의 while문에서 무한루프를 돔

 

 

4단계 상호배제 알고리즘(1단계와 3단계 결합)

세 개의 변수 사용

 

processnumber로 순서도 정하고, 미리 자신의 플래그를 true로 변경도 함

 

 

 

 

 

 

 

 

하드웨어적임 임계구역 문제해결

일부분을 하드웨어로 바꿈

똑같은데 while부분만 하드웨어로 바꿈

 

공유변수가 변경되는 동안 다른 인터럽트 발생을 허용하지 않도록 설정하면됨

더 이상 분할이 불가능한 특별한 하드웨어 명령->하드웨어칩이 1개

하드웨어 칩 부분

 

수행순서 : 칩이 F->T로 변경되고 수행후 다시 F로 변경

 

 

 

 

 

 

 

 

세마포어(임계구역에서 프로세스들의 동기화 방법) 정의 -> 다른점이 있다면 공간차지에 대한 이야기

임계구역에 들어가기전에 P수행 들어간 후 에 V수행

p = wait(진입하기 위한 연산)

v = signal(대기중인 프로세스를 깨우기 위한 연산)

s = 세마포어, 접근제어(0, 1)

 

세마포어를 이용한 생산자 소비자(데이터의 생산자/소비자) 문제해결

생산자 = 버퍼를 채우는사람

소비자 = 버퍼에서 쓰는사람

 

버퍼에다가 데이터를 넣고  빼는 행위

상호배제를 위한 

데이터가 꽉찼는데 채우고 싶다를 방지

데이터가 없는데 꺼내고 싶다를 방지

 

생산자는 빈 공간을 체크 -> 다른놈 못들어 오게 막고->채우고-> 반납 -> 데이터 증가

소비자는 빈 공간을 체크 -> 다른놈 못들어 오게 막고->지우고-> 반납 -> 데이터 증가꺼내고

 

만약 공간이 없다면 empty(빈공간이 0)에서 정지되어있다.

버퍼에 다 채워져있다면

 

 

세마포어를 활용한 읽기/쓰기 문제해결

한놈이 쓰기 쓸동안 아무도 못들어옴

 

여러명이 읽기를 쓸수 있음 하지만 쓰기는 못들어옴

다 읽었으면, 반환

 

 

 

 

 

 

 

 

모니터란?

-세마포어와 비슷하지만 제어하기가 용이함 왜? 객체지항 개념을 넣었기때문에

 

 

구조 :

x.wait()

다른 프로세스를 중단시킴= 세마코어P와 유사 x는 S와 유사

x.signal()

중단된 프로세스를 재개시킴= 세마코어V와 유사

ring_buffer_has_space

생산자 프로세스가 확인= 세마포어empty와 동일

ring_buffer_has_data

소비자 프로세스가 확인= 세마포어full과 동일

 

세마코어랑 모두 비슷하고 class형식일 뿐이다.

 

세마코어가 뭔지 왜나왔는지 PSVEF알고

모니터가 뭔지 정도만 알기

 

 

 

 

 

메시지란? 별로 안중요

프로세스간의 통신 및 동기화에 적합한 비교적 단순한 메커니즘

  • 공유변수 이용은 공유변수의 변목현상 문제발생

->이를 프로세스간 직접 통신해서 상호간에 순서를 정하여 동기화 문제를 해결하고자함

메세지 정의

  • 송신측 프로세스와 수신측 프로세스 간에 교환될 수 있는 정보의 집합
  • 분산운영체제에서 메시지 메커니즘의 사용이 보편화 되어 있음

형식

송신,수신,길이,형식,실제 데이터

 

 

고려사항

직접할것인가 간접할것인가

직접 : 

송신측이 특정 수신측을 설정해야하고 

반대로 메세지 수신을 희망하는 수신측은 송신측 설정

간점 :

우편함이라고 부름

모든 프로세스 간의 메세지 교환은 이 우편함을 통하여 수행됨

 

복사문제 :

메세지 복사가 기억장치와 cpu사이클을 방해

버퍼링 문제 :

송신은 일단 버퍼에 보내고 수신이 나중에 받음

길이 문제 :

고정길이 : 구현은 쉽지만 성능은…

가변길이 : 성능을 좋지만 구현이 어려움

728x90