프로세스 강 통신
1 프로세스 간 통신 개념
프로세스 통신이란 쉽게 말하자면
프로세스간의이 메시지 전달이라고 비유 수 있겠다.
프로세스가 다른 프소세스와 데이터를 주고 받는 프로세스 간 통신에는 여러가지로 나누어진다.
1) 프로세스 내부 데이터 통신 : 프로셋 내부에 스레드가 자원을 공유하고 있는 경우
2) 프레스 간 데이터 통신 : 프로세스 하나와 프로세스 하나가 메시지를 주고 받는 것
3) 네트워크를 이용한 통신 : 네트워크가 각각 다를 때 어떻게 통신하는지에 관한 것
프로세스가 통신(메시지 전달)을 하는 가장 좋은 방식은?
프로세스들간의 통신을 할 때 중간에 전역변수를 두는 것이 효과적이다.
간단하게 사람이 정보를 전달할 때 직접 불특정 다수에게 대면으로 정보를 전달할 수 있겠지만
간편하게 카카오톡 같은 어플을 통해 메세지를 전달할 수 있다.
프로세스도 마찬가지로 전역변수라는 임시 메모리 장치를 이용하여
통신을 진행하는 것이 가장 좋은 효과적인 방식이라고 할 수 있다.
전역변수를 사용하는 이유?
1대 1로 통신을 한다면 전역변수는 필요가 없을 수 있겠지만
프로세스는 공통이 사용하는 중개장치를 통하기 때문에 전역변수는 필수적이라고 생각해볼 수 있다.
1.1 통신 구현 방식에 따른 분류
양방향 통신 : 데이터를 동시에 양쪽 방향으로 전송할 수 있는 구조로 양방형 통신이다.
반양방향 통신 : 데이터를 양쪽 방향으로 전송할수 있지만 동시 전송을 불가능하다.
단반향 통신 : 한쪽 방향으로만 데이터를 보낼 수 있는 구조 전(역변수와 파이프 통신에 이에 해당)
전역 변수를 사용하는 방식의 문제는 데이터를 받는 상대 프로세스가 언제 정보를 받는지 실시간으로 확인하기 어렵다는 점이다.
이를 해결하기 위한 방법은 수시로 전역 변수 값을 확인하는것이다.
하지만 값이 전달되지 않았는데 값을 확인하기 위해 자원을 할당하는 것은 효율적이지 않다.
우리가 카톡이 오지 않았는데 괜히 카톡을 들어가서 시간을 낭비하는것과 비슷한 원리라고 할 수 있겠다.,
이렇게 상태 변화를 살펴기 보기 위해 반복문을 무한 실행하며 기다리는 것을
바쁜 대기(busy waiting)이라고 한다.
동기화
맥이나 애플은 이용하는 유저라면
동기화라를 표현이 익숙할 것이다.
필자처럼 윈도우와 안드로이드를 수년간 이용한 사람이
애플 시스템을 접하게 된다면 조금 당황스럽다.
앞서 언급한 바쁜 대기의 통신을 이런 동기화와는 거리가 말다.
항상 통신된 값이 있는지 데이터를 받는쪽이,busy-waiting을 사용하면서 데이터 도착 영부를 확인하지만
하지마 대기가 있는 통신은 데이터를 받는 쪽이 데이터가 도착할때 까지 자동으로 대기 상태에 머물러 있다. 동기화를 지원하는 방식으로 이해할 수 있다.
2 파일을 이용한 통신
파일을 이용하면 입출력이라는 개념이 들어간다.
엄밀히 따지면 통신의 수단으로 사용할 수 있는것이다.
3 파이프를 이용한 통신
파이프를 이용한 통신이며 쌍방향이다.
양방향을 통신할 수 있는 파이프를 두개를 쓰기 때문이다.
OS를 구상할 때 통신 방법을 사용하기도 한다.
4 소켓을 이용한 통신
A와 B가 받는 네트워크 통신 방향이다.
소켓은 보조도구로 일종의 우편함이라 생각해볼 수 있다.
유선통신의 방식으로 초창기 통신방법에 많이 사용되었다.
하지만 현재는 블루투스같은 무선 통신 방법이 많이 쓰인다.
공유 자원과 임계구역
1 공유 자원 접근
프로세스는 공유된 자원을 가지고 공동작업을 실행하는데 (여기서 공동이란 '동시'를 뜻한다)
이때 프로세스의 가장 큰 역할을
한정된 자원으를 어떻게 효율적으로 사용하는 것이다.
요약 : 2개의 이상으로 프로세스가 공유 자원을 병행적으로 읽거나 쓰는 상황
2 임계구역 (Critical section)
공유 지원 접근 순서에 따라서 공유 접근 순서에 따라 실행 결과가 달라지는 프로그램을 영역을 임계영역이라고 한다.
3 생산자-소비자 문제
코드 및 실행 순서에 따른 결과로 볼 때
자원의 공유에 있어서 쉽게 쓰이는 페이지이며
생산자와 소비자에 관한 문제이다.
동시에 실행되면 문제가 될 수 있다.
하드웨어 자원을 공유할 때
임계구역에 유의한다.
4 임계 구역 해결조건
상호 배제 : 한 프로세스가 임계구역에 들어가면 다른 프로세스가 임계구역이 들어갈 수 없는 조건이다.
한정 대기 : 프로세스가 무한정 임계구역을 기다리지 않아야 되는 조건이다.
진행의 융통성 : 합리적으로 한 프로세스가 다른 프로세스의 진행을 방해해서는 안되는 것이다.
임계 구역 해결방법
임계구역을 해결하는 방법은 락(잠금)을 이용하는것이다.
락을 이용해 프로세스의 대기를 결정 하는것으로 이해할 수 있다.
결과적으로 잠금, 잠금해제를 통해 가장 기본적인 운영방식으로 프로세스의 통신을 조절할 수 있다.
1 임계구역 해결 조건을 고려한 코드 설계
1.1상호배제 문제
boolean lock =false; --> 공유 변수 == (화장실 스위치)
process p1
while (lock==true);
lock=true; == (문을 걸었다)
임계구역
lock=false; == (물이 열린다)
process p2
while (lock==true);
lock=true; == (문을 걸었다)
임계구역
lock=false; == (물이 열린다)
임계구역 문제를 해결하기 위한 코드를 위 같이 간단하게 나태낼 볼 수 있다.
임계구역은 한 명만 들어갈 수 있는 화장실이고
문을 열고 닫는 코드를 위 같이 표현했다.
간단하게 프로세스 1을 이용할 때 프로세스 2를 락을 하는 방식으로 이해해볼 수 있다.
하지만 코드가 임계구역 진입하게 전에 다른 포로세스가 사용 중인지 확인하는데
사용 중이면 끝날 때 까지 기다리고 그렇지 않으면 임계구역에 들어가지만
끝나지 않고 끊임없디 대기가 지속되는 오류가 발생할 수 있다.
타임아웃이 발생하는 경우이다.
이런 문제를 해결하기 위한 코드와 알고리즘 나타났다.
이것들은 간단한 설명을 통해 넘어가겠다.
2.2 한정 대기 문제
이런 상호배제코드의 타임아웃 문제를 해결하기위하여 상호배제 조건을 충족하는 코드가 나타났다.
바로 코드를 통해 순차적으로 신호를 주는 것이다.
하지만 이런 코드 문제가 있었는데
상호배제는 만족을 했지만 선행된 프로세스가 다른 프로세스를 물고 있는 상태가 된다는 것이다.
앞서 언급한 것처럼 프로세스는 특별한 자원을 할당받지 않은 동시에 돌아갈 수 없지만
서로 자원 잡아먹는 '교착상태'가 발생한다는 고질적인 문제를 가질 수 있다.
2.3 진행의 융통성 문제
앞선 교착상태의 문제점을 하기 위해 새로운 해결 코드가 등장했다.
특정 락 값이 1이면 프로세스 1이 임계구역을 사용하고, lock 값이 2이면 프로세스가 p2가 임계구역을 사용하는 원리이다.
(상호 배제와 한정 대기를 보장한다)
2.4 하드웨어적인 해결방법
하드웨적인 해결방법은
간단하게
하드웨어를 통해서 타임아웃을 안생기게 하는 것이다.
하드웨어적으로 두 명령어를 동시에 실행해서 임계구역 문제를 쉽게 해결한다.
임계구역을 하드웨어적으로 해결하는 방법은 편리하지만 바쁜 대기를 사용하여 검사하기 때문에 자원 낭비가 있다.
2.5 피터슨 알고리즘
공유변수를 두어 앞서 언급한 세가지 조건을 모든 만족하는 알고리즘이지만 2개의 프로세만 사용 가능하다는 한계가 있음.
2.6 데커 알고리즘
간단하게 누가 걸었는지 지정하는 알고리즘으로 이해할 수 있다
2.7 세마포어
이전 알고리즘 같으 경우에는
스위치의 조정이 필요했지만
자원 사용자가 자원을 모니터링을 하면서 관리하겠다는 개념으로 이해할 수 있다.
근대 프로그래밍의 기반이 된다.
( 일종의 스케줄러 관리 개념으로 이해할 수 있음)
연습문제
1. 반양방향 통신
2. 무한 대기
3. 대기가 있는 통신은 파이프와 소켓, 대기가 없는 통신은 전역변수와 파일
4. 양방향 통신을 위해
5. 경쟁 조건
6. 임계 구역
7. 상호배제
8. 진행의 융통성
9. 한정 대기
10. 현재 공유 가능한 자원의 수
11. if RS>0 = RS-1
12. RS=RS+1;
wake_up();
13. 프로세스가 세마포어를 사용하지 않고 임계구역에 들어가면 임계구역을 보호할 수 없는 상태가 된다.
14. 검사와 지정
15. 모니터
6장 교착상태
교착 상태의 개요
1 교착 상태의 정의
시스템 상에 임계구역이 존재하면
자원을 공유하는 부분에는 임계구역 부분을 관리해야줘야된다.
그래서 이런 해겿책으로 락의 원리를 관리했다.
하지만 3가지 조건을 갖춰지지 않으면
자원을 서로 잡고 있는 잡고 있는
교착상태(deak lock) 문제가 생긴다
간단하게 교착상태란
2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만 기다리며 작업을 더 이상 진행하지 못하는 상태이다.
2 교착 상태의 발생
필자와 같이 90년대 생이고 window xp를 사용했던 이용자라면
위 오류창을 본 경험 있을 것이다.
이처럼 위 오류는
다른 프로세스와 공유할 수 있는 자원을 사용할 때 발생한다.
os는 특별한 규칙이 정해지지 않은 상태에서는
이런 공유변수 (공유자원) 발생했을 때
무엇을 먼제 실행해야될지 모른다.
즉 이때 교착 상태가 발생한다.
또는
데이터베이스에 같은 응용 프로그람에서도 교착상태 발생한다.
3 자원 할당 그래프
프로세스가 어떤 자원을 사용중이고 어떤 자원을 기다리고 있는지를 그래프로 나타낸 것이다.
자료구조와 밀접한 관련이 있다.
위 사진은
박스 하나가 node
프로세스는 원이고
자원은 박스로 표현했다.
p1이라는 프로세스를 자원을 할당 받는 것이다
p1이 r1을 기다리는 주체가 되는 것으로 이해할 수 있다.
4 교착상태 필요조건
상호 배제, 비선점 조건 : 자원이 어떤 특징을 가지는지 나타낸다
점유와 대기, 원형 대기 조건 : 프로세스가 어떤 행위를 하고 있는지 나타낸다
5 교착 상태 해결 방법
교착상태 예방 : 교착 상태를 유발하는 조건을 발생하지 않도록 조정하는 것
교착 상태 회피 : 자원 할당량을 조절하여 교착 상태를 해결하는 방식
교착 상태 검출과 회복 : 어떤 제약을 가하지 않고 자원 할당 그래프를 모니터링하여 교착 상태가 발생하는지 확인하는 방식이다.
연습문제
1. 교착 상태
2. 자원할당 그래프
3. 상호배제, 비선점, 점유와 대기, 원형 대기의 필요저건을 가진다.
4. 교착 상태 예방
5. 교착 상태 회피
6. 교착 상태 검출
7. 교착 상태 검출
8. 교착 상태 회피
9. 교착 상태 예방, 원형 대기 예방
10. 점유와 대기 예방
11. 교착 상태 회복
12. 사이클
[별첨] WINDOW 7 기술지원 종료
마이크로스트프트가 윈도 7기술지원을 2020년 1월 14일에 종료했다.
그렇기 때문에 아직 보안 업데이트가 안 되기 때문에 업그렝드를 하거나 운영체제를 바꾸지 않으면, 신종바이러스나 해킹에 치약해질 수 있는 상태가 되었다.
2017년에도 윈도우 XP가 종료 했을 때 대규모 사이버 공격으로 150국가에서 30만대 PC가 피해를 받은 사례가 있다.
하지만 현재 국내 PC중 22%는 여전히 윈도우 7을 사용하고 있는 것으로 파악되고 있다. 다섯 대 중 한대는 XP를 사용하고 있는 꼴이다.
소프트웨어 보안 업데이트 대한 기술 지원이 종료함에 따라
사이버 공격, 즉 프로세스 통신간에 나타날수 있는 해킹에 더 쉽게 무방비로 노출되는 상황을 최소화 시키기 위해
운영체제 교체가 필수적이라고 생각한다.
출처 : https://www.youtube.com/watch?v=x1ISIBQTOmQ
참고문헌
조성호.쉽게배우는 운영체제.2019발행.한빛아카데미