[분산시스템] IPC
본 자료는 7페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
해당 자료는 7페이지 까지만 미리보기를 제공합니다.
7페이지 이후부터 다운로드 후 확인할 수 있습니다.

목차

1. Pipe

2. Message queue

3. Signal

4. Shared memory

5. Socket

본문내용

1. Pipe
파이프(Pipe)는 한 프로세스의 표준 출력(Standard output)을 다른 프로세스의 표준 입력(Standard input)으로 연결하는 방법이다. 파이프는 IPC툴 중 가장 오래된 것으로 유닉스 운영체제의 초기 단계부터 사용되어 왔다. 파이프는 프로세스간의 단방향(반이중,half-duplex) 통신의 한 방법을 제공한다. 프로세스는 write 시스템 호출을 이용하여 자료를 파이프로 보낼 수 있고, 다른 프로세스가 read 시스템 호출을 이용하여 이 자료를 받을 수 있다.
1) 파이프를 이용할 때 사용되는 함수
int pipe(int filedes[2]);
한 프로그램에서 파이프는 pipe 시스템 호출을 이용하여 만들어진다. 시스템 호출이 성공적으로 수행되면, 두 개의 파일 기술자를 복귀한다. 그 중 하나는 파이프에 쓰기 위한 것이고, 다른 하나는 파이프로부터 읽기 위한 것이다. filedes[0]은 파이프로부터 읽기용으로 개방되고, filedes[1]은 파이프에 쓰기용으로 개방된다.
2) Code and Result
파이프를 이용해 자식 프로세스가 부모 프로세스에 메세지를 전달하는 프로그램
>> Code : pipe2.c
#include
#include
#include
#include
int main()
{
int data_processed;
int file_pipes[2];
const char some_data[] = "Lee Ho Yong";
char buffer[BUFSIZ + 1];
int fork_result;
memset(buffer, '\0', sizeof(buffer));
if (pipe(file_pipes) == 0) {
fork_result = fork();
if (fork_result == -1) {
fprintf(stderr, "Fork failure");
exit(EXIT_FAILURE);
}
if (fork_result == 0) {
/* This is the child process */
data_processed = read(file_pipes[0], buffer, BUFSIZ);
printf("Read %d bytes: %s\n", data_processed, buffer);
exit(EXIT_SUCCESS);
} else {
/* This is the parent process */
data_processed = write(file_pipes[1], some_data,
strlen(some_data));
printf("Wrote %d bytes\n", data_processed);
}
}
exit(EXIT_SUCCESS);
2. Message queue
메시지 큐는 커널의 주소 매겨진 공간(kernel's addressing space)안의 내부 연결 목록 (Internal linked list)이라는 말로 가장 잘 묘사될 수 있다. 메시지들은 차례대로 큐로 보내지고 여러 가지 다른 방법으로 큐로부터 조회된다.
메시지란 본질적으로 문자나 바이트의 열이다. 메시지는 프로세스간에 메시지 큐를 통해 전달되며, 메시지 큐는 msgget 프리미티브에 의해 생성되고 접근된다. 일단 큐가 만들어지면, 적당한 큐 허가를 가진 프로세스가 msgsnd를 사용하여 메시지를 큐에 넣을 수 있다. 다른 프로세스는 msgrcv에 의해 이 메시지를 읽을 수 있으며, 이때 메시지는 큐로부터 제거된다.
1) 메시지 큐 함수
int msgget(key_t key, int permflags);
메시지 큐를 생성하고 접근
int msgsnd(int mqid, const void *message, size_t size, int flags);
msgget으로부터 얻은 값이 가리키는 큐에 메시지를 추가
int msgrcv(int mqid, void *message, size_t size, long msg_type, int flags);

키워드

  • 가격2,000
  • 페이지수20페이지
  • 등록일2009.03.18
  • 저작시기2008.5
  • 파일형식워드(doc)
  • 자료번호#523859
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니