CATEGORY

분류 전체보기 (73)
세상사는이야기 (27)
회사이야기 (7)
친구들이야기 (6)
공부이야기 (33)
개인적인이야기 (0)

RECENT ARTICLE

RECENT COMMENT

ARCHIVE

LINK



  1. 2008.06.09
    IPC(interProcessCommunication)의 이해(2)
  2. 2008.06.09
    IPC(interProcessCommunication)의 이해(1)
  3. 2008.04.02
    IPC란?
IPC(Inter Process Communicaiton) 이해 (2)


IPC란 무엇인가?

정의:
IPC는 프로그램들간의 데이터를 공유하고 동기화하기 위해 사용되는 방법을 뜻한다. 이때 프로그램은 보통 프로세스를 의미한다. IPC를 할 수 있게 해주는 일반적인 도구는 세마포어, 공유메모리( Shared memory), 내부 메시지큐등이 있다. 이런 방법이 갖는 이점은 디스크를 통한 파일공유와 관련IO를 통한 공유하는 방법의 오버헤드를 줄일 수 있다는 것이다.

IPC를 쓰는 이유

Use IPCs when you need to talk between programs, you want the talking to be 프로그램들간에 데이터를 빠르게 공유하고 싶을 때, 혹은 전하고 싶을 때, 또한 프로세스간의 통신의 복잡한 하부구조를 알지 않아도 되는 경우 등이다. IPC는 커널이 세부적인 통신을 맡아서 해주기 때문이다. 예룰 들어 당신의 프로세스가 세마포어에 의해 보호되는 자원을 기다리고 있다고 한다면 커널은 당신의 프로세스를 대기행렬( Waiting gueue )에 넣어 버린다. 그리고 자원을 쓸 수 있는 순간이 되면 커널은 프로세스에게 자원을 할당하게 된다. 또한 커널은 이런 오퍼레이션이 원자적(atomic)일 것을 확인한다. 이것은 데이터의 무결성을 위해 세마포어를 세팅하는 오퍼레이션은 어떠한 경우에도 방해 받지 않는다는 것이다.

 IPC calls의 유사성과 차이점

IPC 통신 루틴상의 모든 자원은 비슷한 방법과 매우 유사한 함수 콜을 이용한다.
   기능    메세지큐    세마포어    공유메모리
   1.IPC할당방법    msgget    semget    shmget
   2.IPC제어방법    msgctl    semctl    shmctl
     (상태변경,해제)
   3.IPC작동방법    msgsnd    semop    shmat
     (send/receive)    msgrcv        shmdt

IPC루틴은 다루는 데이터의 양에 따라 다르다.
- 세마포어는 long integer이며 단일숫자를 나타낸다.
- 메시지큐는 4096문자를 가질 수 있다.
- 공유메모리 세그먼트는 256MB이다.

현재 활동중인 상태를 보는 방법

다음 두개의 명령어를 활용할 수 있다.

Ipcs: 세마포어와 메시지큐, 공유메모리의 상태를 볼수 있다.
ipcs -m ( shared memory )
ipcs -q ( message gueues )
ipcs -s ( semaphore )

Ipcrm: 세마포어, 메세지큐,공유메모리부분을 시스템에서 제거한다. Ipcrm 명령은 shmctl,semctl,msgctl system call의 front end명령(사용자가 직접 부르는)으로서 적절한 실행관한과 옵션을 사용하면 자원을 D(deletion)상태로 마크하게 된다. 그러나, 자원을 사용하고 있는 모든 프로세스가 detach를 해야만 완전히 ipcs를 통해 보면 사라지게 된다.

Fields common to each of the IPC types
Ipcs명령의 결과에서 보면 일부는 공통적으로 사용된다. 다음부분이 그러하다.
  T Type= m (shared memory), s (semaphore) or q (message queues)
  ID This is the identifier for the entry similar to a file descriptor. It is used by the operations function calls to access the resource after a get is performed on it.
  KEY Similar to a file name, this is what the routine uses to get, or open, the resource. When you get this name, the return value is the ID. If the key is 0x00000000 (IPC_PRIVATE), this entry can only be used by related, parent/child processes.
  MODE Permissions and status. The meaning of the field is different for each of the IPC types.


The first two characters can be one of these: RSCD
  R and S These are for the message queues and indicate a process is waiting on a message send or receive call.
  D Indicates the shared memory segment has been deleted but will not disappear until the last process attached to it releases it.(NOTE: The key will be changed to ipc_private, that is, all zeros (0) when the segment has been marked for removal but still has attached processes.)
  C This shared memory segment will be cleared when the first process attaches to it.Flag not set. The next nine characters are permission bits with r indicating read access for this position; w indicating either write or alter access, depending upon the IPC facility it is attached to. No permissions for this operation.


