본문 바로가기
Develop/Network

[윤성우의 열혈 TCP/IP 소켓 프로그래밍] Chapter11 - 내용 확인 문제 풀이

by Tarra 2023. 6. 30.

 

 

 

 

 [윤성우의 열혈 TCP / IP 소켓 프로그래밍] 책을 기반으로 개인적으로  문제 풀이 및 개념을 정리한 내용입니다.

모든 소스 코드와 강의, 확인 문제의 정확한 답안은 (23년 7월 1일부터 전면 무료화 예정)

http://www.orentec.co.kr/

 

====== 오렌지 미디어 ======

 

www.orentec.co.kr

에서 확인할 수 있습니다.

 

 


 

01. 프로세스간 통신이 의미하는 바는 무엇인가? 이를 개념적으로, 그리고 메모리의 관점에서 각각 설명해 보자.

 

프로세스간 통신은 여러 프로세스들이 서로 정보를 교환하고 상호작용하는 메커니즘을 의미한다.

 

1. 개념적인 관점에서의 프로세스 간 통신

개념적으로 프로세스 간 통신은 프로세스들이 메시지를 주고 받고, 서로의 상태를 공유하며 동기화하여 작업을 조율하는 과정이다.

이를 통해 다른 프로세스와의 협력적인 작업이 가능해지며, 분산 시스템에서 여러 프로세스가 협력하여 병렬적인 처리를 수행할 수 있다.

프로세스 간 통신은 일반적으로 IPC(Inter-Process Communication)라고도 불리며, 소켓, 파이프, 공유 메모리 등 다양한 방식으로 이루어질 수 있다.

 

2. 메모리 관점에서의 프로세스 간 통신

프로세스는 독립된 메모리 공간을 갖고 실행되기 때문에 기본적으로 서로의 메모리에 직접 접근할 수는 없다.

따라서 메모리 관점에서 프로세스 간 통신은 프로세스가 메모리 공간을 공유하거나, 메모리 영역을 복사하고 전달함으로써 데이터를 주고 받는 것을 의미한다.

 

- 공유 메모리

프로세스 간에 메모리 공간을 공유하여 데이터를 읽고 쓸 수 있도록 한다.

이를 통해 프로세스들은 데이터를 공유하고 실시간으로 업데이트할 수 있다.

 

- 메모리의 복사와 전달

한 프로세스에서 생성한 데이터를 다른 프로세스에게 전달하기 위해 메모리 복사를 수행한다.

일반적으로는 IPC 기법 중 메시지 큐, 파이프, 소켓 등을 사용하여 데이터를 전달한다.

 

더보기

모범 답안

개념적으로 프로세스간 통신은 두 프로세스 사이에서 데이터를 주고 받는 것을 의미한다.

그러나 메모리의 관점에서 보면 이 두 프로세스가 메모리를 공유하는 것으로 이해할 수 있다.

공유하는 메모리 영역이 존재함으로 인해서 프로세스 상호간에 데이터를 전달할 수 있기 때문이다.

 

 

02. 프로세스간 통신에는 IPC라는 별도의 메커니즘이 요구된다. 그리고 이는 운영체제에 의해서 지원되는 별도의 기능이다. 그렇다면 프로세스간 통신에 있어서 이렇듯 운영체제의 도움이 필요한 이유는 무엇일까?

 

1. 메모리 보호

각 프로세스는 독립된 메모리 공간을 가지고 있기 때문에 직접적인 접근이 불가능하다.

운영체제는 프로세스 간의 메모리를 보호하기 위해 가상 메모리 주소 공간을 할당하고, 접근 권한을 관리한다.

이를 통해 프로세스 간의 데이터 무단 접근이나 오염을 방지한다.

 

2. 프로세스 스케줄링

운영체제는 다수의 프로세스가 동시에 실행될 수 있는 환경을 제공한다.

프로세스 간 통신을 위해 여러 프로세스를 동기화하고, 작업의 우선순위를 결정하여 공정한 자원 할당과 작업 조율을 수행한다.

 

3. 동기화 및 상호배제

여러 프로세스가 동시에 공유된 데이터에 접근할 때, 동시성 문제가 발생할 수 있다.

운영체제는 프로세스 간의 동기화와 상호배제를 위한 도구를 제공하여 데이터 일관성과 무결성을 유지하고, 경쟁 조건등의 문제를 해결한다. 이를 통해 프로세스 간의 상호작용이 안전하게 이루어진다.

 

4. 통신 매체 관리

