스터디/운영체제

운영체제 - Concurrent Process

elenalee 2023. 6. 4. 23:26

병행 프로세스

병행성(concurrency)

여러개의 프로세스 또는 쓰레드가 동시에 수행되는 시스템의 특성

 

병행프로세스

동시에 수생되는 여러개의 프로세스나 쓰레드

 

1. 병행프로세스의 실행 형태 

 

(1) 1개의 CPU

인터리빙 (프로세스가 짧은 시간동안 번갈아가며 시행)

 

(2) 여러개의 CPU

병렬처리형식 (각 CPU에서 개별 프로그램 시행, 멀티 프로세스)

인터리빙 & 병렬처리형식

(3)  멀티프로세서 시스템 ( 메모리 구조에 따라 강결합, 약결합 )

 강결합(n개의 CPU, 1개의 메모리) : 하나의 운영체제와 CPU와 하드웨어 제어

 약결합(2개 이상의 독립된 컴퓨터 시스템이 네트워크로 연결) : 각 시스템이 독립, 필요시 통신으로 호출

 

(4) 프로세스간의 관계

 독립 프로세스

- 다른 프로세스에 영향을 주고받지 않으며, 데이터나  상태를 공유하지 않음

- 프로세스의 실행 (결정적, 재생가능) : 실행결과 입력에 의해서만 결정, 항상 동일한 시행결과 

 

 협력 프로세스

- 수행중인 타 프로세스와 영향을 주고받으며 동작, 데이터와 상태를 공유

- 프로세스의 실행 (비결정적, 재생불가능) : 실행결과가 순서에 좌우되며 같은 입력에 대해 항상 동일한 결과를 보장 받을 수 없음 (A가 계좌입금,B는 인출)

 

2. 협력프로세스의 병행성의 문제

(1) 상호배제 

2개 이상의 프로세스가 동시에 임계영역을 수행하지 못하게 함

임계영역 : 2개 이상의 프로세스가 동시에 사용하면 안되는 공유자원을 억세스하는 프로그램 (코드영역)

예시) 입출금시 점유관계처리(공유자원 1만 , A,B 프로세스가 5천, 8천 개별 입금, 작업 중 Update시 잔액오류)

 

(2) 동기화

2개 이상의 프로세스에 대한 처리순서를 결정 (프로세스 동기화)

상호배제 : 임계영역의 동기화 문제

예시) 출금, 입금이 동시에 실행될때 실행순서에 따라 잔고의 금액차이 발생

 

 

(3) 통신

프로세스간 통신( IPC, InterProcess Communication)은 프로세스들이 데이터를 공유하기 위해 필요

통신방법 : 하나의 변수사용, 메시지를 주소 받음 ( 약결합시스템 혹은 강결합에서 운영체제를 통해서 통신하는 경우)

 

3. 세마포어(semaphore)

상호배제와 동기화를 해결하기 위해 데이크스트라가 제안한 도구

 

(1) 세마포어

정수형 공용변수

저장값 : 사용가능한 자원의 수 , 잠김 혹은 풀림의 상태 (0,1)

초기선언시 상황에 맞게 0이상의 정수로 초기화

2개의 기본연산 P와 V에 의해서만 사용되며, 인터럽트 되지않고 하나의 단위로 처리

세마포어마다 대기큐 필요 ( 대기큐는 FIFO)

 

(2) 연산 P

감소, default : 1, 감소시도 (down),  wait로도 사용 , 세마포어 s

s>0면 --s, s0이면 프로세스가 세마포어 s의 대기큐에 추가

 

(3) 연산 V

 증가, up시도, default : 0 

대기중인 프로세스가 없으면 s++, 대기중인 프로세스가 있으면 준비상태로 전이

 

(4) 상호배제 연결 (세마포어로 임계영역의 상호배제 해결)

 

요구사항

- 한 프로세스가 임계영역을 수행중, 타 프로세스가 진입하면 안됨

- 임계영역 수행 프로세스 완료시, 어떤 다른 프로세스가 임계영역을 새로이 수행하도록 함 

- 진입에서 대기하는 프로세스, 적절시간내에 임계영역 수행할 수 있어야 함 

※ 적절 시간 : 먼저 진입영역에 도착한 프로세스들이 모두 임계영역을 수행하는 만큼의 시간을 크게 벗어나지 않는 시간

 

상호배제를 위한 임계영역 주변의 코드영역

임계영역 시작부에 진입영역 -  임계 영역 수행을 해도 되는지 체크(연산 P)

