Inter-Process Communication

2020. 1. 25. 00:06· Computer Science/운영체제
목차
  1. 개념
  2. pipe
  3. 파이프의 종류
  4. Socket

Inter-Process Communication

개념

프로세스는 시스템으로부터 자원을 할당받는 하나의 독립된 개체이다.

본래 프로세스는 할당된 자원(메모리) 범주 내의 정보만 접근할 수 있으며, 이를 벗어나는 경우 Segmentation Fault 등의 오류가 발생한다.

이는 커널이 프로세스의 안정성을 위해 다른 프로세스로 접근하는 것을 막기 때문이다.

pipe

  • 통신을 위한 메모리 공간(버퍼)을 생성하여 프로세스가 데이터를 주고받는 기법
  • 각 프로세스가 Read only, Write only 모드로만 동작한다.
  • 통신이 필요할 때마다 파이프를 생성해야 하기 때문에 자원의 낭비가 심하다.
    • 100개의 프로세스가 2개의 파이프로 서로 통신하면 100P2 = 9900개의 파이프가 생성된다.
  • pipe 관련 system call로는 popen, pclose, pipe가 있다.
    • FILE popen(const char* command, const char* mode);
      • pipe를 생성한다. command는 쉘 명령, mode는 r, w이다.
      • 내부적으로 fork()한 뒤 command 명령을 exec()로 실행하여 자식 프로세스가 수행하게 한다.
    • int pclose(FILE* stream);
      • 인자로 지정한 pipe를 닫는다.
      • waitpid 함수를 수행하며 자식 프로세스가 종료되기를 기다렸다가 return한다.
      • return값은 자식 프로세스의 종료 상태이다. 실패 시 -1이다.
    • int pipe(int fields[2]);
      • popen으로 pipe를 쉽게 생성할 수 있지만 쉘을 실행해야 하므로 비효율적이고 주고받는 데이터도 제한적이다.
      • pipe는 과정이 다소 복잡하지만 더 효율적으로 pipe를 생성한다.
      • fields[0]은 읽기 전용, fields[1]은 쓰기 전용으로 연다.
      • 생성에 성공하면 0, 실패하면 -1을 반환한다.

파이프의 종류

  1. Anonymous Pipe

    • 따로 지칭하지 않아도 서로를 분간할 수 있는 경우에 사용된다.
      • 부모 프로세스가 fork로 자식 프로세스를 생성하면 파일 지정 번호로 통신할 수 있다.
  2. Named Pipe

    • 익명 파이프가 부모-자식 프로세스 간 통신만 가능하다는 단점을 보완한다.
    • 외부 프로세스와 통신하기 위해 나온 개념으로, pipe에 이름을 붙여준 것이다.
      • 각 pipe에 이름과 권한을 부여하여 생성한다.
    • 이름 있는 pipe는 특수 파일의 한 종류로 FIFO라고 한다.
      • mknod : FIFO, 특수 파일을 생성한다.
      • mkfifo : FIFO 파일만 생성한다.

Socket

  • 네트워크 상에서 서버-클라이언트 사이의 통신 방법이다.
  • 소켓 API라 불리는 프로그래밍 요청 혹은 function call로 만들어진다.
저작자표시 비영리 (새창열림)

'Computer Science > 운영체제' 카테고리의 다른 글

메모리 할당  (0) 2020.01.25
메모리 관리  (0) 2020.01.25
교착상태  (0) 2020.01.25
프로세스 동기화  (0) 2020.01.25
프로세스 스케줄링  (0) 2020.01.25
  1. 개념
  2. pipe
  3. 파이프의 종류
  4. Socket
'Computer Science/운영체제' 카테고리의 다른 글
  • 메모리 관리
  • 교착상태
  • 프로세스 동기화
  • 프로세스 스케줄링
감동이중요해
감동이중요해
https://github.com/dhmin5693 dhmin5693@naver.com
감동이중요해
티끌모아 산을 쌓아보자
감동이중요해
전체
오늘
어제
  • 분류 전체보기 (111)
    • 알고리즘 (35)
    • Infra & Dev tools (10)
      • Git (2)
      • Cloud platform (5)
      • Mac, Linux (3)
    • BigData (1)
    • IT 도서 (11)
      • Clean Code (8)
    • Java (36)
      • Spring framework (19)
      • JPA (5)
      • Domain Driven Design (3)
    • Database (2)
      • oracle (1)
      • mysql (0)
    • Computer Science (7)
      • 운영체제 (7)
    • 기타 (9)
      • 크롤링(파이썬) (1)
      • 회고 (4)
      • Career (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

  • About me

인기 글

태그

  • 메모리
  • Stream
  • 블라인드공채
  • 프로세스
  • Linux
  • JPA
  • Mac
  • Spring
  • 영속
  • 알고리즘
  • 회고
  • Database
  • bean
  • Java
  • 영속상태
  • AWS
  • 운영체제
  • DDD
  • Clean Code
  • 우아한테크캠프2기

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
감동이중요해
Inter-Process Communication
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.