Я признаю, что провел минимальное исследование по этому вопросу (всего несколько поверхностных поисков в Google). Пакеты потоков (в частности, pthreads, но мой вопрос относится ко всем библиотекам пользовательских потоков x86 unix) сохраняют регистры сегментов (fs, cs, ds и т. д.) для каждого потока? Другими словами, есть ли у каждого потока своя собственная копия сегментных регистров?
Регистры сегмента потока
Ответы (1)
В большинстве современных ОС регистры сегментов имеют определенные значения, определяемые ОС. Библиотеки потоков ОС гарантируют, что регистры всегда установлены правильно для каждого потока. например в Windows регистр FS указывает на сегмент с данными, относящимися к потоку, который, таким образом, обновляется при каждом переключении потока, тогда как регистр DS относится к сегменту всего процесса, поэтому он одинаков для всех потоков внутри процесса.
Если платформа позволяет пользователю устанавливать значения сегментных регистров, то я ожидаю, что они будут должным образом сохраняться при переключении потоков, как и любой другой регистр.
В общем, я бы ожидал, что регистры сегментов будут сохранены, потому что это проще, чем искать, какими они «должны быть», и приводит к наименьшей возможности неожиданности.