페이징의 실제 구현과 작동?

syia의 이미지

페이징을 이론적으로 아무리 공부해도 해결되지 않은 몇가지 의문이 있어 질문으로 올려봅니다 ^.^;

1. 페이징은 적어도 두단계 이상의 연산(page directory 에서 table주소 get, table주소에서 page block의 첫 주소 get) 이 필요한데 이는 모두다 하드웨어로 이루어 지는가? 하드웨어에서 이루어 진다면 파이프라이닝의 fetch decode 등의 과정중에 이루어지는가?

2. 페이징에 필요한 최소의 정보는 page directory 1개 와 page table들이다.. 그러다면 page table들은 프로세스에서 필요한만큼만 만들고 더 필요하거나 할때 추가적으로 생성하는가? (미리 다 만들어두려면 4M가 필요)

3. 보통 리눅스나 윈도우에서는 프로세스마다 4G의 독립된 가상주소공간을 가진다. 그렇다면 프로세스마다 별도의 page directory와 page table들을 가지는가? 그렇다면 이것은 어디에 저장되는가?

이상 3가지 입니다.

여러문서나 참고서적을 뒤져바도 저정도로 자세히는 안나와있더군요;

kldp의 고수님들이라면 알고계실듯해서 ^.^ 부탁드립니다.

Fe.head의 이미지

1번은 소프트웨어적으로 구현하더군요.

2번은 커널이 필요에 따라서 만들수 있게 설계 하면 됩니다.

3번은. 기억이 안나는군요.

-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

syia의 이미지

음.. 예를들어 유저 프로세스의 뭔가가 실행중이라 하면
이건 local address로 되어있을텐데,

그 프로세스가 cpu를 사용중에 어떻게 physical address로 번역이 될까요?
해당 프로세스에 번역기능이 달린것도 아니고, 매번 메모리 참조때마다 소프트웨어적으로 번역이 되는건가요?

Necromancer의 이미지

1번은..
메모리 주소 계산시 페이징에 따른 주소변환은 하드웨어에서 모두 처리해 줍니다.
(이거 안해준다면 성능 데미지 엄청나죠. 그렇게 간단한 작업이 아니니)
다만 이 페이지를 관리하는 방식은 운영체제에서 구현을 해 줘야 합니다.

miss 된 페이지(프로세스는 사용하고 있으나 실제 물리 메모리에는 없는
페이지 접근시)를 처리하는 경우나 메모리 할당 해제시 사용 메모리 영역에
따른 주소 변환 등이 해당되죠.

2번은.. 당연히 최소로 만듭니다. 아마 x86에서는 page directory가 4k고
page table 1개가 4k 정도 크기를 가질겁니다. 물론 page directory를 다 꽉
채우지 않아도 상관없습니다. 다만든다면 데미지가 크죠.

3번의 경우는 각 프로세스별로 가상메모리와 물리메모리 대응을 다르게
해 주면 됩니다. 공유메모리같은 특정 영역을 제외한 나머지에 대해서
물리메모리를 전혀 다르게 대응시켜주면 프로세스간에 메모리 침범안하게
할 수 있죠.

Written By the Black Knight of Destruction

Written By the Black Knight of Destruction

댓글 달기

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