shared memory 관련 질문입니다
shared memory 관련 질문입니다
공유메모리에서
int shmget(key_t key, int size, int shmflg);
shmget() 함수의 shmflg 인자가
IPC_CREAT일 때는 같은 key 값을 사용하는 공유메모리가 존재하면 그 공유메모리의 ID를 리턴하고
같은 key 값을 사용하는 공유메모리가 존재하지 않으면 새로 공유 메모리를 생성해서 ID를 리턴하는 것으로 알고 있는데
그렇다면 IPC_CREAT은 공유메모리를 새로 생성할 때 사용하면 될 거 같고
IPC_EXCL( | IPC_CREAT)일 때는 같은 key 값을 사용하는 공유메모리가 존재하면 -1을 리턴한다는데
같은 key 값을 사용하는 공유메모리가 존재하지 않으면 어떻게 되는지 모르겠습니다
마찬가지로 새로 공유 메모리를 생성해서 ID를 리턴하나요?
이 둘의 차이가 무엇이고 (단지 리턴값의 차이밖에 없나요?)
IPC_EXCL은 어떨 때 사용하는 것인지 궁금합니다
-
그리고 공유메모리와 ID는 이해했는데
key 값은 무엇이고 어떻게 사용해야 하는 것인지 잘 모르겠는데
이 key 값을 (공유메모리를 함께 사용할) 다른 프로세스에게 넘겨주어서
그 프로세스에서도 ID를 알고 공유메모리에 접근할 수 있도록 하는 것인가요?
근데 꼭 key 값을 넘겨주어야 하나요?
ID를 넘겨주고 다른 프로세스가 그 ID를 통해 접근하면 안되나요?
그리고 그러면 그 key 값은 보통 어떤 방법으로 다른 프로세스에게 넘겨주나요?
-
마지막으로 쓸데없는 질문들이지만,
IPC_EXCL에서 EXCL은 무엇의 약자인가요?
이해하는데 조금이나마 도움이 될 거 같아서요
그리고 공유메모리의 정보를 담는 구조체인 struct shmid_ds에서
shmid_ds의 ds는 무엇의 약자일까요?
EXCL = exclusive의
EXCL = exclusive의 약자로 압니다.
생성하려는데 존재할 때 에러를 내는 flag들 이름에 널리 쓰입니다.
ds 는 의미를 잘 모르겠는데 data structure 가 아닐까요?;;
공유메모리의 id값은 그 프로세스 내에서만 유효합니다.
다른 프로세스가 같은 공유 메모리를 참조하려고 할 때 공유메모리의 id를 어떻게 전달하죠?;; 이런걸 뭔가 공유할 데이터를 전달하기 위해서 공유메모리를 사용하죠.
key 값은 정의하면 됩니다. 같은 메모리를 참조할 프로세스내에 그냥 정의해놔도 되고 어떤 파일에 적어놔도 되고 방법은 여러가지입니다.
답변 감사합니다
아 네 답변감사합니다
그러면 애초에 프로그램을 작성할 때 프로세스마다 key을 동일하게 정의해놓고 시작해야 하는 거군요
그래서 저도 처음에 key 값은 서로 어떻게 알지? 하고 궁금했습니다
일단 키 값을 다른 IPC의 방법을 이용해서 전달하고 시작해야 하나? 하고 생각해서 좀 불편하다고 생각했습니다
초보라서 개념이 안잡혀있어서 그랬던 거 같습니다
이제는 이해가 되었구요
그래서 다른 프로세스 간에는 key 값을 이용하고
부모 프로세스 간에는 key 값이 없어도 ID로 공유할 수 있다는 것도
이제야 다 이해가 가네요
명확한 답변 다시 한번 감사드립니다
댓글 달기