세그먼테이션과 페이징에 대해...

kang0203의 이미지

세그먼테이션과 페이징에 대해 궁금한 점이 있어서 질문 드립니다.

둘다 하는 일이 무엇 인지 모르겠지만 혹시
하는 일은 같은데 방식이 달라서 리눅스에서는 둘 중 하나만 사용하나여?
그렇다면 왜 그런지 설명 부탁드립니다.

Necromancer의 이미지

세그먼테이션은 서로 다른 프로그램이 메모리를 겹쳐 쓰지 않도록 하는 데

사용되고 (특정 주소 영역에만 접근할 수 있도록 제한을 겁니다.)

페이징은 가상메모리 구현에 사용됩니다.

리눅스는 둘 다 씁니다.

Written By the Black Knight of Destruction

scobyseo의 이미지

머. 기본적으로 두가지가 하는 원래 하는 역할은 같죠..
단지 세그멘테이션은 메모리의 일정 부분을 나누어서 가상 주소를 계산하는데 사용하고,
페이징은 모든 작업을 페이지단위로 한다는 차이가 있죠.
i386계열 시피유에서는 이 두가지를 모두 지원하죠.
이 차이는 여러가지 기능적인 차이를 낳는데요,
일반적으로 페이징이 메모리 낭비를 줄일 수 있습니다.
그래도 권한 세팅하는 것은 세그멘테이션이 편하구요.
그래서 메모리 관리는 페이징 단위로 하고, 코드 세그먼트, 데이터 세그먼트 등으로
세그먼트를 나누어서 그걸로 사용 권한을 주는 방법으로 리눅스에서는 구현되어 있습니다.
세그멘테이션은 메모리 주소를 얻기 위한 방법으로는 사용되지 않는다..라고 볼수 있죠..

서명:
이것은 올리는 글에 첨부될 사인 문구입니다. 제한은 255 글자입니다

onyx의 이미지

kang0203 wrote:

둘다 하는 일이 무엇 인지 모르겠지만

둘다 가상 메모리 관리기법입니다. 제가 설명해 드리는것 보다
전공서적을 찾아보시는게 좋을듯 합니다. 개념적인 부분이 많기떄문에
잘못된 지식전달은 나중에 문제가 되죠 ^^

간단하게 말씀 드리자면 페이지는 고정된 메모리 크기로 여러개의 메모리
블럭을 할당하여 프로세스에서 제공하는것이고 이 블럭들을 관리하는
테이블이 존재합니다. 세그멘테이션은 가변적 메모리 블럭을 할당하여
사용하는 것입니다. 더 자세한 부분은 전공서적을 참고하세요..

kang0203 wrote:

하는 일은 같은데 방식이 달라서 리눅스에서는 둘 중 하나만 사용하나여?

둘다 사용합니다.
kang0203의 이미지

제가 책을 유심히 봤는데여..
혹시 세그먼테이션은 세그먼트의 접근을 위한 기법이고...
페이징은 실제 물리메모리에 접근하기 위한 기법인것 같은데..
맞나여?

scobyseo의 이미지

둘다 물리 메모리에 접근하기 위해 쓰입니다 :?
단지 사용하는 방식이 다를뿐이죠. (그리고 리눅스에서 사용되는 방식도..)
좀더 잘 읽어보시면, 가상 메모리 주소를 실제 메모리 주소로 번역하기 위해
쓰인다는 걸 잘 아실 수 있을 것입니다.

머.. 하신 말씀이 리눅스에 대해서만 말씀하셨다면 옳다고도 할 수 있습니다.
하지만, 말이 너무 모호하네요..

원래 어떤 의미인지 잘 알고 싶으시다면,
OS나 컴퓨터 구조(i386 구조.. 같은)에 관련된 자료들을 읽어보시기 바랍니다.

서명:
이것은 올리는 글에 첨부될 사인 문구입니다. 제한은 255 글자입니다

taitai09의 이미지

페이징은 설정을 해 뒀다고 했는데,
그렇다면 가변의 메모리 블럭을 할당받는다고 했는데,
이것은 그때 그때마다 크기가 다르게 할당받게 되는겁니까?

똑!똑!

익명 사용자의 이미지

taitai09 wrote:
페이징은 설정을 해 뒀다고 했는데,
그렇다면 가변의 메모리 블럭을 할당받는다고 했는데,
이것은 그때 그때마다 크기가 다르게 할당받게 되는겁니까?

페이징은 그 단위가 일정합니다. 4k 거나 4MB 거나 펜티엄에서도 PAE 옵션인가가 켜져 있으면 4MB로 아니면 4k로 합니다. 기본적으로는 4k로 보시면됩니다. 페이징 같은것의 경우, 동일 크기가 아니면 문제가 심각하겠죠. 고운 하루되세요.

익명 사용자의 이미지

onyx wrote:
kang0203 wrote:

둘다 하는 일이 무엇 인지 모르겠지만

둘다 가상 메모리 관리기법입니다. 제가 설명해 드리는것 보다
전공서적을 찾아보시는게 좋을듯 합니다. 개념적인 부분이 많기떄문에
잘못된 지식전달은 나중에 문제가 되죠 ^^

간단하게 말씀 드리자면 페이지는 고정된 메모리 크기로 여러개의 메모리
블럭을 할당하여 프로세스에서 제공하는것이고 이 블럭들을 관리하는
테이블이 존재합니다. 세그멘테이션은 가변적 메모리 블럭을 할당하여
사용하는 것입니다. 더 자세한 부분은 전공서적을 참고하세요..

kang0203 wrote:

하는 일은 같은데 방식이 달라서 리눅스에서는 둘 중 하나만 사용하나여?

둘다 사용합니다.

좋은 답변입니다.

제 의견을 몇 자 더 쓰자면......
x86의 세그먼트 레지스터에 집착하시면, 큰 의미를 놓칠수 있습니다.
세그멘테이션은 x86나오기 한참전에도(8086보다도 오래전.) 존재한 개념입니다. 페이징도 마찬가지..
80386의 MMU는 아주 훌륭한 교재거리입니다. 인텔이 이를 구현하고, 엄청나게
자랑했고, 책들에도 단골로 실리게된 계기입니다. 하드웨어(프로세서) 내장시킨
가상메모리 기법입니다.

세그멘테이션 : 가변사이즈
페이징 : 고정사이즈

장단점은 잘~ 생각하시고, 전공서적을 참고하세요. 시험문제감이군요 :twisted:

댓글 달기

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