Понимание получения указателя структуры задачи _из стека ядра процесса

Сейчас я читаю книгу "Linux Kernel Development 3d Edition" Роберта Лава. Там он пишет о потоке _info struct, который содержит указатель на задачу _struct struct и, как я понял, расположен внизу или вверху стека ядра процесса (в зависимости от архитектуры ). До недавнего времени я не был знаком с API ядра Linux и не знал о существовании текущего метода (). Есть отрывок из книги, связанный с тем, как на самом деле работает текущий ()метод :

On x86, current is calculated by masking out the 13 least-significant bits of the stack pointer to obtain the thread_info structure.This is done by the current_thread_info() function.The assembly is shown here: movl $-8192, %eax andl %esp, %eax This assumes that the stack size is 8KB.When 4KB stacks are enabled, 4096 is used in lieu of 8192.

. Мои вопросы:

  1. Насколько я знаю, если у нас есть десятичное значение, представленное в виде набора битов, то в наборе есть только один младший -значащий бит, не так ли?
  2. Что такое магическое число 13?

Для тех, кто будет читать эту тему, вопросы, которые я озвучил, могут привести к выводу, что автор плохо понимает процесс выделения и администрирования памяти. Хорошо, это может быть правильно из-за того, что я могу представить память, выделенную для стека, как ленту, заполненную битами (или байтами ). Все эти байты доступны по определенному адресу памяти, представленному в виде некоторого десятичного значения. Начало стека — это самый низкий адрес памяти, а конец стека — это самое высокое значение адреса памяти. Но КАК, КАК мы можем получить указатель на информационную структуру потока _, расположенную, скажем, в конце стека, только путем маскирования 13 младших -значащих битов произвольно расположенного указателя стека (Если я понял правильно, мы маскируем биты указателя стека ADDRESS, представленного в виде десятичного значения ).

5
задан Mat 23 September 2012 в 16:49
поделиться