Потоки разделяют адресное пространство, но не разделяют стеки: противоречит? - PullRequest
0 голосов
/ 10 февраля 2019

Я знаю, что потоки разделяют адресное пространство, но не разделяют свои стеки.Разве это не противоречит?Почему верно говорить, что они разделяют адресное пространство, когда они фактически не разделяют свой стек - стек является частью адресного пространства, не так ли?

Я бы предположил, что потоки разделяют кучу, данные и кодсегмент, а не стек стека.Для меня все они считаются адресным пространством процесса.

Может кто-нибудь уточнить, пожалуйста?Спасибо !!

1 Ответ

0 голосов
/ 14 февраля 2019

Старые учебники часто описывают их как таковые, но стеки потоков в современных операционных системах не являются какими-то «особыми» компонентами адресного пространства процесса.Они являются отображениями памяти, как и любые другие отображения, созданные mmap.

Первичный поток - первый поток в процессе - может получить свой стек особым образом, но остальные потоки распределяют его нормальнобиблиотекой потоков в пользовательском пространстве (часто с вызовом mmap).Стек обычно может управляться пользовательским пространством, иногда даже полностью заменяется другим выделением памяти.

Большинство операционных систем даже не проверяют, что поток фактически использует стек, который, как он утверждает, использует - здесьописание недавно внедренной техники снижения безопасности, которая реализует такую ​​проверку для защиты от эксплойтов.

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