Windows NT의 Virtual Addressing 과 Flat memory model에 관하여...

superdma의 이미지

Windwos NT가 Logical(Virtual)Address에서 Physical Address를 얻는 과정에 대해서
제가 알고 있는 이론적 지식이 맞는지 궁금합니다.

먼저, Windows NT가 Virtual Addressing 구현을 위해 IA-32의 Segmentation unit 과 Paging unit의 레지스터와 제어장치등을 이용하는데,실제 Segmentation 과 Paging에 관련한 소스코드는 Windows NT에서 담당해야 하며, IA-32는 단지 MMU 를 제공함으로써 이를 가능케 한다는 사실이 맞는지 궁금합니다.

또 한가지는 아래에 있는 링크를 보시면, "인텔 프로세서를 채택한 운영체제는 하부구조로, 플랫 메모리 모델을 사용했습니다.예를 들어, NT, OS/2 및 Linux, 또는 X가 만든 운영체제 XX등 입니다." 라는 말이 있는데요.
Windows NT는 Virtual Addressing을 위해 Segmentation와 Paging을 하는데 왜 Flat memory model를 구현한다고 하는지 이해가 가지 않습니다.
http://kldp.org/node/39915#comment-134118

superdma의 이미지

Segmented Model은 Addressing위해 오직 Segment Selector 와 Offset으로만 각 Segment에 접근 하고 해당 Segment가 곧바로 Physical Memory에 Mapping 되는 것으로 알고 있고,

Flat Memory는 Linear Address가 Physical Address에 바로 Mapping 되는 Model로 알고 있습니다.

NT는 Logical(Virtual)Address가 Segmentation을 거치고 Linear Address가 나오고 Paging을 거쳐서 나온 Physidcal Address로 Physical Memory에 있는 Page에 접근 하는 것인데, 이게 Flat Memory model 인지 잘 이해가 되지 않네요.

grassman의 이미지

응용 프로그램에서 메모리가 어떻게 보이는가에 대한 문제입니다.

Kernel mode에서 세그먼트를 사용하건 말건 User mode에서 접근하는 메모리를
단일 세그먼트내에 매핑시키면 되는 겁니다. Kernel mode에서 가상 메모리를
구현한다고 해서 Flat memory model이 성립되지 않는다고 가정하면 현재 x86용
운영체제 중에서 Flat memory model을 사용하는 운영체제는 없습니다.

간단히 생각하시길...

chadr의 이미지

Flat Memory model하고 Virtual Addressing 구현을 위한 Segmentation와 Paging 방식은
서로 다른 문제입니다.

Flat Memory model은 CPU가 메모리에 접근 할 때 레지스터 크기의 단일 정수를 이용하여
물리 메모리 어느 영역을 접근 할 수 있도록 구성된 모델이라는 말이며 CPU와 관계가 있습니다.

그에 반해 MMU에서 사용하는 Segmentation와 Paging방식은 유저레벨의 어플리케이션에 Virtual Addressing 환경을 제공해주기 위해 어플리케이션이 보고 있는 가상의 메모리 주소를 물리 메모리 주소로 매핑해주는 것과 관련이 있습니다.

즉.. 두개는 전혀 별개의 문제입니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

superdma의 이미지

결국 Windows NT는 Virtual Address를 Physical Address로 변화하고, 그 변화 과정에서 쓰이는 과정이 Segmentation 과 Paging 이며,
변환된 Physical Address도 결국 Physical Memory에 저장되고, 이를 Register에 Fetch해 오고 이를 통해서 Physical Memory에 접근 하기 때문에 Flat Memory 방식이다 라는 말씀이시죠?

chadr의 이미지

그렇습니다. :)
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

댓글 달기

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