임계영역 끝부분에 해제영역 - 다른 프로세스가 임계영역 수행 시작하도록 하는 코드 (연산 V)

 

진입

초기 진입시 P(mutex), 세마포어 mutex =1 , mutex 1 -> 0, 임계영역 실행  

다른 프로세스 접근시 mutex=0,  mutex의 대기큐에 추가(mutex는 0유지)

 

해제

수행 완료 V(mutex), 대기 프로세스 없으면 종료, mutex 0-> 1로 전환

대기큐에 프로세스 있으면 차례에 맞게 준비로 전이 실행상태가 되면 연산 P(mutex 0유지) 

 

임계 영역 수행을 위한 semaphore ( P , V 함수)

(5) 동기화 해결

상황: 프로세스 A가 코드 S1수행 후 B가 S2를 수행하도록 동기화 

semaphore를 이용한 동기화

A가 코드 S1수행 후 V(sync) sync 0 -> 1로 수정, B가 코드 S2 수행 P(sync) 1 -> 0 수정 0

A의 S1 진행이 완료되지 않은 상태에서 B프로세스의 S2가 진입하면 sync =0으로 대기

 

2. 생산자-소비자 문제

 

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

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

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

 

(1) 조건

버퍼에 여러 프로세스가 동시 접근할 수 없음 (상호배제 필요)

버퍼의 크기가 n으로 유한 (동기화 필요)

    버퍼가 가득차면 생산자 대기, 버퍼가 비면 소비자 대기 ==> 유한 버퍼의 문제

 세마포어를 이용한 해결 : mutex(상호배제), empty(버퍼가 가득한 경우의 동기화), full(버퍼가 빈 경우의 동기화)

semaphore 3개를 이용한 생산자, 소비자의 상호배제 및 동기화 해결

 

(2) 상호배제 (생산자 - 소비자 )

P(mutex ,초깃값 1 ->0) 생산자 데이터 삽입 V(mutex 0 -> 1) P(mutex 1->0)  데이터 소비  

 

(3) 동기화 

버퍼에 데이터 = 0이면 소비자 수행 불가, 버퍼에 데이터 = Full이면 생산자 작업불가

 

버퍼가 가득한 경우 동기화 : 세마포어 empty (버퍼에 존재하는 빈공간의 갯수, 초깃값 n) 

: empty 0이면 소비자가 꺼낸 후 생산자 삽입가능 

P(empty=0, 생산자 대기)  P(mutex ,초깃값 1 ->0)  소비자  데이터 소비   V(mutex 0 -> 1) V(empty증가) 데이터 생산 P(empty) P(mutex 1->0)   데이터 생산  V(mutex 0 ->1)  V(full증가)

 

버퍼가 빈 경우 동기화 : 세마포어 full(버퍼에 존재하는 데이터 갯수, 초깃값 0)

: 세마포어 full이 0이면 소비자가 사용할 데이터가 없어 생산자가 넣어야 꺼내야 넣을수 있음

P(empty n, 소비자 대기)  P(mutex ,초깃값 1 ->0) 생산자 데이터 삽입 V(mutex 0 -> 1) V(full을 증가) 데이터 소비: P(full)  P(mutex 1->0) 소비자가 데이터 소비 V(mutex 0 ->1) V(empty증가)

 

3. 판독기-기록기 문제

 

여러 협력 프로세스가 파일 등 공유자원을 사이에 두고 데이터를 쓰거나(기록) 읽는(판독)하는 상황을 다루는 문제

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

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

 

(1) 조건

판독기는 공유자원에 변동없으며 기록기는 변동 

기록기가 공유자원에 데이터를 쓰는중 타 기록기나 판독기 접근불가(상호배제)

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

판독기가 읽는 중 새로운 판독기 읽기 시도 가능

 

(2)판독기 - 기록기의 우선순위의 문제 

제 1 판독기-기록기 문제(판독기 우선) 판독기가 공유자원 접근중에 기록기보다 우선권 (기록기가 기아상태 )

제 2 판독기-기록기 문제(기록기 우선) 대기중인 기록기가 있다면 새로운 판독기는 공유자원 접근불가 (판독기의 병행성이 저하, 기아상태)

 

