POSIX(Portable Operating Sysetm Interface) : IEEE가 제정한 UNIX-like OS 인터페이스 표준.
시스템 콜, 라이브러리 등의 API spec을 정의 해놓음. 이 API들로 커널과 상호작용한다.
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가 그걸 가져가서 쓰게 된다.
shm_open 함수는 name에 해당하는 오브젝트가 없는 경우 새 shared memory 오브젝트를 생성해서 file descriptor 값을 리턴해준다.
컨슈머는 'OS' 이름으로 생성된 shared memory 오브젝트로 접근 해서 file descriptor를 읽어온 뒤, 가상 메모리에 포인터로 받아 놓고 접근해서 \0이 나올 때 까지 문자를 읽는다. 즉, 프로듀서가 생성한 메세지를 consume 하게 된다.
잘 나온다. 메모리 해제 후 다시 호출하면 버스 에러가 난다.