SMALL
IPC(Inter-Process Communication)이란 영어 번역 그대로 프로세스간 통신을 말한다.
동일한 바이너리를 실행해도 전혀 다른 메모리를 사용하면서 서로 침범할 수 없다.
하지만 프로세스끼리 통신을 하기 위해서 여러가지 방법이 존재한다.
그 중 이번에 알아볼 내용은 메모리의 공유를 이용한 방법이다.
FILE MAPPING을 이용하여서 메모리를 공유를 할 것이다. 그럼 FILE_MAPPING이란 무엇인가?
FILE MAPPING이란 파일을 메모리에 연결하여 메모리에 입출력을 하면, 디스크와 직접 연결되어 있어
디스크에도 입출력이 이루어지는 기능을 말한다. [참고1]이를 잘 나타낸 그림이 MS에 나와 있어 가져왔다.
즉 하나의 메모리 조각을 같이 공유 함으로써, 데이터를 공유 할 수 있는 것이다.
해당 내용을 확인 할 수있는 코드이다.
#include "windows.h" #include "stdio.h" int main() { HANDLE hShared_Mem = NULL; char* pData = NULL; // 공유 메모리 Addr 저장 변수 int num = 0; //switch 선택 //공유 메모리가 존재하는지 확인 hShared_Mem = OpenFileMapping(FILE_MAP_ALL_ACCESS, NULL, "richong_Shared_Mem"); //존재 할 경우 루틴 if (hShared_Mem != NULL){ printf_s("Find_Shared Mem\n"); } //존재 하지 않을 경우 공유 메모리를 생성 else { printf_s("not existing Shared Mem\n"); printf_s("Creating Shared Mem\n"); hShared_Mem = CreateFileMapping(INVALID_HANDLE_VALUE , NULL , PAGE_READWRITE , 0 , 1024 , "richong_Shared_Mem"); if (hShared_Mem != NULL){ printf_s("Shared Mem Create Success\n"); } else{ printf_s("Fail to create Shared Mem,Exit\n"); return 0; } } //공유 메모리의 주소 얻어 옴 pData = (char*)MapViewOfFile(hShared_Mem, FILE_MAP_ALL_ACCESS, 0, 0, 1024); do { printf_s("Select 1.store , 2.laod 3. Delete \n "); scanf_s("%d", &num); fflush(stdin); switch (num) { case 1: printf_s("Input store string :"); char tmp_Input_string[1024]; scanf_s("%s", tmp_Input_string); strcpy_s(pData,1024,tmp_Input_string); break; case 2: printf_s("Load Shared Data :"); printf_s("%s\n", pData); system("pause"); system("cls"); break; case 3: if (pData != NULL) UnmapViewOfFile(pData); if (hShared_Mem != NULL) CloseHandle(hShared_Mem); return 0; break; default: printf_s("Select only 1, 2 plz.\n"); break; } } while (1); }
ㅅ
P1이 공유 메모리에 "12345"데이터를 기록하고
P2는 공유 메모리에 있는 데이터를 가져온다.
[참고1]http://egloos.zum.com/anster/v/2156072
LIST
'학부_대학원 > 운영체제' 카테고리의 다른 글
Interrupt 인터럽트 (0) | 2016.10.22 |
---|---|
캐시[Cache]란? (0) | 2016.08.10 |
동기화 vs 비동기화 (0) | 2016.08.10 |
System Bus[버스란?] (0) | 2016.08.08 |
캐시 쓰기 정책 (0) | 2016.08.04 |