shared memory 관련 궁금 사항입니다.

swunk의 이미지

두개의 프로세스간에 자료구조를 공유하는 프로그램을 코딩 중입니다.
서버와 클라이언트는 message queue를
써서 코맨드를 주고 받고, 클라이언트로 부터 수신된 코맨드가 서버가 생성한 자료구조를 검색하자!! 라는 코맨드에 해당하면 서버쪽에서 기 생성한 자료구조를 shared memory 로 복사해서 클라이언트가 그 자료구조를 참조하게 하려 합니다.

자료구조 내용을 간단히 말씀 드리면
구조체 배열을 생성하고 배열 하나의 엘리먼트에는 포인터가 있고, 포인터가 가르치는 엘리먼트에는 또다른 포인터를 가지고 있고, 해쉬 테이블하고 비슷한 구조 입니다.

여튼...

이런 상황에서 질문이 있습니다.

위에서도 말씀 드렸다시피 클라이언트 쪽에서 자료구조 검색 요청 메시지가 오면 해당 자료구조를 shared memory로 복사를 해야합니다.
자료구조의 배열은 memcpy로 잘 복사가 되고 클라이언트 쪽에서도 손쉽게 참조를 합니다.
문제는 포인터로 연결되어 있는 내용들인데, 포인터로 연결되어 있는 내용들은 서버의 heap에 계속해서 남아 있더군요... 그래서 해당 내용들을 클라이언트 쪽에서 참조 할 수 가 없습니다.

shared memory 영역의 메모리를 할당할 수 있는 방법이 없을까요 ?

질문을 간단하게 정리하면,
프로세스 주소공간의 heap 영역이 아닌 두 프로세서 간의 공유메모리에 사용자가 임의로 동적 메모리를 할당할 수 있는 방법이 있는 지 궁금합니다.
없다면 어떻게 위의 문제를 풀어가야 할까요?

답변 부탁드립니다.

sunyzero의 이미지

제대로 이해한지는 모르겠으나, 공유메모리 영역에서 포인터 정보를 쓸 수 있느냐는 것으로 이해하겠습니다.

만일 위에 대답이라면 불가능합니다. 메모리 주소란것은 프로세스 단위의 가상 주소입니다. 따라서 이런 경우에는 포인터 대신에 인덱스를 사용합니다.

인덱스를 이용해서 (몇번째 데이터 인덱스 * 데이터크기) 로 계산해서 찾아내는 구조를 사용합니다. 이렇게 하면 공유메모리도 크기를 키우거나 줄이거나를 가능합니다.

위의 방식으로 linked list 를 구현하는 숙제도 내준 적이 있는데, 잘들 하더군요.

========================================
* The truth will set you free.

익명 사용자의 이미지

sunyzero wrote:
제대로 이해한지는 모르겠으나, 공유메모리 영역에서 포인터 정보를 쓸 수 있느냐는 것으로 이해하겠습니다.

만일 위에 대답이라면 불가능합니다. 메모리 주소란것은 프로세스 단위의 가상 주소입니다. 따라서 이런 경우에는 포인터 대신에 인덱스를 사용합니다.

머리 굴려서 해 보니 불가능 하지는 않네요...좀 코드가 지저분해 지기는 하지만...

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.