shared memory 관련 질문입니다

kkb의 이미지

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의 약자로 압니다.
생성하려는데 존재할 때 에러를 내는 flag들 이름에 널리 쓰입니다.

ds 는 의미를 잘 모르겠는데 data structure 가 아닐까요?;;

공유메모리의 id값은 그 프로세스 내에서만 유효합니다.
다른 프로세스가 같은 공유 메모리를 참조하려고 할 때 공유메모리의 id를 어떻게 전달하죠?;; 이런걸 뭔가 공유할 데이터를 전달하기 위해서 공유메모리를 사용하죠.
key 값은 정의하면 됩니다. 같은 메모리를 참조할 프로세스내에 그냥 정의해놔도 되고 어떤 파일에 적어놔도 되고 방법은 여러가지입니다.

kkb의 이미지

아 네 답변감사합니다

그러면 애초에 프로그램을 작성할 때 프로세스마다 key을 동일하게 정의해놓고 시작해야 하는 거군요

그래서 저도 처음에 key 값은 서로 어떻게 알지? 하고 궁금했습니다
일단 키 값을 다른 IPC의 방법을 이용해서 전달하고 시작해야 하나? 하고 생각해서 좀 불편하다고 생각했습니다
초보라서 개념이 안잡혀있어서 그랬던 거 같습니다

이제는 이해가 되었구요

그래서 다른 프로세스 간에는 key 값을 이용하고
부모 프로세스 간에는 key 값이 없어도 ID로 공유할 수 있다는 것도

이제야 다 이해가 가네요

명확한 답변 다시 한번 감사드립니다

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.