리눅스에서의 아키텍처별 메모리 관리 방법에 관해 궁금한 것이 있습니다.

lmk378의 이미지

x86용 리눅스 메모리 관련 코드를 살펴보면 아키텍처의 특성에 맞도록4단계 페이징을 소스상 구현한 것을 알 수 있습니다.
헌데 arm계열의 경우 4단계 페이징을 사용하지 않음에도 불구하고 x86과 동일한 구조로 소스가 짜여저 있더군요.
예를들면 x86에는 pte pud pmd pte로 가상메모리를 나누어 물리주소로 변환하는 구조인데
이 구조는 실제 x86의 mmu가 하는 방식과 동일한 구조입니다.
헌데 이와 다른 메커니즘으로작동하는 arm의 mmu도 리눅스 소스에서는 x86과 동일한 방식으로 작성되어 있더군요.
generic한 코드를 유지하기 위해 실제 하드웨어의 작동방식이 다소 틀리더라도 맞도록 억지로 코드를 구성한 것인가요?

lmk378의 이미지

흠..답변이 아직 없네요. 아시는분 없으신가요?

rgbi3307의 이미지

저도 요즘 리눅스 커널의 가상메모리 관리 부분을 공부하고 있어서 답글 달아 봅니다.

위에서 언급하신 것처럼 가상메모리주소를 실제 물리메모리주소로의 매핑은
보통 MMU(메모리 주소 관리 하드웨어 회로, 메모리 주소 디코더)를 통해서 이루어 집니다.
MMU는 하드웨어 장치이기 때문에 x86용 MMU, ARM용 MMU가 각각 장착되어 있어서
각각의 아키텍쳐별 가상메모리주소를 물리메모리주소로 연결해 줍니다.

그런데 항상 (가상메모리주소 >= 실제 물리메모리주소)의 조건 이므로
실제 물리메모리주소에서는 page fault 현상이 발생합니다.
그래서 물리메모리주소에서 가장 오래동안 사용하지 않았던 페이지를
하드디스크에 스와핑하고 이곳에 지금 사용하려고 하는 가상메모리 주소의
내용을 올리고 하는 종류의 다양한 메모리관리 알고리즘을 사용하게 되는데,
이 알고리즘은 x86, ARM, MIPS 등의 아키텍쳐에 상관없이 동일할듯 합니다.
그래서 리눅스에서 동일한 코드를 사용하는듯...

From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))

lmk378의 이미지

답변 감사드립니다.
제가 글솜씨가 없어서 혼란스럽게 적어논것 같습니다.^^;
제가 궁금했던점은 다른 arch가 동일한 소스코드를 사용하는 이유보다는
어떻게 다른 arch에서 동일한 코드로 구현이 가능한가 입니다.
MMU의 동작방식과는 전혀 무관한 부분입니까?

lmk378의 이미지

한참 지난 글이지만 여차여차해서 이해한 정도로 자답을 달아봅니다.(답이 아닐수도 있습니다.)
mmu의 물리주소 변환은 알.아.서. 합니다. 레지스터 세팅만 해주면 알아서 합니다. 신경쓸 필요가 없습니다.
즉 소프트웨어가 할 일은 위의 "레지스터 세팅" 부분인데 이것을 어떻게 효율적으로 관리할지가 바로
커널이 할 일입니다. 때문에 굳이 arm, x86을 구분하여 구성할 필요가 없는 것입니다.(라고 이해합니다.)
잘못된 부분이 있다면 태클 환영합니다.

댓글 달기

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