Ответ 1
Потому что...
- многие программы не используют с плавающей запятой или не используют ее на любом данном временном фрагменте; и
- сохранение регистров FPU и другого состояния FPU требует времени; Поэтому
... ядро ОС может просто отключить FPU. Presto, нет состояния для сохранения и восстановления и, следовательно, более быстрого переключения контекста. (Это то, что означает режим, это просто означает, что FPU включен.)
Если программа пытается выполнить операцию FPU, программа попадет в ядро, ядро включит FPU, восстановит любое сохраненное состояние, которое может уже существовать, а затем вернется для повторного выполнения операции FPU.
При переключении контекста времени он знает, что нужно пройти логику сохранения состояния. (И тогда он может снова отключить FPU.)
Кстати, я считаю, что объяснение книги по причине того, что ядра (а не только Linux) избегают операций FPU,... не совсем точны. 1
Ядро может зацепиться за себя и сделать это для многих вещей. (Таймеры, ошибки страниц, прерывания устройства и т.д.). Настоящая причина в том, что ядру не нужны операторы FPU, а также нужно запускать на архитектурах без FPU. Поэтому он просто избегает сложности и времени выполнения, необходимых для управления своим собственным контекстом FPU, не выполняя операции, для которых всегда существуют другие программные решения.
Интересно отметить, как часто состояние FPU должно быть сохранено, если ядро захотелось использовать FP .,. каждый системный вызов, каждое прерывание, каждый коммутатор между потоками ядра. Даже если возникла необходимость в случайном ядре FP, 2 скорее всего, это будет быстрее сделать это в программном обеспечении.
1. То есть, неверно.
2. Есть несколько случаев, когда я знаю, где программное обеспечение ядра содержит арифметическую реализацию с плавающей запятой. Некоторые архитектуры реализуют традиционные операционные системы FPU на оборудовании, но оставляют некоторые сложные операции IEEE FP для программного обеспечения. (Подумайте: аномальная арифметика.) Когда возникает какой-то нечетный случай с IEEE, они попадают в программное обеспечение, которое содержит педантическую правильную эмуляцию операционных систем, которые могут ловушки.