리눅스 커널의 스택에 대해서 질문드리고 싶습니다.

글쓴이: 익명 사용자 / 작성시간: 일, 2020/09/06 - 9:47오전
안녕하세요. 리눅스 커널을 공부한지 얼마 안된 학생입니다.
리눅스 커널에서 하나의 task를 생성할때, task_struct와 task 전용 커널 스택을 할당해준다고 알고 있습니다.
그런데 여기서 task_struct와 커널 스택을 할당해 주는 영역은 커널의 어떠한 섹션인가요? 슬랩 할당자로 관리되는 커널 힙 영역에서 할당되는 건가요?
또, 가상메모리상 유저 공간의 섹션은 stack, heap, bss, text 등의 섹션으로 나누어지는데, 리눅스 커널 이미지에서는 어떤 섹션들이 존재하나요? (x86_x64 기준)
리눅스 커널을 공부한지 얼마 안되어 질문이 좀 이상할 수도 있을 것 같습니다.
답변 주시면 감사하겠습니다!
Forums:
task_struct 구조체는 task_struct_cachep이라 슬랩 캐시로 관리됩니다.
프로세스가 실행되는 과정에서 다음 함수들이 호출되는데요.
* _do_fork() 함수
* copy_process() 함수
copy_process() 함수에서 다음 함수를 호출해 프로세스의 task_struct 구조체와 스택을 프로세스에게 할당합니다.
* alloc_task_struct_node() 함수: task_struct 구조체 할당
* alloc_thread_stack_node() 함수: 프로세스에게 스택 공간을 할당
dup_task_struct() 함수의 구현부는 다음과 같습니다.
task_struct 구조체는 task_struct_cachep이라 슬랩 캐시로 관리되며, 관련 코드는 alloc_task_struct_node() 함수의 구현부를 참고하시면 됩니다.
(개인블로그)
http://rousalome.egloos.com
답변 감사드립니다.
며칠 전부터 Austinkim님 블로그 정독하면서 공부하고 있었습니다. 답변 주셔서 영광입니다.
설명 주신대로 task_struct는 슬랩 캐시에서 할당된다는 것을 이해했습니다. 그리고 커널 스택을 할당해준다는 alloc_thread_stack_node 함수를 찾아보니 vmalloc 할당자를 이용하는 것 같습니다.
그리고 혹시 질문 올린 내용인 가상 메모리상에서 커널의 섹션들은 어떻게 나누어지며 어떤 레이아웃을 가지고 있는지에 대해서도 답변 부탁드려도 될까요?
지금 보고 있는 책에 따르면 direct mapping space, ioremap space 등의 영역이 있는 것 같은데, 설명도 적고 맞는 설명인지도 잘 모르겠습니다.
감사합니다.
아래 내용을 참고하시면 좋겠습니다
정확한 질문의 의도를 파악하지 못해 아래와 같이 대략적인 커멘트를 남기니 참고하시면 좋겠습니다.
커널의 섹션 정보:
커널이 부팅을 할 때마다 아래와 같은 로그를 출력하는데, 이 로그가 어떤 함수에서 출력하는지 분석하시면 답을 찾으실 것 같습니다.
유저 프로세스의 가상메모리상 섹션은 프로세스(커널 기준) struct task_struct 구조체의 struct mm_struct 필드의 vma를 참고하시면 확인하실 수 있습니다.
(개인블로그)
http://rousalome.egloos.com
답변 감사드립니다. 한번 분석해보겠습니다.
답변 감사드립니다. 한번 분석해보겠습니다.
댓글 달기