(3) 제 1 판독기- 기록기 문제

 

 세마포어를 이용한 해결 : wrt(판독기/기록기간 상호배제), mutex(판독기간 상호배제, 초깃값 1), 일반변수 rcount (읽으려는 판독기 갯수, 초기값 0 ) 

 

 기록기 : P(wrt) 데이터 기록 V(wrt) 

 판독기 : P(mutex)   rcount +1 , rcount  == 1  P(wrt)   V(mutex)   데이터 읽기  P(mutex)  rcount -1, rcount ==0  V(wrt)    V(mutex) : rcount작업도 판독기간 임계영역내의 작업

타 판독기 작업중 접근 => rcount+1한후 r >1 이며, 상호배제 P(wrt)없이 임계영역작업, 완료시 rcount-1하며 rcount가 1보다 크면 판독기 수행중

 

(4) 제 2 판독기 - 기록기 문제 

 

▷ 세마포어를 이용한 해결 : 5개의 세마포어 rd, wrt, mutex1, mutex2,mutex3 모두 초기값 1, 일반변수 rcount 와 wcount는 초기값 0

wrt(판독기/기록기간 상호배제), rd(기록기 우선, 판독기 대기), mutex1(판독기간 상호배제, 초깃값 1)+ 일반변수 rcount (읽으려는 판독기 갯수, 초기값 0 ),wcount(기록기 간의 대기해소) + mutex2  ==> 데이터기록 및 데이터 읽기는 임계영역, 세마포어 rd(기록기 우선, 판독기 대기), 기록기간 대기해소 wcount + 임계영역 mutex2, mutex3 (판독기들이 많으면 기록기에 우선 순위를 주기 위해 판독기의 대기 순서)

 

-> 판독기의 병행성 떨어짐, 판독기의 기아상태 유발가능

 

4. 프로세스간 통신 ( IPC : InterProcess Communication)

공유메모리 및 메시지를 이용한 통신

(1) 병행 프로세스가 데이터를 공유

공유메모리를 이용

메시지 이용

 ( 통상 운영체제가 두가지 방법을 병행하여 사용)

 

(2) 공유 메모리 방법

협력 프로세스가 동일한 변수를 사용하여 데이터를 공유

동일 변수: 공유자원인 메모리 공간 사용 (협력 프로세스들이 모두 접근)

 --> 생산 소비자 문제의 유한버퍼,  판독기-기록기 공유자원 

프로세스가 메모리에 직접 접근

   대량의 데이터를 교환 : 고속통신 가능

   상호배제와 동기화 등 통신상 발생가능문제 응용 프로그래머가 해결

 

(3) 메시지 전달방법

협력 프로세스가 메시지를 주고받으며 데이터를 전달

시스템 호출 (커널 제공) 산 send(), receive()

소량의 데이터 전달에 적합 

통신상의 문제해결은 운영체제가 전담

 

통신 링크의 구현형태 (메시지를 전달하는 통로)

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

 - 두프로세스간 링크갯수(하나, 둘이상)

- 방향성(단방향, 양방향)

- 용량-큐의 크기

   무한-송신자 대기없음

   유한-큐가 차면 송신자 대기, 0-큐가 없으므로 수신자가 받을때까지 송신자 대기)

 

5. 직접 통신과 간접통신 

 

(1) 직접 통신

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

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

두 프로세스사이에만 연관

▷ 링크는 양방향 

    송신자는 send에 수신자를 명시, 수신자는 연산 receive에 송신자를 명시

   send (B, m1) receive(B,m2) / receive(A,M1) send(A,m2)

 

대칭형 주소지정(각자 상대를 명시) send(B,m)-send(A,m)

   비대칭 주소지정(수신자가 여러 송신자와 통신 링크를 갖는 경우, send(B,m)-receive(id(변수), m)

 

(2)간접 통신

통신을 원하는 프로세스 사이에 우편함(mailbox)을 통해 메시지 전

    send(X,m) - 우편함 X - receive(X,m)

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

여러개의 우편함 사용시 여러개의 통신 링크, 통신링크의 최대용량이 0이면 동기화 필요

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

우편함이 특정 프로세스에 소유되는 경우, 단방향으로 봄 

우편함이 운영체제 소속

    수신자 여럿 , 한순간에 하나의 수신자만 가능, 운영체제가 수신자 관리, 통신링크

 

 

'스터디 > 운영체제' 카테고리의 다른 글

운영체제 - Deadlock  (1) 2023.06.06
운영체제 - 메모리 관리  (2) 2023.06.06
운영체제 - 운영체제 사례  (1) 2023.05.25
운영체제 - 운영체제 보안  (0) 2023.05.24
운영체제 - 분산운영체제  (1) 2023.05.21