IPC - 파이프(PIPE)의 개념

Language/C 2011. 9. 16. 09:30

이번에는 IPC 기법 중 PIPE 에 대하여 알아보도록 하겠습니다.

파이프의 느낌은 슈퍼마리오의 게임에서 파이프를 타고 입구와 출구를 오가는 그런 느낌이죠.


IPC 에서 PIPE 를 간단하게 설명한다면, 

여러개의 프로세스가 공통으로 사용하는 임시공간이라고 할 수 있습니다.


그리고 그 임시 공간은 실제로 파일 시스템에 생성되는 임시 파일입니다.

하나의 프로세스가 파이프에 쓰게 되면 다른 프로세스는 그 파이프에서 읽는 방식으로 쓰게 됩니다.




위에 그림처럼 파이프는 시스템 내부에서 관리하는 임시 파일을 이용하므로, 

다른 IPC 기법 중 하나인 SIGNAL 과는 다르게 대용량의 메시지도 전송이 가능합니다.


이런 파이프는 보통 익명의 파이프와 이름을 가진 Named Pipe 의 두가지 방법으로

사용할 수 있도록 OS 가 제공 합니다.


파이프는 소켓 등의 비하면 꽤 단순한 IPC 기법으로 여러가지 특징을 가지고 있습니다.


그중 첫번째 특성은, 파이프는 입구와 출구의 개념이 없다는 것입니다.

파이프는 단순한 통로 입니다. 

방향성이 없기 때문에 자신이 쓴 메시지를 자신이 읽을 수 있다는 것을 항상 유의해야 합니다.


그렇기 때문에 두개의 프로세스가 통신할 때는 

읽기전용 파이프와 쓰기 전용 파이프의 두 개의 파이프를 쓰게 됩니다.

두개의 파이프를 생성하고, 한쪽 파이프를 일부러 닫아 버리는 것이지요.


그래서 결국은 아래 그림처럼 파이프를 두개 생성하여 하나의 방향으로만 갈 수 있도록 합니다.






또 파이프의 특성 중 유의할 것은 파이프는 fork() 함수에 의해 복사 되지 않는다는 것입니다.


fork() 함수에 의해서 프로세스가 생성되면, 자식 프로세스는 부모가 사용하던 변수를 복사하게 됩니다.

하지만 파이프의 경우 복사되는것이 아니라 File Descriptor 를 공유하게 됩니다.


즉 자식 프로세스와 부모 프로세스가 같은 파이프를 가리키게 됩니다.


그외에도 익명의 파이프는 또 하나의 주요한 특성이 있습니다.

부모 자식프로세스 사이에서만 파이프를 사용 가능하다는 것입니다.


파이프는 운영체제에서 임시로 생성되는 파일이고, 접근 가능한 방법은

File Descriptor(파일 디스크립터) 를 공유하는 방법만이 존재합니다.


익명의 파이프는 부모와 자식 프로세스만이 파일 디스크립터를 공유하므로

다른 프로세스는 파이프를 사용하여 통신이 불가능 합니다.




반면 Named PIPE(네임드 파이프) 의 경우 다른 프로세스도,

지정한 이름으로 파일 디스크립터를 열수 있기 때문에,

부모 자식 프로세스 간이 아니더라도 사용할수 가 있는 것이죠.

출처:
 
http://akj61300.blog.me/80133137262 

'Language > C' 카테고리의 다른 글

getopt()와 optarg, optopt  (0) 2011.11.02
시리얼 통신 - 자료 수신을 위한 poll  (0) 2011.09.16
IPC - 리눅스 Named PIPE 사용법 (FIFO)  (0) 2011.09.16
named pipe / FIFO  (0) 2011.09.15
01. 링킹의 기본 이해  (0) 2011.09.08
: