[완료] 프로세스의 메모리 요청에 관한 질문입니다.

poohmong의 이미지

메모리 관련 부분을 공부하면서

프로세스에서 mm_struct를 관리하고 mm_struct에서 vm_area_struct를 유지 함으로써

프로세스가 사용하는 페이지에 대해서 리스트 형식으로 관리를 한다고 알고 있고

/proc 를 통해서 어떤 메모리 영역을 사용하는지도 알수 있다는걸 알았습니다.

헌데..

프로세스가 동작할때 필요한 부분만 물리적 메모리에 올려놓고 사용한다고 알고 있는데

이때 메모리 요청이 어디서 일어나는지 알수 있을까요?

이론적으론 swap in out을 통해서 물리메모리에 필요한 부분을 올려놓고 사용한다고 하는데

책에선.. 어떤식으로 요청이 생기는지에 대해선 설명이 없어서

이렇게 질문드립니다.

eungkyu의 이미지

예전 커널 소스를 공부할 때 그 부분을 살펴봤습니다만...

대강만 말씀드리자면, 커널에서 page table entry를 lookup하는 부분을 찾아보면 연결 고리를 찾을 수 있습니다. 잘 쫓아들어가다보면 swap의 존재를 알 수 있게 됩니다. page table entry 표시된 곳이 메모리에 올라와 있으면 바로 가서 얻어오게 됩니다. 그렇지 않을 때, 파일이 mapping된 곳이라면 연결된 address_space 구조를 따라가서 파일이 저장된 디스크에서 읽어오게 됩니다. 그런데 아무 mapping이 없는 메모리 영역일 경우 swap에서 읽어옵니다. 이 때 swap의 경우 연결된 address_space의 operation이 파일시스템이 아니고 swap 영역이 됩니다.

이 부분을 시작으로 해서 잘 찾아보면 swap에 넣는 부분도 찾으실 수 있으실 것입니다.

(지금 완전 가물가물한 기억으로 말씀드리고 있기 때문에, 심지어 저 address_space 구조 이름이 다른 것일 수도 있습니다.)

너무 수박 겉핥기식으로 가르쳐드려서 안하니만 못한게 아닌가 하는 생각도 듭니다만, 저도 생각이 나질 않습니다... =_=

리눅스 커널 분석하실 때는 lxr이나 vim + cscope를 이용하시면 편리합니다.:)

eungkyu의 이미지

리눅스 커널을 공부하신다면 아시고 계시겠지만...

참고로, 리눅스 커널의 address_space는 흔히 말하는 process address space와는 다른 개념을 설명하는 구조체입니다. 처음 볼 때 헷갈려서...

댓글 달기

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