Shared Memory

mjdevv·2023년 12월 21일
0

운영체제

목록 보기
3/12

POSIX

  • POSIX(Portable Operating Sysetm Interface) : IEEE가 제정한 UNIX-like OS 인터페이스 표준.

  • 시스템 콜, 라이브러리 등의 API spec을 정의 해놓음. 이 API들로 커널과 상호작용한다.


Posix Shared Memory

  • 프로세스와 별도로 존재하는 버퍼 메모리를 통해 Inter-Process Communication(IPC)가 이루어진다.
  • memory-mapped file을 사용

memory-mapped file :

mmap function

void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);

file descriptor를 통해 프로세스가 파일과 직접적으로 접근 가능하게 해준다. mmap의 리턴값은 void 타입 포인터이고, 각 프로세스의 virtual memory 상에서의 주소값을 의미한다. 해당 주소값들을 file descriptor를 통해 OS가 physical memory 주소를 매핑 해주게 된다.


예제

예제는 Producer-Consumer 구조로 구성. Producer가 shared memory 영역에 메세지를 올려 놓으면 consumer가 그걸 가져가서 쓰게 된다.

  1. shard memory Producer

shm_open 함수는 name에 해당하는 오브젝트가 없는 경우 새 shared memory 오브젝트를 생성해서 file descriptor 값을 리턴해준다.

  1. shared memory consumer

컨슈머는 'OS' 이름으로 생성된 shared memory 오브젝트로 접근 해서 file descriptor를 읽어온 뒤, 가상 메모리에 포인터로 받아 놓고 접근해서 \0이 나올 때 까지 문자를 읽는다. 즉, 프로듀서가 생성한 메세지를 consume 하게 된다.

  1. 결과

잘 나온다. 메모리 해제 후 다시 호출하면 버스 에러가 난다.

profile
방구석 언어기술자

0개의 댓글

관련 채용 정보