커널에서 메모리 할당에 대해서 아시는 분??

sisbn의 이미지

커널 책을 보다가 이런 의문이 들었는데요 안나와있네요..

버디 알고리즘을 사용한다고 했을때 모든 동적할당이 가능한 페이지 프레임들은 그 알고리즘에 의해서 관리가 될텐데,

그렇다면 나중에 페이지 fault가 발생했을때 4K의 페이지 프레임을 할당할때 버디에게 요청한다음에 붙여주는건가요?

나중에 불연속적인 물리메모리 공간을 연속적인 가상공간에
맵핑시켜줄때에도 결국은 버디로부터 받아와서 하는건가요?

한수 부탁드립니다..

익명 사용자의 이미지

페이지 폴트같은 경우는 폴트가 난 위치가 커널 영역이냐 유저 영역이냐에 따라 처리 과정이 다릅니다. 커널 영역에서 폴트가 난 경우는 pid 0 프로세스의 pgd 를 확인해서 실제 그 영역이 사용중이라면 현재 프로세스의 pgd 에도 같은 값으로 설정을 해줍니다. 이렇게 해주는 이유는, 커널 영역(0xc0000000~)은 모든 프로세스가 공유해야하는데 프로세스가 바뀔때마다 가상 공간 전체가 바뀌므로 하나의 기준점을(pid 0 process) 잡아서 사용합니다.
유저 영역이라면 현재 프로세스의 vm_area_struct 를 확인해서 사용가능한 영역이면 버디로 1개짜리 페이지 프레임을 할당받아서 사용가능하게 해줍니다. 물론 스와핑이 붙으므로 실제 동작 과정은 더 복잡합니다.

간단히, 버디는 실제 물리 메모리를 4k 페이지 단위로 나눈 페이지 프레임을 관리하는 알고리즘입니다. 이 알고리즘의 목표는 페이지 단위의 단편화를 제거하고, 보다 큰 물리적으로 연속적인 페이지 프레임을 유지하는 것입니다.

그리고 연속적이냐, 불연속적이냐는 물리적으로 연속적이냐, 불연속적이냐라는 의미입니다.

이게 무슨 말인가하면, 예를 들어, 가상 주소 공간 0xd0000000 ~ 0xd0004000 의 공간을 버디로 1개짜리 페이지 프레임 4개를 할당받아서 이어붙인다면, 이건 가상적으로는 연속이지만, 물리적으로는 비연속적인 공간입니다. 하지만 버디로 4 개짜리 페이지 프레임을 할당받으면 이건 물리적으로도 연속이 됩니다. 이게 필요한 경우는 실제 cpu 를 타고 나가는 주소의 경우는 pgd 나 pte entry 주소를 제외한 모든 주소가 mmu 를 거치므로 상관이 없지만, dma 같은 경우, 즉 다른 디바이스에서 메모리가 접근이 되는 경우는 물리적으로 연속적이지 않으면 문제가 됩니다.

kkojiband의 이미지

헉...질문의 요지를 잘못 파악해서 주저리주저리 쓸데없는 얘기를 많이 했네요...-_-;

로그인을 안 해서 글도 안 지워지고...

커널에서 페이지 프레임을 관리하는건 오직 버디뿐입니다. 폴트가 났던, 불연속 공간에 메모리를 할당받던지간에 실제 페이지 프레임이 필요한 경우는 버디가 할당해줍니다.

이제 졸업이다...사랑하는 SKKULUG 후배들아 안녕~

댓글 달기

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