[운영체제] 프로세스 구조 - (5)
IPC 기법 중 파이프, 메시지큐, 공유메모리 기법을 알아보자.
IPC
Pipe
- 기본 파이프는 단방향 통신
- fork()로 자식 프로세스를 생성했을 때, 부모와 자식간의 통신
파이프 코드 예제
char* msg = "Hello Child Process!";
int main()
{
char buf[255];
int fd[2], pid, nbytes;
if (pip(fd) < 0) // pipe(fd)로 파이프 생성
exit(1);
pid = fork(); // 함수 실행 다음 코드부터 부모/자식 프로세스로 나뉨
if (pid > 0) { // 부모 프로세스는 pid에 실제 프로세스 ID가 들어감
wrtie(fd[1], msg, MSGSIZE); //fd[1]
exit(0);
}
else { // 자식 프로세스는 pid가 0이 들어감
nbytes = read(fd[0], buf, MSGSIZE); // fd[0]으로 읽음
exit(0);
}
return 0;
}
- pid: process ID
- 부모 프로세스는 정수형 ID
- 자식 프로세스는 ID가 0
- fork(): 새로운 프로세스를 생성하는 시스템콜 함수
- 부모 프로세스를 복사해 자식 프로세스를 생성
- pipe(fd): 파이프가 정상적으로 생성되면 특정한 주소값을 2개 반환
- fd(1)과 fd(0)
- msg: 데이터
- MSGSIZE: 데이터 크기
Message Queue
- 큐는 기본적으로 FIFO 로직으로 데이터를 전송
메시지큐 코드 예
- A 프로세스
msqid = msgget(key, msglfg)
msgsnd(msqid, &sbuf, buf_length, IPC_NOWWAIT)
- B 프로세스
msqid = msgget(key, msgflg)
msgrcv(msqid, &rbuf, MSGSZ, 1, 0)
- A 프로세스에서 B 프로세스로 데이터 전달
- sbuf => rbuf
파이프와 메시지 큐의 차이
- 메시지 큐는 부모/자식 관계가 아니라, 어느 프로세스간에 데이터 통신 가능
- FIFO 로직으로 먼저 들어간 데이터가 먼저 읽힌다.
- 단방향 소통이냐 양방향 소통이냐
- 메시지큐에서 양방향 소통시 큐를 하나 더 생성
파이프와 메시지 큐의 공통점
- 파이프와 메시지큐는 모두 커널 공간의 메모리를 사용
- 메모리 공간도 커널과 유저로 구분
Shared Memory
- kernel space에 메모리 공간을 만들고, 해당 공간을 변수처럼 사용
- 메시지 큐처럼 FIFO 로직이 아니라, 해당 메모리 주소를 변수처럼 접근하는 방식
- 공유 메모리 key를 가지고, 여러 프로세스가 접근 가능
공유 메모리 코드 예제
- 공유 메모리 생성 및 공유 메모리 주소 얻기
- shmid: 특별한 키 값을 가지고 공유 메모리 공간을 만듬
- shmaddr: 메모리 공간에 대한 주소를 가지고 옴
shmid = shmget((key_t)1234, SIZE, IPC_CREAT | 0666))
shmaddr = shmat(shmid, (void *)0, 0)
- 공유 메모리에 쓰기
- 해당 주소 값에 데이터를 쓰기
strcpy((char *)shmaddr, "Linux Programming")
- 공유 메모리에서 읽기
printf("%s\n", (char *)shmaddr)
정리
- 파이프, 메시지큐,공유메모리 모두 커널 공간을 활용해 프로세스간 데이터를 공유함
Author And Source
이 문제에 관하여([운영체제] 프로세스 구조 - (5)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@zero_mountain/운영체제-프로세스-구조-5
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Author And Source
이 문제에 관하여([운영체제] 프로세스 구조 - (5)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@zero_mountain/운영체제-프로세스-구조-5저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)