Analog to Digital Converter CH 9. 공유메모리 Analog to Digital Converter
공유메모리(shared memory)는 서로 독립된 프로세서들 간의 동일한 논리적 메모리를 access하는 방법 Processor A에 대한 논리주소 물리적 메모리 Processor B에 대한 논리주소
/* Shared memory control operation. */ extern int shmctl (int __shmid, int __cmd, struct shmid_ds *__buf) __THROW; /* Get shared memory segment. */ extern int shmget (key_t __key, size_t __size, int __shmflg) __THROW; /* Attach shared memory segment. */ extern void *shmat (int __shmid, __const void *__shmaddr, int __shmflg) __THROW; /* Detach shared memory segment. */ extern int shmdt (__const void *__shmaddr) __THROW; __END_DECLS #endif /* sys/shm.h */ /* Get shared memory segment. */ extern int shmget (key_t __key, size_t __size, int __shmflg) __THROW; 공유메모리 만들기 함수 key_t __key : 공유메모리 key size_t __size : 메모리 크기 int __shmflg : 파일을 만들때 필요한 모드 플레그 /* Attach shared memory segment. */ extern void *shmat (int __shmid, __const void *__shmaddr, int __shmflg) __THROW; 프로세스의 주소 공간에 공유메모리 연결함수 int __shmid : 공유메모리 식별자 __const void *__shmaddr : 공유메모리가 현재 프로세스와 연결할 주소 int __shmflg : 상태 플레그(읽기전용, 소유자 권한 등)
/* Detach shared memory segment. */ extern int shmdt (__const void *__shmaddr) __THROW; 공유메모리를 현재 프로세스로부터 분리하는 함수 (성공 0 반환, 실패하면 -1 반환) /* Shared memory control operation. */ extern int shmctl (int __shmid, int __cmd, struct shmid_ds *__buf) __THROW; 공유메모리 제어 함수 (int __shmid : shmget이 반환한 식별자 int __cmd : IPC_STAT : 공유메모리와 연관된 값을반영 IPC_SET : 권한 세트 IPC_RMID : 공유메모리 세그먼트 삭제 struct shmid_ds *__buf : structure shm_ds{ uid_t shm_perm.uid; uid_t shm_perm.gid; mode_t shm_perm.mod; }
공유 메모리 헤더파일 작성 /************************************* * shm_com.h * led. key, lcd, adc **************************************/ #define TEXT_SZ 2048 struct shared_use_led{ //led processor의 공유메모리 int written_by_led; char led_text[30]; // char some_text[TEXT_SZ]; }; struct shared_use_ked{ //key processor의 공유메모리 int written_by_key; char key_text[30]; struct shared_use_lcd { //lcd processor의 공유메모리 int written_by_lcd; char lcd_text[30]; struct shared_use_adc { //adc processor의 공유메모리 int written_by_adc; char adc_text[30];