Регистры сегмента потока

Я признаю, что провел минимальное исследование по этому вопросу (всего несколько поверхностных поисков в Google). Пакеты потоков (в частности, pthreads, но мой вопрос относится ко всем библиотекам пользовательских потоков x86 unix) сохраняют регистры сегментов (fs, cs, ds и т. д.) для каждого потока? Другими словами, есть ли у каждого потока своя собственная копия сегментных регистров?


person Chris    schedule 13.07.2011    source источник


Ответы (1)


В большинстве современных ОС регистры сегментов имеют определенные значения, определяемые ОС. Библиотеки потоков ОС гарантируют, что регистры всегда установлены правильно для каждого потока. например в Windows регистр FS указывает на сегмент с данными, относящимися к потоку, который, таким образом, обновляется при каждом переключении потока, тогда как регистр DS относится к сегменту всего процесса, поэтому он одинаков для всех потоков внутри процесса.

Если платформа позволяет пользователю устанавливать значения сегментных регистров, то я ожидаю, что они будут должным образом сохраняться при переключении потоков, как и любой другой регистр.

В общем, я бы ожидал, что регистры сегментов будут сохранены, потому что это проще, чем искать, какими они «должны быть», и приводит к наименьшей возможности неожиданности.

person Anthony Williams    schedule 28.07.2011
comment
Потрясающий. Я задал этот вопрос, потому что недавно разработал (для учебных целей) библиотеку потоков на C. Благодарю вас! - person Chris; 29.07.2011