1. 프로세스 간 통신의 개념
프로세스가 다른 프로세스와 데이터를 주고받는 것을 말하며
프로세스 내부 데이터 통신, 프로세스 간 데이터 통신, 네트워크를 이용한 데이터 통신이 있습니다.
- 프로세스 내부 데이터 통신 : 하나의 프로세스 내에 2개 이상의 스레드가 존재하는 경우의 통신
전역 변수나 파일을 이용하여 데이터를 주고받습니다. - 프로세스 간 데이터 통신 : 같은 컴퓨터에 있는 여러 프로세스끼리 통신하는 경우
공용 파일 또는 운영체제가 제공하는 파이프를 사용하여 통신합니다. - 네트워크를 이용한 데이터 통신 : 여러 컴퓨터가 네트워크로 연결 되어 있을 때 다른 컴퓨터끼리 프로세스는 소켓을 이용하여 데이터를 주고받습니다. 이처럼 소켓을 이용하는 프로세스 간 통신을 네트워킹 이라고 합니다.
프로세스 간 통신 방식은 단순합니다. 데이터를 주거나(send) 받는다(receive) 입니다.
전역변수는 우체통의 역할을 하는데
우리가 편지(데이터)를 우체통(전역변수)에 넣으면(send) 편지를 받는 쪽이 우체통을 확인해 편지를 가져갑니다(receive)
2. 프로세스 간 통신의 분류
분류 방식 | 종류 | 예 |
통신 방향에 따른 분류 | 양방향 통신 | 일반적 통신, 소켓 |
반양방향 통신 | 무전기 | |
단방향 통신 | 전역 변수, 파일, 파이프 | |
통신 구현 방식에 따른 분류 | 대기가 있는 통신(동기화 통신) | 파이프, 소켓 |
대기가 없는 통신(비동기화 통신) | 전역 변수, 파일 |
- 양방향 통신 : 데이터를 양쪽 방향으로 전송할 수 있는 구조
- 반양방향 통신 : 데이터를 양쪽 방향으로 전송할 수 있지만 동시 전송은 불가능하고 특정 시점에 한쪽 방향으로만 전송할 수 있는 구조
- 단방향 통신 : 모스 신호처럼 한쪽 방향으로만 데이터를 전송할 수 있는 구조
데이터를 받는 쪽에서는 데이터를 보내는 쪽이 언제 데이터를 보낼지 모르기 때문에 받는 쪽에서는
계속해서 전역변수를 확인해야 합니다.
이처럼 확인을 위해 무한 반복문을 실행하는것을 바쁜 대기(busy waiting) 라고 합니다.
시스템 차원에서 바쁜 대기는 큰 자원의 낭비 입니다.
바쁜 대기 문제를 해결하기 위해서는 데이터가 도착했음을 알려주는 동기화(synchronization)을 사용합니다.
동기화를 사용하면 바쁜 대기를 하지 않아도 운영체제가 알아서 알려줍니다.
마치 카카오톡에서 메시지가 왔을 때 우리가 매번 들어가서 확인하지 않아도
알람음으로 메시지가 왔음을 알려주는것과 같은것입니다.
3. 프로세스 간 통신의 종류
- 전역 변수를 이용한 통신 : 공동으로 관리하는 메모리를 사용하여 데이터를 주고받는 것
- 파일을 이용한 통신 : 저장장치에 파일을 읽고 쓰는 방법으로 데이터를 주고받는 것
- 파이프를 이용한 통신 : 운영체제가 제공하는 동기화 통신 방식으로, 파이프에 쓰기 연산을 하면 데이터가 전송되고 읽기 연산을 하면 데이터를 받습니다.
- 이름 없는 파이프(annonymous pipe) : 일반적으로 파이프라고 하면 이름없는 파이프를 가리킵니다. 부모와 자식 프로세스 혹은 같은 부모를 가진 자식 프로세스와 같이 서로 관련 있는 프로세스 간 통신에 사용됩니다.
- 이름 있는 파이프(named pipe) : FIFO라 불리는 특수 파일을 이용하며 서로 관련 없는 프로세스 간 통신에 사용됩니다. - 소켓을 이용한 통신 : 여러 컴퓨터에 있는 프로세스와 프로세스를 소켓으로 연결하여 데이터를 주고받는 것입니다.
파이프와 마찬가지로 소켓에 쓰기 연산을 하면 데이터가 전송되고 읽기 연산을 하면 데이터를 받습니다.
- 바인딩(binding) : 소켓을 매개로 한쪽의 프로세스와 반대쪽의 프로세스를 연결하는 작업
4. 공유 자원
여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등을 말합니다.
공유 자원은 공동으로 이용되기 때문에 누가 언제 데이터를 읽거나 쓰느냐에 따라 그 결과가 달라질 수 있습니다.
만약 은행의 계좌에 입금하는 작업을 할 때 잔액이 10만원 있었다면
프로세스 A1 이 먼저 계좌의 데이터를 읽어오고(A1 잔액 10만원)
프로세스 B2 이 같은 시간에 데이터를 읽어옵니다.(B2 잔액 10만원)
A1이 10만원을 입금합니다.(A1 잔액 20만원)
B2가 5만원을 입금합니다.(B2 잔액 15만원)
여기서, A1 과 B2가 저장을 했을 때 원래의 의도라면 A1에서 10만원 B2에서 5만원을 입금해 잔액이 25만원이 있어야합니다.
하지만 작업들이 동시에 진행됐기 때문에
잔액은 A1에는 20만원 B2에는 15만원이 저장됐습니다.
이처럼 2개 이상의 프로세스가 공유 자원을 병행적으로 읽거나 쓰는 상황을 '경쟁 조건(race condition)이 발생했다' 고 합니다.
5. 임계구역
공유 자원의 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역을 말합니다.
위의 계좌를 예로 든것중
데이터를 읽어오고 -> 입금하는 과정은 동시에 진행될 때와 순서대로 진행될 때 결과가 다르므로 임계구역입니다.
6. 임계구역 해결 조건
- 상호 배제 : 한 프로세스가 임계구역에 들어가면 다른 프로세스는 임계구역에 들어갈 수 없습니다.
- 한정 대기 : 어떤 프로세스도 무한 대기하지 않아야 합니다.
- 진행의 융통성 : 한 프로세스가 다른 프로세스의 진행을 방해해서는 안 된다.
7. 임계구역 해결 방법
-
피터슨 알고리즘, 데커 알고리즘 : 임계구역 해결 조건을 모두 만족하는 소프트웨어적인 해결 방법입니다.
- 하지만 매우 복잡해서 프로세스가 늘어나면 변수도 늘어나고 전체적인 알고리즘도 복잡해집니다.
- 임계구역을 보호하기 위해 복잡한 알고리즘을 구현하도록 주문하는 것은 바람직한 접근방법이 아닙니다.
- 세마포어 : 임계구역에 진입하기 전에 스위치를 사용 중으로 놓고 임계구역으로 들어가는 방법으로,
피터슨 알고리즘이나 데커 알고리즘보다 간단하고 사용하기 쉽습니다.
- 공유 자원의 수를 저장하고 프로세스가 임계구역에 들어가 잠금을 수행할 때 공유 자원의 수를 1 감소
- 만약 공유 자원의 수가 0보다 작으면 0보다 커질 때 까지 프로세스는 대기합니다.
- 공유 자원의 수를 1 증가시키고 대기중인 프로세스에게 wake_up 신호를 보냅니다. - 모니터 : 세마포어 알고리즘을 자동으로 처리하도록 설계한 코드입니다.
보호할 자원을 임계구역으로 숨기고 임계구역에서 작업할 수 있는 인터페이스만 제공하여 자원을 보호합니다.
'CS > 운영체제' 카테고리의 다른 글
7) 물리 메모리 관리 (0) | 2020.09.16 |
---|---|
6) 교착 상태 (0) | 2020.09.14 |
4) CPU 스케줄링 (0) | 2020.09.06 |
3) 프로세스와 스레드 (0) | 2020.09.04 |
2) 컴퓨터의 구조와 성능 향상 (0) | 2020.09.01 |
댓글