разработка ядра Linux - PullRequest
       5

разработка ядра Linux

9 голосов
/ 28 ноября 2010

Я сейчас читаю «Разработка ядра Linux» Роберта Лава, и я не понимаю, что делает этот фрагмент сборки.

По сути, в каждом стеке ядра процесса есть struct thread_info, который находится в конце стека. Теперь, на архитектуре x86, мы можем, по-видимому, получить это (предполагая размер стека 8 КБ), используя следующую сборку

movl $-8192, %eax
andl %esp, %eax

Таким образом, в общем случае ANDing указатель стека на 0xffffe000. Я не понимаю, что здесь происходит? Я не понимаю, почему маскирование младших значащих 13 битов %esp приводит нас к структуре. Я знаю, что почувствую себя глупо, когда это объясню, но меня это беспокоит.

Спасибо.

1 Ответ

5 голосов
/ 28 ноября 2010

Стек увеличивается вниз, поэтому конец стека - это самый низкий адрес в стеке и начальный адрес структуры.И стеки хранятся в кратных 8 КБ.Следовательно, стирание 13 младших значащих битов получает самый низкий адрес стека и, следовательно, начало структуры.Имеет ли это смысл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...