코가손의 블로그

[운영체제] 프로세스간 통신, PIPE 본문

운영체제

[운영체제] 프로세스간 통신, PIPE

Cogason 2021. 12. 26. 15:39

파이프(Pipe)는 두 프로세스간 통신할 수 있는 통로라고 생각하면 된다.

파이프는 기본적으로 단방향 통신이며 생산자(Producer)는 파이프의 종단에 쓰고 소비자(Consumer)는 다른 종단 에서 읽는다.

 

UNIX 시스템에서는 일반적으로 pipe(int fd[]) 함수를 사용하여 구축한다.

fd[0]은 읽기, fd[1]는 쓰기 종단으로 동작한다.

파이프를 생성한 후, read()와 write()시스템 콜을 사용하여 파이프에 접근할 수 있다.

일반적인 파이프는 파이프를 생성한 프로세스 이외에는 접근할 수 없기 때문에 부모 프로세스가 파이프를 생성하고

fork()를 통해 자식프로세스와 통신하는 방식으로 사용된다.

 

Windows시스템의 일반 파이프는 익명 파이프라고 불리며 UNIX의 일반 파이프와 유사하게 동작한다.

 

지명 파이프

일반 파이프는 프로세스들이 통신을 마치고 종료하면 없어지게 되고 부모-자식 관계여야만 하는 제약 조건들이 있다.

 

이와는 다르게 지명 파이프는 양방향 통신이 가능하며, 부모-자식 관계도 필요로 하지 않는다(동일한 기계 내에는 존재해야 한다). 일단 지명 파이프가 구축되면 여러 프로세스들이 이를 사용하여 통신할 수 있다.

 

UNIX에서 지명 파이프는 FIFO라고 불린다.

Windwos에서는 CreateNamePipe()함수로 생성할 수 있다.

Comments