멀티 페이지 테이블 (OS) 질문.

pelomon2의 이미지

OS 멀티페이지 테이블(계층구조) 공부하다가 아리송한게 있어 질문드립니다.

싱글페이지테이블에서는
페이지 크기에서 페이지의 변위(오프셋)을 구하고, 그에맞게 페이지 테이블을 구했는데요

예를들어 16비트 시스템에, 4KB 짜리 페이지 라고하면
4KB의 범위는 2^12가 되니까..
오프셋(변위)은 12비트고.. 16비트중 남은 비트는 4비트만 남으므로..
싱글페이지테이블이 가질 수 있는 엔트리 개수는 2^4 = 16개 엔트리가 생긴다고 봤습니다.
그래서 기존까지는 남은비트를 가지고 테이블을 만든뒤 그걸 기반으로 물리주소를 찾아가는구나.. 이렇게생각했는데요..

멀티페이지에서는 오프셋을 제외한 나머지 영역들을 디렉토리영역/페이지테이블영역으로 나눠서가지더라구요..
그중에서 페이지테이블영역의 엔트리개수를 구할때, "각 페이지 테이블의 사이즈는 페이지의 사이즈에 맞춰야한다" 라는 설명이있던데..
이말이 이해가 안됩니다.

왜 맞춰야되는걸까요?
페이지테이블이 페이지의 사이즈를 넘기거나 더 적으면 안되는건가요?

jachin의 이미지

페이지 테이블이 적으면 나머지 오프셋을 어드레싱 하기 위한 공간이 없어서, (MMIO나 PAE 같은) 다른 방법으로 어드레싱을 해야 해서 더 느려지고(고작 페이지 접근하는데...), 기존 주소공간보다 공간이 더 넓으면 (보통은 2^n 사이즈로 맞추는데) 별도의 "페이지테이블영역" 어드레싱을 위한 비트수가 늘어납니다. 3 bit 로 8개의 엔트리를 선택할 수 있는데, 4bit 를 할당해놓고 선택하면 항상 1bit 가 놀게 됩니다. 물론 확장을 위해 Reserved 영역으로 남겨둘 수 있겠지만, OS 에서 확장할 때에는 다른 방식의 드라이버 로딩이나 정책을 변경하는 것만으로도 충분히 가능할 겁니다.

답변감사합니다.의 이미지

답글을 엉뚱한데 달았나봅니다.
수정이안되어 여기에 다시 달아봅니다

답변감사합니다의 이미지

답변감사드립니다.

어떤기준보다 많을때 문제, 적을때 문제는 이해가 갑니다만...
그런데 왜 그 기준이 페이지 사이즈인지가 궁금합니다. (뭔가 기본적인 계산문제거 인것같은데.. 이해가 안되네요..:( )

제가 본설명에의하면

설명을보면
4GB (32비트) 에 4KB (각 엔트리별 크기는 4byte로 가정)
페이지사이즈 4KB = 2^12,
** 각 페이지테이블의 사이즈는 각 페이지의 크기와 딱맞아야한다 **
> 한 페이지테이블의 사이즈 (2^x * 4byte) = 페이지사이즈 > ( 4KB) 이므로
x = 10 이됩니다. -> 한 페이지테이블당 2^10개의 엔트리를 가진다는 뜻..

지금까지 제가생각한 의식의흐름은...

4GB(32비트) / 4KB (페이지사이즈) = 1MB

32비트 가상메모리공간에, 각 페이지로 꽉찼다고할경우
4KB짜리 페이지 토막이 1MB개 있게되는건데,

페이지테이블의 엔트리 하나당 한개의 토막에 대한 물리주소를 찾아준다고 가정한다면..
총 1MB개의 엔트리가필요할겁니다.

1MB는 2^10이므로 총 2^10개의 엔트리가 필요하다..
모든 가상메모리공간에 꽉찼다는 가정하에 나올 수 있는 케이스니..
이걸가지고 페이지디렉토리/페이지엔트리부분을 나눠줘야하는게 아닐까..? 라는 생각이 들었습니다.
그럼 위의 설명에서 본 계산은 지금제가 한계산을 보수적으로 잡은것인가? 각 하나의 페이지당 최악의 케이스를 모두 커버하라는 의미인가..? 요런생각도 들구요..

어떤 개념적인 오류와 계산적인 오류를 범했을까요..?

답변감사합니다의 이미지

1MB = 2^20입니다.
그럼 2^20을 또 나눠줘야할텐데, 무슨기준으로 나눠줘야하는가?로 빠지네요

jachin의 이미지

OS 영역은 하드웨어와 밀접하게 관련되어 있고, 대부분 메모리, 멀티 프로세싱, 스레드와 관련하여, Cache Hierarchy 내용과 관련이 깊습니다. 현대 CPU 구조와 캐쉬 메모리 버스를 이용하여 어떻게 멀티 프로세싱을 처리하고 있는지 알게 되시면 쉽게 이해하실 수 있으실 것 같습니다.

https://en.wikipedia.org/wiki/Cache_hierarchy
https://en.wikipedia.org/wiki/CPU_cache
https://en.wikipedia.org/wiki/Kaby_Lake

pelomon2의 이미지

감사합니다! 다시공부해보겠습니다 :)

bushi의 이미지

entry 한 개로 커버되는 virtual address 범위는 고정입니다. (entry 의 bit field 중 address 부분이 몇 bit 인가.)
따라서, 그 virtual address 범위에 대해 기술할 child table 에 들어갈 entry 갯수도 고정이 될 수 밖에 없습니다.
그러므로, 어떤 테이블의 entry 갯수와 크기 모두 고정이니 테이블 자체의 크기도 고정값으로 계산 될 수 밖에 없습니다.

댓글 달기

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