Those Win9x Crashes on Fast Machines
由 darkranger 在 週曰, 07/19/2020 - 21:16 發表
雖然我們多少都聽過類似的事情:若在較新的 CPU 上執行陳年的作業系統或應用程式,可能會因為當時的程式設計沒有考量到 CPU 速度的演進而遇到各種怪事。不過來自 OS/2 Museum 網站的一篇文章:《Those Win9x Crashes on Fast Machines…》,則關注了一件相對久遠的歷史事件,且硬體與軟體之間的年份並沒有那麼大的差距。
在 1998 年,AMD 推出了 K6-2 處理器系列,型號以運作時脈劃分,從 200 到 550 MHz 不等。然而當時出現的一項問題,是 Windows 95 在 K6-2 350 MHz 以上的型號都會發生崩潰,為此微軟也釋出了更新程式。但令人疑惑的是,在同一時期、同時脈的 Intel Pentium II 處理器卻不會發生崩潰──按理講 Pentitum II 的平均效能應該要優於 K6-2 才是?
原來 K6-2 確實在某些方面比 Pentium II 要快,它的 x86 LOOP 指令執行速度,比起同時脈的 Pentium II 快上好幾倍。但這是有風險的,一旦程式碼將 LOOP 指令執行時長所花費的毫秒數作為除數,就有可能會發生除以零的問題,或者是除數過小以致商數高於預期的風險。反之 Intel 似乎意識到了什麼,它並沒有與 AMD 在 LOOP 指令上做競爭,同時也明文建議開發者不要使用 LOOP。
箇中細節在文章裡有精闢的調查,值得有興趣的人加以閱讀。