IPCs need permissions for owner, group and other.
  OWNER The login name of the owner
  GROUP The name of the group that owns the entry
  CREATOR The login name of the creator of the entry
  CGROUP The group of the creator of the entry
  CTIME The time when the associated entry was created or changed


Headings that are special to message queues
  CBYTES The current total byte count of all messages in the queue
  QNUM The number of messages currently in the queue
  QBYTES The maximum number of bytes allowed for all messages in the queue
  LSPID The ID of the last process that sent a message to the queue
  LRPIC The ID of the last process that received a message in the queue
  STIME The time the last message was sent to the queue
  RTIME The time the last message was received, or read, from the queue


Headings that are special to semaphores
  NSEMS The number of semaphores in the set for this entry
  OTIME The time the last operations was done for this semaphore entry


Headings that are special to shared memory
  NATTCH The current number of processes attached to this segment
  SEGSZ The size of the segment in bytes
  CPID The process ID of the creator of the segment
  LPID The process ID of the last process to either attach or detach from this segment
  ATIME The time of the last attach to the segment
  DTIME The time of the last detach from the segment

And
IPC(InterProcessCommunication)의 이해 (1)

IPC는 프로그램들간의 데이터를 공유하고 동기화하기 위해 사용되는 방법을 뜻한다. 이때 프로그램은 보통 프로세스를 의미한다. IPC를 할 수 있게 해주는 일반적인 도구는 세마포어, 공유메모리( Shared memory), 메시지큐등이 있다. 이런 방법이 갖는 이점은 디스크를 통한 파일공유와 관련IO를 통해 공유하는 오버헤드를 줄일 수 있다는 것이다.

Semaphore

세마포어는 공유 할 수 없는 자원을 액세스하는 것을 제어하는 특화된 데이터 구조체이다. 자원을 놓고 협력하거나 혹은 경쟁하는 프로세스는 그 자원이 사용 가능한가에 대한 결정을 세마포어를 통해서 하게 된다. 자원이 사용 가능하지 않다면 기본적으로 운영체제는 요청한 프로세스를 관련한 큐에 대기 시킨다. 그리고 자원이 사용 가능한 상태가 되면 그 프로세스에게 알려주고 실행시키게 된다. 이것은 자원의 사용가능성에 대한 처리를 간편하게 해주는 역할을 하게 된다. 실생활에서 예를 든다면 교차되는 선로에서 반대 방향으로 진행하는 열차를 대기 시키는 신호등과 같은 역할을 하게 된다. 대부분 세마포어는 프로세스 동기화나 lock을 위해 사용된다. 보통 세마포어는 이진수(Binary)이거나 Counting으로 이루어졋다. 한 binary세마포어는 한 자원을 제어한다. 가령 0이면 자원이 사용 중이라는 뜻이고, 1이면 사용 가능하다는 뜻이 된다

Message queues

메시지큐는 프로세스간에 크지 않은 양의 데이터를 구조화된 방식으로 넘겨주는데 사용된다. 전달되는 정보는 미리 지정된 메시지 구조체를 통하게 된다. 메시지를 발생시키는 프로세스는 사용자 정의의 형을 명시하고 메시지를 시스템이 유지시키는 메시지 큐에 위치 시킨다. 그 메시지 큐를 액세스하는 프로세스는 FIFO(선입선출)방식으로 특정 타입의 메시지를 선택적으로 읽기 위해 메시지 타입을 이용하게 된다. 메시지큐는 프로그램에게 여러 프로그램으로부터 오는 데이터를 멀티플렉싱을 할.수 있도록 해준다.

Shared memory

