Czytam „Linux Kernel Development” Roberta Love'a i natknąłem się na następujący fragment:
Brak (łatwego) użycia zmiennoprzecinkowego punktu
Kiedy proces przestrzeni użytkownika używa instrukcji zmiennoprzecinkowych, jądro zarządza przejściem z trybu liczb całkowitych do trybu zmiennoprzecinkowego. To, co jądro musi zrobić podczas używania instrukcji zmiennoprzecinkowych, różni się w zależności od architektury, ale jądro zwykle łapie pułapkę, a następnie inicjuje przejście z trybu liczb całkowitych do trybu zmiennoprzecinkowego.
W przeciwieństwie do przestrzeni użytkownika, jądro nie ma luksusu płynnej obsługi zmiennoprzecinkowej, ponieważ nie może łatwo przechwytywać siebie. Używanie zmiennoprzecinkowych wewnątrz jądra wymaga, między innymi, ręcznego zapisywania i przywracania rejestrów zmiennoprzecinkowych. 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 istnieje w głównych architekturach sprzętowych (takich jak x86), czy też jest specyficzne dla bardziej egzotycznych środowisk? Co dokładnie oznacza przejście z trybu liczb całkowitych do trybu zmiennoprzecinkowego, zarówno z punktu widzenia procesu, jak i jądra?