운영체제-5

2023. 4. 28. 13:55공부/운영체제

728x90
반응형

생산자-소비자 문제

두 협력 프로세스 사이에 버퍼를 두고 생산자와 소비자의 상황을 다루는 문제

생산자 : 데이터를 넣는 프로세스

소비자 : 데이터를 꺼내는 프로세스

버퍼 : 데이터를 임시로 저장 하는 곳

 

버퍼에 여러 프로세스가 동시에 접근할 수 없다

버퍼에 데이터를 넣는 동안 데이터를 꺼내지 못함

데이터를 꺼내는 동안 데이터를 넣지 못함

*상호배제 필요

 

버퍼의 크기가 유한하다.

버퍼가 풀인 경우 생산자는 대기해야한다

버퍼가 널인 경우 소비자는 대기해야한다.

*동기화 필요

 

세마포어를 이용한 해결

 

생산자의코드

while(true){

데이터 생산

p(empty);

p(mutex);

데이터 insert

v(mutex);

p(full); //버퍼에 데이터 증가

}

 

소비자의코드

while(true){

 

p(full); //버퍼에 데이터 확인

p(mutex);

데이터 버퍼에서 꺼냄

v(mutex);

p(empty);

데이터 소비

}

 

판독기-기록기 문제

여러 협력 프로세스 사이에 공유자원을 두고 판독기와 기록기의 상황을 다루는 문제

판독기 : 데이터를 읽는 프로세스

기록기 : 데이터를 쓰는 프로세스

공유자원 : 공유되는 자원

 

하나의 기록기가 공유자원에 데이터를 쓰는 중에는 다른 기록기나 판독기는 공유자원에 접근 할수 없다.

공유자원에 데이터를 쓴느 동안 누구도 접근 불가

공유자원에서 데이터를 읽는 동안에는 데이터를 쓸 수 없음

*상호배제 필요

 

여러 판독기는 동시에 공유자원에서 데이터를 읽을 수 있음

판독기가 읽는중 새로운 판독기가 읽기 가능하다.

판독기가 읽는중 기록기는 대기한다.

기록기가 대기중엔 새로운 판독기가 읽을려고 하면 대기시키거나 읽게 할수 있다

 

1판독기-기록기 문제

판독기가 공유자원에 접근 중이라면 기록기보다 판독기에 우선순위를 줌

새로운 판독기는 즉기 공유자원에 접근가능하다.

문제점 기록기의 기아상태 유발 가능=새로운 판독기가 게속 들어올 경우 기록기가 게속 대기상태에 머무를수 있다.

 

세마포어를 이용한 해결

 

기록기의 코드

{

p(wrt);

공유자원에 쓰기

v(wrt);

}

 

판독기의 코드

{

p(mutex);

rcount = rcount + 1;

if (rcount == 1) p(wrt);

v(mutex);

 

공유자원에서 읽기

 

p(mutex);

rcount = rcount - 1;

if (rcount == 0) v(wrt);

v(mutex);

}

 

2판독기-기록기 문제

판독기가 공유자원에 접근 중이라면 판독기보다 기록기에 우선순위를 줌

즉 대기중인 기록기가 있다면 새로운 판독기는 공유자원에 접근 불가능

문제점

판독기의 병행성이 떨어진다.

판독기의 기아상태 유발 가능 = 새로운 기록기가 우선순위이기 떄문에 기록기가 새로 생길 경우 판독기가 대기 상태에 머무를수 있다.

 

기록기의 코드

{

p(mutex2);

wcount = wcount + 1;

if (wcount == 1) p(rd);

v(mutex2);

 

p(wrt);

공유자원에 쓰기

v(wrt);

 

p(mutex2);

wcount = wcount - 1;

if (wcount == 0) v(rd);

v(mutex2);

 

}

 

판독기의 코드

{

p(mutex3);

p(rd);

p(mutex1);

rcount = rcount + 1;

if (rcount == 1) p(wrt);

v(mutex1);

v(rd);

v(mutex3);

공유자원에서 읽기

 

p(mutex1);

rcount = rcount - 1;

if (rcount == 0) v(wrt);

v(mutex1);

}

 

프로세스 간 통신(ipc, InterProcess Communication)

병행 프로세스가 데이터를 서로 공유 하는 방법

 

공유 메모리 방법

협력 프로세스가 동일한 변수를 사용

동일한 변수 : 공유 자원인 메모리 공간사용

ex) 생산자- 소비자 문제의 유한 버퍼

판독기 기록기 문제의 공유자원

 

대량 데이터 교환, 고속 통신 가능

통신상 발생 가능 문제점 프로그래머가 해결 해야함

 

메시지 전달 방법

협력 프로세스가 메시지를 주고 받음

시스템 호출 send(), receive()

소량 데이터 교환에 적합

통신상 발생 가능 문제는 운영체제가 해결 해준다.

 

통신링크

메시지가 지나다니는 통로

통신링크의 구현 형태

연결대상 : 두프로세스, 셋 이상 프로세스

두프로세스 사이 링크 개수 :하나, 둘이상

방향성 : 단발향, 양방향

용량 : 무한, 유한, 0

무한- 링크 사이에 큐가 크기가 무한이라 송신자는 대기가 없음

유한- 큐가 제한이 있기 떄문에 큐가 풀이면 송신자는 대기해야한다.

0- 송신자는 수신자가 메시지를 받을때까지 대기한다.

 

하나의 운영체제에서 두방법 모두 사용가능

 

직접통신

두 프로세스가 직접 서로를 지정하여 메시지 전달

오직 하나의 통신 링크가 자동설정

하나의 통신링크는 오직 두 프로세스 사이에만 연관

통신 링크는 양방향

 

대칭형 주소 지정

프로세스를 집적 지정하는 것

 

비대칭형 주소 지정

수신자가 여러 송신자와 통신 링크를 갖는 경우

 

간접 통신

프로세스 사이에 둔 우편함을 통해 메시지 전달

같은 우편함을 이용하는 경우 통신링크가 설정

여러 우편함을 이용하면 여러 개의 통신 링크 존재

하나의 통신 링크가 여러 프로세스와 연관가능

통신 링크는 단방향 또는 양방향

 

우편함이 수신 프로세스에 소소

수신자 하나

통신링크는 단방향

수신 프로세스가 종료하면 우편함도 사라진다.

 

우편함이 운영체제에 소속

수신자 다수

한순간에 하나의 수신자만 가능

운영체제가 수신자 관리

통신 링크는 양방향

 

728x90

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

메모리 관리  (0) 2023.05.24
교착상태  (0) 2023.05.08
운영체제-4  (0) 2023.04.05
운영체제-3  (0) 2023.04.03
운영제체-2  (0) 2023.03.31