Learn Something Old Every Day, Part XVIII: FPU 감지는 어떻게 작동하는가?
FPU(부동소수점 연산장치) 감지는 8086 이후의 x86 CPU에서 복잡한 문제로, 특히 286 이상 CPU에서는 하드웨어가 직접 FPU 존재를 알리지 않고 소프트웨어가 이를 감지해야 합니다.
286/287 및 386/387 인터페이스는 8086/8087과 달리 ESC 명령어를 CPU가 직접 해석하며, FPU가 없을 때도 일부 FPU 명령어가 메모리에 값을 쓰는 등 완전한 무시(NOP)가 아니어서 감지 로직이 까다롭습니다.
FPU 감지 방법은 FNINIT 명령어로 FPU를 초기화하고, FNSTCW 명령어로 제어 단어를 읽어 실제 FPU가 있으면 특정 값이 나타나고 없으면 초기화된 값이 유지되는 점을 이용합니다.
또한 286부터 486SX까지 CPU가 FPU 명령어의 일부 동작을 처리하며, FPU가 없을 때도 메모리 쓰기나 보호 검사 등을 수행하는 등 CPU와 FPU 간의 역할 분담과 병렬 처리 메커니즘이 발전해 왔음을 설명합니다.
이 글은 고전 PC 아키텍처에서 FPU 감지의 기술적 세부사항과 CPU 세대별 차이를 심도 있게 분석하여, 하드웨어와 소프트웨어가 협력해 FPU 존재 여부를 판단하는 방식을 이해하는 데 실용적 가치를 제공합니다.