Linux 2.6 커널에는 Thread_info 구조가 필요합니다.

Linux 2.6 커널에는 Thread_info 구조가 필요합니다.

Linux 2.6 커널 이전에는 struct task_struct각 프로세스의 커널 스택 끝에 존재했습니다. 개념이 없습니다 thread_info struct. 그러나 Linux 2.6 커널에서는 task_struct이를 프로세스의 커널 스택 끝에 배치하는 대신 thread_info struct끝에 배치합니다. thread_info 구조에는 task_struct이 구조에 대한 포인터가 포함되어 있습니다.

thread_info어떤 구조를 도입 해야 합니까 ? task_struct프로세스 커널 스택의 끝에 있는 if를 사용하여 stack pointer이 구조에 직접 액세스 할 수 있습니다 .task_struct

2.6 커널에서는 task_struct동적 할당이 사용됩니다 slab_allocator. 2.6 커널 이전에는 정적으로 할당되었습니까?

답변1

왜 이런 일이 일어나는지 모르겠습니다. 그러나 git blame파일에 작업을 수행하고 변경 사항을 도입한 커밋을 찾으면 쉽게 찾을 수 있습니다. 일반적으로 커밋 메시지는 커밋된 변경 사항을 매우 자세히 설명합니다.

답변2

우리에게 필요한 이유는스레드 정보메모리를 할당하기 때문입니다.작업 구조사용플레이트 분배기. 이제 이것이 무엇과 관련이 있는지 물어볼 수 있습니다.

이를 이해하려면 Slab Allocator의 작동 방식을 이해해야 합니다.

Slab Allocator가 없으면 커널 개발자는 쉽게 액세스할 수 있도록 특정 프로세스의 커널 스택에 task_struct에 대한 메모리를 할당할 수 있습니다. 이제 Slab Allocator의 출현으로 메모리는 Slab Allocator에 의해 결정된 task_struct에 할당됩니다. 따라서 Slab 할당자를 사용하면 특정 프로세스의 커널 스택이 아닌 다른 곳에 task_struct를 저장할 수 있습니다. 이제 커널 개발자는 thread_info를 도입하고 task_struct가 있는 위치에 대한 포인터를 넣었습니다. 그러므로 우리는스레드 정보대신 프로세스의 커널 스택에서작업 구조. 이것이 우리가 thread_info를 수락해야 하는 이유입니다.

Robert Love의 책 Linux Kernel Development에서 Slab Allocator에 대해 읽을 수 있습니다.

관련 정보