Michal Necasek नाम के एक व्यक्ति ने यह सुनने के बाद कि एक परिचित [AMD Ryzen 7 3800X(2019 में जारी) CPU वाले सिस्टम पर virtual machine में Windows 3.11 नहीं चला पा रहा था], समस्या के कारण की जाँच करते हुए यह लेख लिखा। (अंग्रेज़ी)

जाँच के परिणाम में पता चला कि कारण NDIS(Network Driver Interface Specification) मॉड्यूल में मौजूद loop delay calibration logic था। यह logic निम्न तरीके से काम करता था.

  1. शुरू में वर्तमान समय को millisecond इकाई में पता किया जाता है.

  2. 2^20(=1,048,576) बार LOOP instruction चलाया जाता है.

  3. फिर से वर्तमान समय को millisecond इकाई में पता किया जाता है, और इस मान से शुरुआत का समय घटाकर elapsed time निकाला जाता है.

  4. [2^20 / elapsed time] की गणना करके, प्रति 1 millisecond loop की संख्या निकाली जाती है.

समस्या यह थी कि अगर 2^20 बार का loop 1 millisecond के भीतर खत्म हो जाए, तो elapsed time 0 millisecond के रूप में गणना होता है, जिससे [division by zero] त्रुटि हो जाती है। इसी वजह से boot विफल हो रहा था। 1993 में जब Windows 3.11 विकसित और जारी किया जा रहा था, उस समय PC platform पर सबसे तेज़ CPU 66 MHz का Intel Pentium processor था। गणना करने पर पता चलता है कि उस processor को इतना loop चलाने में सबसे अच्छी स्थिति में भी 94 millisecond से अधिक समय लगा होता। इसका एक कारण यह भी था कि उस समय के processor LOOP instruction को 1 cycle में नहीं चला सकते थे। लेकिन आधुनिक CPU clock speed, instruction per cycle और अन्य कई पहलुओं से देखें तो ऐसे पुराने operating system चलाने के लिए ज़रूरत से भी कहीं ज़्यादा तेज़ हैं.

मूल लेख में और भी दिलचस्प बातें हैं। Windows 95 में ऊपर वाला logic थोड़ा बदला गया और अधिक जगहों पर इस्तेमाल हुआ, जबकि Intel processor में Pentium 3 1GHz मॉडल पर भी इस logic को चलने में 6 millisecond लगते थे, लेकिन AMD processor में K6-2 350MHz मॉडल पर भी समस्या आती थी। यानी CPU के आंतरिक काम करने के तरीके के अंतर से यह तय होता था कि समस्या होगी या नहीं। संदर्भ के लिए, यह समस्या 1999 में जारी Windows 98 SE में आकर ही पूरी तरह हल हुई थी.

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.