SII писал(а):
При аппаратном переключении они "трогаются" аппаратно, хочешь ты этого или нет.
Я плохо выразил свою мысль. Я имел ввиду следующее. Я почти уверен, что если новое загруженное значение сегментного регистра совпадает с текущим, то процессор не станет подгружать новый дескриптор из GDT, проверять его на валидность, сравнивать уровни привилегий и т.д. Наверняка этот момент оптимизирован. Если это действительно так, то в одном обращении к ячейке памяти нет ничего страшного. Если оно не попало в кэш, значит редко используется и его вклад в производительность близок к нулю. При частых обращениях оно наверняка будет попадать в кэш.
SII писал(а):
А исследовать время выполнения разных операций было бы неплохо. Тут главная проблема -- суметь это сделать корректно. Всё ж Коре и7 -- это не 80386, сейчас куда труднее учесть все побочные факторы...
Скажем так. С точки зрения влияния на общую производительность нас больше волнуют часто выполняющиеся переключения задач в нормальных условиях. Как правило, это обращение к системным функциям и обмен сообщениями между задачами. Мне кажется, здесь реально замерить накладные расходы. Если рассматривать ненормальные условия, то по большей части это page fault, что в целом тоже не очень сложно замерить. В общем, надо бует попробовать на реальном оборудовании.
phantom-84 писал(а):
Есть еще TR, а фактически сохранение/загрузка множества ненужных значений в/из TSS. Про такой (практически никому ненужный) реликт, как LDTR, я уже молчу.
Да не так уж и много там ненужных значений. Кроме сегментных регистров, это указатели стеков неиспользуемых уровней привилегий (которые, кстати, и не трогаются процессором без необходимости), это, пожалуй, только линк и LDTR.