[질문]커널에서 힙영역의 크기가 어떻게되는지요...

jchaney의 이미지

어제 질문을 드렸는데, 제가 질문을 잘못드렸나봅니다. 답글이 하나도없는

것이...ㅎ

질문을 다시 올리겠습니다. 제가 겪고있는 문제는 static으로 선언한 변수의

크기가 64K * 12 정도 되는것이 4개 만들어야하는데, 이것이 컴파일은

잘되는데도, 이미지를 다시 올려서 리부팅을 하면 계속 무한 리부팅을

하더군요. 여러가지를 테스트해보았는데, 64K * 12짜리의 배열을 2개를

선언할때까지는 문제가 없는데 3개를 선언한 순간부터 문제가 발생합니다.

제 생각으로는 힙영역을 사용할수있는 크기의 제한이 있는것이 아닌가 하는데,

이 문제를 어떻게 해결해야하는지 알려주시면 감사하겠습니다.

그럼 좋은 하루 보내세요...(__)

charsyam의 이미지

일단 제가 알기론 ^^ static 은 힙공간에 생기는 게 아닙니다. 힙으로 할당을 받을려면 vmalloc 이나 kmalloc 을 쓰시는게 좋으실듯 하네요. 아마도 제가 알기론 128K 던가 까지 받을 수 있을겁니다. 음냐. vmalloc은 버추얼 메모리에서 가져오는 거고 kmalloc은 물리메모리던가 -_- 음, 기억력 제로라서 죄송 고운 하루되세요.

=========================
CharSyam ^^ --- 고운 하루
=========================

jchaney의 이미지

제가 질문을 잘못올렸네요...static말해놓고 힙 어쩌구하고...^^;;

그런데, 제가 해야할것은 64K * 12크기를 가지는 변수4개를 선언해야하는것인데, 그것이 문제가 있는것입니다. 제가 찾아본바로는 kmalloc은 128K까지 할당이 가능하고, vmalloc은 더 많이 할당이 가능하다고 알고있는데...제가 잘못알고있는것이지....저도 급하게 찾아본것이라서 자세히는 잘모르겠습니다.

음..위에서 말한것처럼 아주커다란변수4개를 선언하기위해서 배열, kmalloc, vmalloc등을 사용해보았는데, 무엇이 문제인지 잘모르겠습니다. 제가 모르는것은 변수한개의 크기가 일정크기만을 줄수가있는것인지, 아니면, 제가 작성한 코드에서 최대한 가질수있는 크기가 있는것인지도 잘모르겠습니다. 음...제가 썼지만, 정리가 잘안되네요....ㅠㅠ

음... 아무튼... 64K * 12의 크기를 가지는 변수4개를 선언하는 것이 저의 목적인데, 이것을 어떻게 해야할지 알려주시면 정말 감사하겠습니다...

그럼 좋은하루 보내세요...(__)

jchaney

errai의 이미지

소스코드에서 변수의 선언 부분을 보여주세요.

3Mbytes의 크기면 스택영역에 선언하면 절대 안됩니다. 실제로 사용 가능한

메모리 영역을 할당 받아야 하는데 위 경우는 크기가 커서 kmalloc을 써도

안됩니다. 하지만 vmalloc으로는 충분히 가능한 크기 이오니 조심스럽게

사용해 보시기 바랍니다.

훌륭한녀석의 이미지

그냥 참고 사항입니다.

커널 스텍의 경우 2페이지만을 사용가능합니다. 대략 4KB를 1개의 페이지로 사용하였을 경우 8KB정도입니다.

그 다음이 kmalloc()으로 32페이지를 사용가능합니다. 위와 같은경우라면 4*32=128 128KB만큼을 할당할 수 있겠군요.

또 그 다음이 __get_free_pages()로 512페이지를 사용가능합니다. 512*4 = 2048KB 2메가정도 되는군요.

또! 그 다음이 vmalloc()이 됩니다. 이것은 물리 메모리 전체를 쓸 수 있습니다.

위의 예는 x86에서 페이지 크기가 4KB라는 가정에서의 메모리 크기입니다. 다른 아키텍쳐에서는 다른 크기를 가질 수 있습니다.

jchaney의 이미지

저도 이것 저것 찾아보고 물어보고 하다가 vmalloc을 사용해야할 것 같다는

생각을 하게되었습니다. 가장 큰 메모리를 할당할수있는 것이더군요...

지금 계속 커널 컴파일 하면서 삽질하고있는데, 과연 잘될지...

성공하기를 기원하며~ㅎ''

답변달아주셔서 정말감사합니다. 저도 언능커서 답변달아주는 능력을 키워

야하는데.,.

그럼 좋은 하루 보내세요~~^^ㅎ

jchaney

댓글 달기

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