프로세스 간 통신에는 다양한 방식과 매체가 사용될 수 있다. 

운영체제는 이러한 통신 매체를 관리하고, 통신 프로토콜을 지원하여 프로세스 간의 데이터 전송을 원활하게 처리한다.

이는 소켓, 파이프, 공유 메모리 등 다양한 IPC 기법을 제공하는 것으로 나타난다.

 

더보기

모범 답안

IPC를 위해서는 공유되는 메모리가 필요한데, 프로세스 간에는 메모리 공간을 공유하지 않기 때문에 운영체제의 도움이 필요하다.

즉, 두 프로세스가 동시에 접근 가능한 메모리 영역을 운영체제가 제공해야 하는 것이다.

 

 

03. 대표적인 IPC 기법으로 '파이프(pipe)'라는 것이 있다. 파이프의 IPC 기법과 관련해서 다음 질문에 답해보자.

a. 파이프는 프로세스간에 데이터를 송수신하는 경로를 의미한다. 그렇다면 이 경로는 어떻게해서 생성되며, 누구에 의해서 만들어지는가?

파이프는 운영체제에 의해 생성되며, 프로세스 간에 데이터를 송수신하는 경로로 사용된다.

파이프는 일반적으로 파이프 함수를 호출하여 생성되며, 파이프 함수는 운영체제 내부에서 파이프를 생성하고 그에 대한 파일 디스크립터를 반환한다.

프로세스는 이 파일 디스크립터를 사용하여 파이프에 접근한다.

 

b. 프로세스간 통신을 위해서는 통신의 주체가 되는 두 프로세스 모두 파이프에 접근이 가능해야 한다. 그렇다면 하나의 파이프에 두 프로세스는 어떻게 해서 모두 접근이 가능한가?

파이프는 일반적으로 부모 프로세스가 생성하고 자식 프로세스와 공유하는 방식으로 사용된다.

부모 프로세스가 파이프를 생성한 후, 자식 프로세스를 생성할 때 파이프를 공유하는 메커니즘을 사용한다.

이를 통해 부모 프로세스와 자식 프로세스는 동일한 파이프에 접근할 수 있게 된다.

 

c. 파이프는 두 프로세스 간에 양방향 통신이 가능하게 한다. 그렇다면 양방향 통신을 진행하는데 있어서 특히 주의해야할 사항은 무엇인가?

파이프를 통한 양방향 통신은 주의가 필요하다. 

파이프는 단방향 통신을 위해 설계된 것이기 때문에, 양방향 통신을 구현하려면 두 개의 파이프를 사용해야 한다.

한 파이프는 한 방향의 통신에 사용되고, 다른 파이프는 반대 방향의 통신에 사용된다. 따라서 양방향 통신을 구현할 때에는 두개의 파이프를 동기화하여 데이터의 정확한 송수신을 보장해야한다.

 

더보기

모범 답안

a. 파이프는 pipe 함수의 호출에 의해서 생성되는데, 이를 실제로 생성하는 주체는 운영체제이다.

b. pipe 함수 호출에 의해서 파이프가 생성되면, 파이프에 데이터를 입출력 하기 위한 두 개의 파일 디스크립터가 반환된다.

바로 이 파일 디스크립터를 fork 함수호출 시 자식 프로세스에게 복사해 줘서 부모 프로세스와 자식 프로세스가 동시에 파이프에 접근이 가능하게 된다.

c. 파이프는 프로세스 사이에서의 데이터 흐름을 관리하지 않는다. 때문에 파이프에 데이터가 흘러 들어가면 어느 프로세스건 그 데이터를 읽어 들일 수 있다. 따라서 프로세스 사이에서의 데이터 흐름이 어긋나지 않도록 주의해야 한다.

 

 

04. IPC 기법을 확인하는 차원에서, 두 프로세스 사이에서 총 3회에 걸쳐서 문자열을 한 번씩 주고받는 예제를 작성해보자. 물론 두 프로세스는 부모, 자식의 관계로 형성이 되며, 주고 받을 문자열의 종류는 프로그램상에서 여러분이 임의로 결정하기 바란다.

 

(생략)

 

 

 

 


출처 : [윤성우의 열혈 TCP / IP 소켓 프로그래밍] / 윤성우 저 / 오렌지 미디어

https://cafe.naver.com/cstudyjava

 

윤성우의 프로그래밍 스터디그룹 [C/... : 네이버 카페

윤성우의 스터디 공간입니다. C와 JAVA를 공부하시는 분들은 모두 들어오세요. ^^

cafe.naver.com