공유라이브러리는 RAM 상에서 하나만 올라가는게 맞나요?

trymp의 이미지


linux 2.6 (32bit) 에서 /lib/libc-2.5.so 나 /lib/libpthread-2.5.so 같은 것들은

여러프로세스가 공유하는 것인데, 실제로 물리적 RAM 상에서는 하나만 존재하는게 맞나요?

프로세스마다 가상주소로는 여러개인데 물리적 메모리에서는 저런 공유메모리가 시스템 메모리상에서

하나만 존재하는 것인가요?

자꾸 햇갈려서 질문 드립니다.

조언 주시면 감사하겠습니다.

익명 사용자의 이미지

기본적으로 최신 윈도우즈나 리눅스 커널 모두 Copy On Write 방식을 사용합니다.

라이브러리 영역도 분명히 코드 섹션에 강제로 쓰기 권한을 주면 쓰기가 가능한 영역이기 때문에
한 프로세스에서 이 영역을 수정한다고 해서 다른 프로세스에 있는 라이브러리 영역까지 수정되버리면 안될 것입니다.

따라서 리눅스 라이브러리, 윈도우즈의 dll 등의 동적 바이너리들은 모두 최초에 한 번
올려진 메모리(물리 메모리)가 있다면 추후 새 프로세스 생성 시에 로딩되어야 할 때는 단순히
이미 올려진 영역을 그대로 매핑만 해주는 식으로 구현이 되어 있습니다.

말하자면 아래와 같습니다.

A 프로세스 가상주소 0x40000000 -> 물리메모리 0x90000000
B 프로세스 가상주소 0x50000000 -> 물리메모리 0x90000000 (재배치가 되었다고 가정)

이렇게 같은 메모리를 가리키게 되어 있습니다

이 때 만약 한 프로세스가 이 영역을 수정한다면, 수정하는 즉시 복사가 일어나게 됩니다.
이는 리눅스에서 fork 를 구현할 때도 마찬가지로 적용되는 사항입니다.

보통은 수정하는 일이 없다시피 하기 때문에 이런 라이브러리들은 한 번 로딩되면 복사가 거의 일어나지 않습니다.

trymp의 이미지

.

익명 사용자의 이미지

저도 그 부분이 항상 궁금했었는데 의문점이 풀렸습니다. 감사합니다.

댓글 달기

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