Wykorzystanie zmiennoprzecinkowego w jądrze Linuksa

Czytam „Linux Kernel Development” Roberta Love'a i natknąłem się na następujący fragment:

Nie (łatwe) korzystanie z pływającego punktu

Gdy proces przestrzeni użytkownika używa instrukcji zmiennoprzecinkowych, jądro zarządza przejściem z trybu całkowitego do zmiennoprzecinkowego. To, co musi zrobić jądro, gdy używa się instrukcji zmiennoprzecinkowych, różni się w zależności od architektury, ale jądro zwykle przechwytuje pułapkę, a następnie inicjuje przejście z trybu całkowitego do zmiennoprzecinkowego.

W przeciwieństwie do przestrzeni użytkownika, jądro nie ma luksusu bezproblemowej obsługi zmiennoprzecinkowej, ponieważ nie może łatwo pułapkować się. Używanie zmiennoprzecinkowego wewnątrz jądra wymaga ręcznego zapisywania i przywracania rejestrów zmiennoprzecinkowych, między innymi możliwymi obowiązkami. Krótka odpowiedź brzmi:Nie rób tego! Z wyjątkiem rzadkich przypadków, w jądrze nie ma operacji zmiennoprzecinkowych.

Nigdy nie słyszałem o tych trybach „całkowitych” i „zmiennoprzecinkowych”. Czym dokładnie są i dlaczego są potrzebne? Czy to rozróżnienie dotyczy głównych architektur sprzętowych (takich jak x86), czy też jest ono specyficzne dla bardziej egzotycznych środowisk? Co dokładnie pociąga za sobą przejście z trybu liczby całkowitej na zmiennoprzecinkową, zarówno z punktu widzenia procesu, jak i jądra?

questionAnswers(2)

yourAnswerToTheQuestion