리눅스에서 세그멘테이션을 사용하나요..

jin55132의 이미지

커널에 대해 공부하는 중인데

책에 리눅스에서는 메모리 관리에 세그멘테이션 대신 페이징을 사용한다고 나와있더군요..

x86 cpu에서는 세그멘테이션을 통해서 논리주소가 선형주소로 바뀌고

페이징을 통해서 선형주소가 물리 주소로 맵핑되는걸로 알고 있는데요..

그럼 리눅스에서는 x86cpu의 세그멘테이션 기능(논리주소->선형주소)를 사용하지 않고

처음 부터 선형주소만 가지고 메모리 주소를 다루게 되나요?...

그리고 메모리에서 어떤 변수를 선언했을때 그 변수의 물리 주소를 알아내는 방법도 알고 싶습니다

pok의 이미지

x86 cpu에서는 세그멘테이션을 통해서 논리주소가 선형주소로 바뀌고
페이징을 통해서 선형주소가 물리 주소로 맵핑되는걸로 알고 있는데요..

맞는 말입니다만, 꼭 그렇게 해야하는것은 아니고 그렇게 할 수 있다는 겁니다.
아사겠지만 인텔에서는 16bit 레지스터로 20bit의 메모리 주소를 사용하기 위해 세그멘테이션이라는 기법을 사용하는데, 더큰 메모리 지원을 위해 나온 기법이 GDT 기법(Protected Mode)으로 세그멘테이션을 통해 논리주소를 선형주소로 바꾼다는 말이 바로 GDT 기법을 사용한다는 의미입니다. 당연히 리눅스도 GDT를 사용하며, gdt_table 등이 쓰이는곳이 이것을 지정하는 소스입니다.

GDT를 쓰고 페이징기법을 사용하지 않고 GDT테이블의 주소와 메모리 주소를 1:1로 쓸 수도 있지만, 이렇게 되면 프로그래밍을 할때 물리적인 메모리주소를 하나하나 지정해주어야 할 뿐만 아니라, 메모리 보호도 전혀 못하게 될것입니다. 따라서 모든 운영체제는 추상화된 메모리 관리를 지원하는데, 이것을 하드웨어상에서 지원되게 도와주는것이 페이징 기법입니다. 그러니까 도스의 PSP같은것을 하드웨어상에서 지원하는것을 말합니다.

결론은 리눅스도 x86에서 GDT나 페이징기법 모두를 사용합니다.

그리고 변수가 어떤 메모리에 있는지는 ddd나 valgrind 같은툴을 사용하면 되지 않을까요?

pastime의 이미지

리눅스에서도 물론 세그멘테이션을 사용합니다.
다만 모든 세그먼트가 동일한 세그먼트 어드레스를 사용하는 형태입니다.
(물론 각 세그먼트 별로 역할이나 권한 등에서 차이가 나긴 합니다..)

더 자세한 내용은 아래의 링크를 참조하세요..
http://www-128.ibm.com/developerworks/kr/library/l-memmod/index.html

댓글 달기

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