프로그래밍[Univ]/기타

[시스템프로그래밍] IPC. Shared Memory and Message Queueing

Cloud Travel 2012. 11. 19. 17:56

* Shared Memory

 - IPC가 메모리를 공유하여 읽고 쓰는 과정으로 이뤄진다.

 - IPC 기법중에서 가장 빠른 속도를 가진다.

 - 공유되는 메모리에 대한 접근 제어 및 동기화 기법이 필요하다.

  > 같은 메모리에 동시에 프로세스가 접근하여 작업하면, 원하지 않는 결과가 도출 될 수 있다.

  > 접근 제어 및 동기화를 위해서 세마포어를 사용한다.

 - malloc으로 동적할당을 하듯이 움직인다.

 ※ malloc : malloc을 선언할 때 Id값을 받고, 이 공간에 대한 사용이 시작될 때 메모리가 할당된다. 

                요청한 공간에 대해 사용이 없다면 메모리 할당은 이뤄지지 않는다.

 - int shmget(key_t key, int size, int flag)

  > 공유하는 메모리 공간을 요청하는 것으로 메모리에 할당되는 id 값이 반환된다.

 - void shmat(int shmid, void *addr, int flag)

  > 공유하는 메모리 공간을 할당 받는다. 이 명령어가 실행되야 실질적으로 메모리공간에 할당이 된다.

 - void shmdt(void *addr)

  > 공유된 메모리를 해제하는 명령어

 - int shmctl(int shmid, int cmd, struct shmid_ds *buf)

  > 세마포어를 사용하여 메모리에 접속하는 프로세스를 제어하는 역할을 한다.


* Message Queue

 - Linked list를 이용한 IPC 기법

 - 상대방의 PC에 만들어진 message queue에 메세지를 작성하여 연결 시키면, 

   상대방이 message queue를 확인하여 읽어 들인다. (메일과 같은 방식)

 - 같은 컴퓨터 내부에서의 message queue는 마치 FIFO와 같이 이뤄진다.

 - 다른 컴퓨터와 통신하는 것이라면, network 시간이 길게 잡혀 매우 느린 속도를 보이게 된다.