리눅스의 메모리 메니지먼트...?

kkojiband의 이미지

세그멘테이션 없이 가상 메모리만 사용하는거같은데 맞나요?

gdb 로 확인해보니 cs, ds, es 등의 세그멘트 레지스터들에 정체를 알수없는 두 자리 숫자들이 들어있더군요...35, 43, 43 등...

이에 대해 자세히 아시는 분 도와주세요~

anfl의 이미지

세그먼트 셀렉트( ex. cs, ds, ss...)를 완전히 사용하지 않는것은 아닙니다.
그리고 리눅스가 세그먼트 기법을 사용하지 않는것도 아닙니다.
세그먼트는 사용하되 세그먼트 셀렉트에 의해 세그먼트를 사용(?)합니다. ^^?
뭔말인고 하니 32bit address mode로 넘어 오면서 세그먼트 레지스트는 세그먼트를 직접 지정하는 레지스트가 아니라 세그먼트 디스크립터를 지정하는 레지스트로 바뀌었습니다. 그래서 이름도 세그먼트 레지스트가 아니라 세그먼트 셀렉트입니다.

16bit 시절만 하더라도 cs 레지스트는 code segment를 바로 지정 할수가 있었습니다.
그러나 32bit로 넘어 오면서 cs 레지스트리의 값은 메모리상에 존제하는 segment 디스크립터의 index를 가지게 되었습니다.

그래서 gdtr(Global Descriptor Table Register)에서 지정하는 address 값에 (segment selecter의 index *8(size))을 더하여 메모리 상에 존제한 세그먼트 디스크립터를 구한후에 디스크립터에 있는 base address를 기준으로 세그멘테이션을 구현합니다.

그러나 base address가 0x0이고 limit가 0xffff(4G)이기 때문에 전체를 linear address를 하나의 segment로 보게 되는거지요.

세그먼트 셀렉트의 값이 디버깅시 0이였다면 분명 다른 문제가 있을겁니다.
index 0는 null entry로서 세그먼트 디스크립트의 모든 값이 0으로 설정되어 있어 실제로는 사용할수 없는 index입니다.

보통 세그먼트 셀렉터는 세그먼트 디스크립터에 대한 엑세스 속도를 높이기 위해 nonprogrammable register를 가지고 있는데 이것의 역활은 세그먼트 셀렉터의 값이 변경되었을때 위에 설명한 방식으로 세그먼트 디스크립트를 찾으면 세그먼트 디스크립터를 저장하게 되어 있습니다. (자동으로)

만약 중간에 세그먼트 셀렉터의 값이 0으로 변경되었다면 분명 nonprogrammable register의 값도 모든 bit가 0으로 변경되어 오류가 나게 되어있습니다.
그러므로 세그먼트 셀렉트의 값이 0이 될수는 없습니다.

ps. 답을 달고보니 질문 내용이 변경되어 버렸네요.
처음에 세그먼트 셀렉트가 0이 들어있었다는 내용에 대한 질문의 답으로 그대로 올립니다.


댓글 달기

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