struct task_struct를 찾을 때 struct thread_info에는 무엇이 필요합니까?

struct task_struct를 찾을 때 struct thread_info에는 무엇이 필요합니까?

struct task_structLinux 장치 드라이버에 대해 읽는 동안 프로세스 설명자(유형 )에 특정 작업에 대한 모든 정보가 포함되어 있다는 것을 이해할 수 있습니다 . 프로세스 설명자는 슬랩 할당자에 의해 동적으로 할당됩니다.

내가 궁금한 점은 thread_info스택 맨 아래에 저장되는(x86 가정)이라는 새로운 구조를 도입해야 한다는 것입니다. 왜 이런 일을 하는가?

struct task_struct현재 실행 중인 작업 주소( )의 주소를 커널 스택에 넣을 수 없는 이유는 무엇입니까 ?

답변1

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

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

Slab Allocator가 없으면 커널 개발자는 다음을 수행할 수 있습니다.작업 구조특정 프로세스의 커널 스택에 쉽게 접근할 수 있도록 합니다. 이제 Slab Allocator의 출현으로 메모리가 다음에 할당됩니다.작업 구조슬랩 할당자에 의해 결정됩니다. 따라서 Slab Allocator를 사용하면작업 구조특정 프로세스의 커널 스택이 아닌 다른 곳에 저장됩니다. 이제 커널 개발자들은스레드 정보그 위치에 대한 포인터를 넣으십시오.작업 구조살다. 그렇기 때문에 우리는 견뎌야 한다스레드 정보.

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

답변2

경량 프로세스아니요 task_struct. 스택과 소량의 정보이면 충분합니다. 여러 LWP는 task_struct모든 리소스 설명을 포함하는 동일한 를 공유합니다 .

관련 정보