[완료] 리눅스 커널에서 메모리 관리가 이해가 안됩니다.

besapius의 이미지

안녕하세요.

리눅스 커널책을 보고 있는데요. 제가 이해한 것이 맞는지 틀린지 확인이 안되서요. 혹시 아시는분 계신지요?

예를들어, 시스템이 8기가의 메모리를 가지고 있고, 스와핑은 off됐고,
시스템이 현재 메모리를 6기가 사용하고 있고, 2기가가 사용가능한 상태라고 가정할께요.

이 상태에서, (커널은 물리적으로 page frame을 zone으로 나눠서 보관하잖아요.)
그렇다면 만일, zone_A와 zone_B에 각각 1기가씩 free memory가 남아있을 경우에요.

사용자가 malloc()으로 1.5기가를 요청하면 어떻게 됩니까? (시스템 전체적으로는 2기가가 있지요.)
zone_A와 zone_B에서 알아서 1.5를 맞춰서 물리적으로는 비연속적인 page frame들이 virtual
memory management를 거치면서 연속적인 메모리로 만들어져서 사용자에게 반환되는게 맞나요?

(복잡하지 않게 demand paging이나 memory policy는 다 무시하고요. page는 즉각 물리메모리로 맵핑되고,
page는 어떤 zone에서도 할당 받을 수 있다고 하면 가정할께요)

poplinux의 이미지

물리 메모리상에서는 연속적이지 않아도 가상 메모리 상에서는 연속적으로 보이도록 만들어 줍니다.

========================
조직 : E.L.D(Embedded Linux Developer/Designer)
블로그 : poplinux@tistory.com
카페 : cafe.naver.com/poplinux

임베디드 리눅스 관련 프리렌서 지향

익명 사용자의 이미지

답변 감사합니다.

물리적으로 연속적이지 않은 메모리를 연속적으로 보이게 반환하는 것은 알고 있는데요,
그게 같은 zone에 있는 비연속적인 메모리들만 모아서 리턴하는 것인지,
아니면 ZONE_DMA에서 몇 개, ZONE_NORMAL에서 몇 개, ZONE_HIGHMEM에서 몇 개씩 뽑아서
리턴하는/(할수 있는) 것인지 명확하지가 않아서요.혹시 알려주실 수 있으신가요?

besapius의 이미지

답변 감사합니다.

물리적으로 연속적이지 않은 메모리를 연속적으로 보이게 반환하는 것은 알고 있는데요,
그게 같은 zone에 있는 비연속적인 메모리들만 모아서 리턴하는 것인지,
아니면 ZONE_DMA에서 몇 개, ZONE_NORMAL에서 몇 개, ZONE_HIGHMEM에서 몇 개씩 뽑아서
리턴하는/(할수 있는) 것인지 명확하지가 않아서요.혹시 알려주실 수 있으신가요?

--
아래글은 익명으로 저장되서 다시 올립니다. :-)

poplinux의 이미지

"리눅스 커널의 이해" 8장 읽어 보시면 대략 이해가 될겁니다.

온라인 무료 PDF 파일로도 배포하고 있습니다.

========================
조직 : E.L.D(Embedded Linux Developer/Designer)
블로그 : poplinux@tistory.com
카페 : cafe.naver.com/poplinux

임베디드 리눅스 관련 프리렌서 지향

lmk378의 이미지

제가 아는 분은 그책을 리눅스 커널의 오해라고 부르시더군요ㅋ

lmk378의 이미지

제생각엔 직접 해보시는게 가장 빠르지 않을까요?^^;;

$ cat /proc/zoneinfo

확인해보시고
malloc하는 프로그램(malloc 만 하시면 안되고 write도 하셔야 하는거 잊지 마세요)
짜보신 다음에(mlock 까지 걸어주시면 금상첨화~)
프로그램 돌린후 다시

$ cat /proc/zoneinfo

각 zone의 변화가 어떻게 되었는지 확인해보시는게 가장 좋은 방법일듯 합니다^^

besapius의 이미지

답글 감사합니다.
이게 참 애매한게 일부러 zone마다 일정 공간을 소비한 후에 해야 되서, 시나리오 짜기가 참 쉽지만은 않네요^^;
아이디어 감사합니다. :-)

ukyoukyo의 이미지

man malloc 해보시면,

'낙관적인 메모리 할당'은 버그를 가지고 있다...라고 나와있었던걸로 기억됩니다.

메모리 '할당'과 '사용'에 대해서 경고를 하더군요.( 저도 잘은 모르지만... )


------------------ System programmer...^^

댓글 달기

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