공유메모리는 다중프로세스들이 가상메모리를 공유할 수 있도록 해준다. 이 방법은 메모리 공유를 위한 가장 빠른 수단이긴 하지만 가장 간편한 수단은 아니다. 일반적으로 한 프로세스는 공유메모리 세그먼트를 생성하고 할당하게 된다. 생성시점에서 사이즈와 사용허가권에 대한 설정이 된다. 그리고 프로세스는 세그먼트를 어태치(attach)하고 연다. 이것이 현재의 데이터 영역으로 맵핑을 발생시킨다. 또한 필요하다면 세그먼트를 초기화한다. 이렇게 발생된 공유영역은 다른 프로세스가 허가권이 설정되어 있다면 접근할 수 있게 되고 그 영역을 자신의 데이터 영역으로 맵핑을 하고 쓰게 된다. 보통은 세마포어가 공유영역에 대한 접근을 제어하는데 이용된다. 하나의 프로세스가 작업을 끝내게 되면 공유영역을 지우는 것이 아니라 detach하게 된다. 그리고 자신의 소유권을 다른 프로세스에게 이양하게 된다. 그리고 공유영역을 쓰던 모든 프로세스가 죽게 되었을 때 일반적으로 영역을 생성시킨 프로세스가 제거에 대한 책임을 지게 된다. 데이터는 공유 영역을 통해 전달이 되는데 이것이 가장 빠른 IPC방법이다. 그러나 현재 64bit가 아닌 32bit 컴퓨팅에서 발생되는 대용량 데이터 ( 256MB ) 처리하기 위해서는 새로운 옵션으로 프로그램을 컴파일 할 것을 요구한다.

Memory mapping 에 대한 이해

응용프로그램의 명령이 수행되는 속도는 보통 프로그램addressable 메모리 영역밖을 얼마나 많이 접근하느냐에 달려있다고 해도 과언이 아니다. 즉 많을수록 속도는 늦어 질 수 밖에 없다. 이런 메모리 외부영역을 접근하는 트랜잭션 오버헤드를 줄이기 위해 OS는 두가지 방식을 제시하고 있다. 하나는 파일을 프로세스 메모리영역에 맵핑하는 것이 있다. 흔히 파일 메모리맵핑기법으로 불리기도 한다. 두번째는 협력하는 프로세스간에 사용하는 공유영역을 둠으로서 오버헤드를 줄일 수 있다 메모리팹핑화일은 프로세스로 하여금 직접적으로 데이터를 접근할 수 있는 메커니즘을 제공한다. 이것은 파일을 열고 읽으면서 데이터를 자신의 데이터 버퍼로 복사하는 작업을 없애 줌으로서 상당한 I/O이동을 줄여준다. 한 파일을 맵핑하는 프로세스가 하나 이상 일 때는 공유를 하게 된다. Mapped memory영역 ( 또한 shared memory 영역으로도 불리는)은 프로세스간에 데이터를 교환하는 대규모 풀(pool)을 제공한 것이다. 그러나 락킹이나 접근제어에 대한 부분은 signal이나 semaphore를 사용하여 설정하여야 한다. 이렇게 하여야 한 프로세스가 사용중인 데이터를 변경하는 것과 같은 접근 충돌을 막을 수 있다. 공유메모리 영역은 메시지로 보내기에는 큰 공용데이터베이스의 데이터를 여러 프로세스가 공유하는 경우에 특히 유용하다. 맵핑은 파일을 읽고 쓰는데에 따르는 오버헤드를 줄일 수 있다고 했다. 파일의 내용이 유저영역으로 올라오게 되면 (맵핑) 다른 프로세스들은 마치 메모리에 올라 온 것처럼 시스템콜(I/O)를 사용하지 않고 포인터를 이용해 직접 접근하게 되는 것이다. 또한 디스크에 있는 파일은 마치 paging 영역처럼 활용됨으로써 페이징 공간을 줄일 수있다. 프로그램은 어떠한 정규파일에 대해서도 맵핑을 할 수 있다. 이런 특징은 실행코드를 가지는 오브젝트코드에도 적용 가능하다. 이렇게 하면 일반 파일보다 좀더 빠르게 액세스 할 수 있게 되기 때문에 실행파일을 좀더 빨리 load할 수 있다. 보다 자세한 사항은 shmat서브루틴을 참고 한다.
And
 ipc : inter process communication
프로세스간 통신 방법...

- 메시지
사용자 정의 메시지로 정보 교환
장점 단순하다..
단점 미리정의해야한다.. 8바이트까지만 전송한다.

그래서.. WM_CopyData가 있다.. 이것은 핸들과 구조체의 포인터를 넣어서 전송한다.
포인터이기때문에 구조체나 배열도 보낼 수 있다.
장점 편리하다.
단점 효율이 좋지 못하다는...

- 아톰
기초적인 ipc통신 방법으로 시스템이 유지하는 문자열 테이블에 문자열을 보관해 놓으다는...
최대 255까지만.

- 메일슬롯
최대 64k까지
그러나 단방향

- 파이프
주로 연속적인 바이트 스트림을 전송할때 사용한다.
이름 있나 없나 두개
없음 단반향이고 로컬전용이다
이름 있다
있음 엔티에서만 사용가능하다.
이름때문에 핸들이 필요없다

[출처] IPC란?|작성자 kimks81

And