커널 주소 공간이 궁금합니다.

jeongheumjo의 이미지

요즘 커널 공부를 하는 중입니다.
'리눅스 커널 내부구조' 라는 책을 보고 있는데요,
개념 이해가 잘 안되서 여쭤봅니다.

리눅스에서 32비트 머신에서 한 프로세스는 가상 주소 공간 4GB 를 가집니다. 그 중
0 ~ 3 GB 는 유저 공간
3 ~ 4 GB 는 커널 공간 입니다.
유저 공간에는 그 프로세스의 코드, 데이타(.bss 포함), 스택, 힙이 자리합니다.
1. 커널 공간에는 커널의 어떤 부분이 자리할까요?

책에서 설명하기로는
32 비트 머신은 BIOS comm area/Kernel code image/DMA region/mem_map/Direct Mapping/vmalloc/kmap/Fixed mapping
64 비트 머신은 module mapping space/unused hole/kenel text mapping/ioremap space/direct mapping space/guard hole
이 그 공간에 존재하게된다고 하는데요, 이는 공간을 부르는 이름일 뿐입니다.

2. 커널은 코드, 데이타, 스택, 힙을 가지지 않나요?

시스템콜이 수행되는 경우 트랩이 발생한다고 읽었습니다.
그때 유저모드에서 커널모드로 변환이 이루어진다고 하는데요,
3. 그 때 유저공간의 스택상에서의 실행은 정지되고 커널 공간(동일한 프로세스 구조내의)에서 커널 스택이 실행되게 되는 것이 맞나요?
그런데 이 때, 커널 스택이 실행 중 커널의 힙 영역상의 메모리를 접근하는 경우 (예를 들면, init_task 구조체 참조)를 보았습니다.
4. 그렇다면 커널의 힙도 응용프로그램의 4G 가상 메모리상의 커널 영역상에 존재하는 것일까요?

5. 커널의 모든 가상메모리가 응용프로그램의 가상 주소 4G 내의 커널 영역에 모두 들어가는 것인가요?

이 부분이 상당히 헤깔립니다.

또 마지막으로, QNX 와 같은 마이크로 커널 구조의 경우 이 내용들에 차이가 있을 것 같습니다.
아마 마이크로 커널의 경우는 응용프로그램의 가상주소 공간내에 커널 공간이 따로 없지 싶습니다.
커널은 독립된 4G 의 가상주소 공간을 따로 사용하며 응용프로그램의 시스템콜은 IPC 로 동작할 것 같습니다.
마이크로 커널은 그러나 인터럽트 핸들러를 위한 공간만 아마 응용프로그램의 가상주소 공간에 커널 공간으로 자리할 것 같은데요..
6. 마이크로 커널의 경우는 어떨까요?

휴... 질문이 너무 길어서 죄송합니다 ^^;

감사합니다.

jeongheumjo의 이미지

제 질문에 답을 주시는 분이 아무도 안계시네요..
제가 나름 찾아본 결론은 커널공간에는 모든 커널 메모리 공간이 들어간다 입니다.
커널은 일반 응용프로그램과 달라서 택스트, 데이타, 스택, 힙 처럼 공간의 이름을 붙이지는 않습니다. 하지만 어쨌든 커널의 모든 메모리 공간(이미지, 동적 할당 메모리공간, 스택공간 등등)이 모두 3GB ~ 4GB 의 공간에 올라갑니다.(x86)
모든 응용프로그램은 커널 공간에 동일한 커널의 메모리 영역들을 담고 있는 것이지요..

커널 공간에 올라가는 것은 모든 디바이스 드라이버, 파일시스템, 메모리 매니저, 타스크 매니저, 네트워크 매니저, 스케줄러 등입니다.

제 결론이 혹시 오류가 있을까요?

이번 글에는 누군가 관심을 가져주시길 바랍니다. ^^;

감사합니다.

kaeri17의 이미지

OS 과목 들은지가 하도 오래되고 관심분야가 아니라서... 근데 파일 시스템이 올라간다는 것은 파일 시스템을 관리하는 부분이 메모리에 올라간다는 뜻이겠죠?

그리고 마이크로커널의 경우 각각의 모듈이 OS의 일부가 아닌 프로세스이기 때문에 커널 메모리에 올라가 있지는 않습니다. 마이크로 커널의 경우 스케쥴러와 IPC등의 매우 기본적인 부분만 커널에서 담당하고 파일시스템이나 네트워크 등등은 전부 다 각각의 프로세서로 동작하죠.

정확히는 모르겠지만 말씀하신 것들이 맞는 것 같습니다.

또한 좀더 자세히 알고 싶으시다면 소스코드를 뜯어 보는 것도 괜찮은 방법 같습니다. 리눅스 소스코드는 너무 방대하고 교육용으로 나온 Pintos 같은 경우 정말로 매우 기본적인 기능만 구현이 되어 있으니 소스코드 이해하면서 보면 괜찮을 듯 합니다.

jeongheumjo의 이미지

파일 시스템이 올라갈 때 그 올라가는 대상은 파일시스템을 논리적으로 관리하는 커널내의 파일 시스템 매니저를 칭한 것이었습니다.

아직 모르는게 많아서 좀더 연구해봐야 정확하게 알 수 있을 것 같습니다.

답변 감사합니다.

댓글 달기

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