다른 프로세스의 가상메모리 공간을 어떤 방식으로 참조하나요? (동적 라이브러리)

kasi의 이미지

한 프로세스(이하 P_A라고 하겠습니다. )가 동적 라이브러리(L_A라고 하겠습니다.)를 사용하는 도중에

다른 한 프로세스(P_B)가 같은 라이브러리를 사용하려고 합니다.

이미 L_A는 메모리에 올라와 있으므로 다시 로드하지 않고

P_A가 참조 하고 있는 메모리 공간을 참조하여서 사용할 것 같은데

어떤 방식으로 사용할 수 있게 되는지 궁금합니다.

도서와 인터넷을 검색해 본 결과 커널모드에서만 참조 가능하다고 나오고

어떤 방식으로 이루어 지는지는 설명이 없습니다.

아시는 분은 간략하게 나마 설명해주시면 감사하겠습니다!!

질문 정리.
1. 처음 L_A 라이브러리가 메모리에 올라와 있는 것을 어떻게 알수 있는가?
(모든 프로세스를 돌아가며 그 라이브러리의 inode가 열려 있는지 확인한다.?)

2. 다른 프로세스에서 그 라이브러리를 사용중이란 것을 파악했다면 다른 프로세스의 가상메모리 공간의 데이터를
어떻게 읽어 올수 있는가?

감사합니다...

headbang의 이미지

inode를 언급하셨으니 UNIX와 유사한 linux를 예를 들어 설명하겠습니다.
linux에서는 열려진 파일 마다 page cache를 가지고 있습니다.
(참고로 page cache는 기억에 의하면 radix tree로 구성되어 있으며 특정 page는
파일내 offset을 알면 찾을 수 있습니다.)

만약 P_A가 L_A의 특정 함수을 사용한다면 그 함수를 포함하는 page를 page cache에서 찾습니다--인수는 L_A 파일의 inode, page의 offset 이겠죠. 만약 page cache에 없으면 파일 입출력을 통해 page cache로 읽어들인 후 그 page를 자신의 가상 주소 공간에 매핑해서 쓰면 됩니다.

이미 충분한 답변은 되었으리라 봅니다만 질문에 대한 답변 형식으로 다시 정리해드리겠습니다.

1.
라이브러리 파일의 inode, 해당 page의 파일내 offset을 인수로 page cache를 뒤져서 해당 page가 메모리에 올라와 있는지 알 수 있습니다.

2.
다른 프로세스가 그 라이브러리를 사용 중인지 아닌지는 중요하지 않습니다. Page cache에 해당 page가 있는지가 중요하겠죠. 다만 page가 몇개의 프로세스--혹은 커널 루틴--에 의해 사용되는지 알기 위해서 page마다 참조 계수 (reference count)를 둡니다.

kasi의 이미지

답변 매우 감사드립니다.

페이지 캐쉬에 대해서 공부 해봐야겠습니다.

댓글 달기

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