이 영역을 누르면 첫 페이지로 이동
Arc 블로그의 첫 페이지로 이동

Arc

페이지 맨 위로 올라가기

Arc

[Unix Programming] IPC 기본 개념

  • 2021.12.03 21:11
  • Computer Science/OS
글 작성자: SeoArc

IPC 기법에는 여러가지의 종류가 있는데 우선 다음의 기법에 대해 알아보도록 하자.

- message passing

- shared memory

- pipe

 

 

우선 위 기법에 대해 알아보기 전, facility key와 get 연산에 대해 먼저 알아야 한다.

 

IPC에는 facility key라는 것이 있는데 이것은 IPC 객체를 유일하게 식별하기 위해 사용되는 수이다.

소켓 통신을 할 때 IP와 Port 번호로 소켓을 유일하게 식별하는 것처럼, IPC 통신에서는 facility key를 사용하여 객체를 식별하는 것이다.

 

facility key 값을 integer 형식의 숫자로 부여해도 되지만 숫자는 중복될 가능성이 높기 때문에 이 위험을 방지하기 위해 ftok이라는 함수를 쓴다.

ftok은 파일 이름을 키로 변환해 주는 함수로 형태는 다음과 같다.

#include <sys/ipc.h>
key_t ftok(const char *path, int id);

먼저 위 함수의 원리를 살펴보자.

 

file에는 file의 meta정보를 가지고 있는 inode라는 구조체가 있는데, 이 inode number의 값이 한 file system마다 unique 하다. 위 ftok 함수는 inode number 값에 해당 device의 minor number와 사용자가 부여한 id 값을 조합하여 key값을 만들어준다.

 

완벽하게 unique 한 값은 아니지만 어느정도 값을 unique하게 가져올 수 있다.

-> file이름과 id값이 같으면 같은 key 값이 나온다.

 

 

다음은 IPC의 get 연산에 대해 알아보자.

 

get 연산은 IPC 객체를 생성할 때, 기존 IPC 객체에 접근할 때 필요한 연산이다. (이는 create나 open과 유사하다)

또, get 연산은 IPC facility identifier를 return 하는데, 이는 fd와 유사하지만 unique한 값이다.

 

각 기법에 따라 각각 msgget, semget, shmget 함수가 있다.

 

이 외에 다른 IPC 연산은, 제어 연산인 msgctl, semctl, shmctl와 message passing에서의 msgsnd, msgrcv가 있다.

 

 

IPC 객체가 생성될 때 Status data 구조체가 하나씩 만들어지며, 이는 각 IPC facility마다 하나씩 존재한다.

이  <sys/ipc.h> 시스템 헤더 파일에 의해 정의되는 ipc_perm 구조는 다음의 멤버들을 포함한다.

uid_t cuid;	/* IPC 객체를 만든 사용자 id */
gid_t cgid;	/* 만든 그룹 id */
uid_t uid;	/* 소유자 id */
gid_t gid;	/* 소유그룹 id */
mode_t umode;	/* 읽기/쓰기 권한 */

다음엔 IPC 기법 중 하나인 Message Passing에 대해 알아보도록 할 예정이다.

'Computer Science > OS' 카테고리의 다른 글

[Unix Programming] ipcs & ipcrm  (0) 2021.12.13
[Unix Programming] Shared Memory  (0) 2021.12.13
[Unix Programming] Semaphore  (0) 2021.12.04
[Unix Programming] Message Passing  (0) 2021.12.04
[Unix Programming] Record Locking  (0) 2021.12.02

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Unix Programming] Shared Memory

    [Unix Programming] Shared Memory

    2021.12.13
  • [Unix Programming] Semaphore

    [Unix Programming] Semaphore

    2021.12.04
  • [Unix Programming] Message Passing

    [Unix Programming] Message Passing

    2021.12.04
  • [Unix Programming] Record Locking

    [Unix Programming] Record Locking

    2021.12.02
다른 글 더 둘러보기

정보

Arc 블로그의 첫 페이지로 이동

Arc

  • Arc의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (106)
    • Language (28)
      • C++ (0)
      • C# (0)
      • Java (28)
    • Algorithm (47)
      • Algorithm (15)
      • Data Structure (6)
      • PS (26)
    • Computer Science (22)
      • Design Pattern (1)
      • Network (14)
      • OS (7)
    • Game (0)
      • Unity (0)
    • Backend (3)
      • Spring (1)
      • JPA (2)
    • DB (0)
      • SQL (0)
    • DevOps (2)
      • AWS (0)
      • Docker (2)
      • Jenkins (0)
      • Nginx (0)
    • Software Engineering (4)
      • OOP (4)
    • AI (0)
      • Machine Learning (0)
    • Others (0)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • graph
  • 네트워크
  • 그래프
  • network
  • java
  • 자바
  • algorithm
  • 알고리즘

나의 외부 링크

정보

SeoArc의 Arc

Arc

SeoArc

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © SeoArc. Designed by Fraccino.

티스토리툴바