7 puan yazan kunggom 2020-06-15 | Henüz yorum yok. | WhatsApp'ta paylaş

Michal Necasek adlı biri, bir tanıdığından [AMD Ryzen 7 3800X (2019'da piyasaya çıktı) CPU kullanan bir sistemde sanal makine içinde Windows 3.11'i çalıştıramadığını] duyunca sorunun nedenini araştıran bir yazı kaleme almış. (İngilizce)

İnceleme sonucunda nedenin, NDIS (Network Driver Interface Specification) modülündeki döngü gecikmesi kalibrasyon mantığı olduğu ortaya çıkmış. Bu mantık şu şekilde çalışıyordu:

  1. Başlangıçta mevcut zamanı milisaniye cinsinden alır.

  2. 2^20 (=1,048,576) kez LOOP komutunu çalıştırır.

  3. Mevcut zamanı tekrar milisaniye cinsinden alır ve başlangıç zamanını çıkararak geçen süreyi hesaplar.

  4. [2^20 / geçen süre] hesabını yaparak, milisaniye başına döngü sayısını bulur.

Sorun, 2^20 kezlik döngü 1 milisaniye içinde tamamlanırsa geçen sürenin 0 milisaniye olarak hesaplanması ve bunun da [sıfıra bölme] hatasına yol açmasıydı. Bu yüzden önyükleme başarısız oluyordu. Windows 3.11'in geliştirildiği ve piyasaya sürüldüğü 1993 yılında PC platformundaki en hızlı CPU, 66 MHz'lik Intel Pentium işlemciydi; hesaplamalara göre bu işlemcinin söz konusu kadar döngüyü tamamlaması en iyi koşullarda bile 94 milisaniyeden uzun sürmüş olmalı. Bunun bir nedeni de o dönem işlemcilerinin LOOP komutunu tek çevrimde çalıştıramamasıydı. Ancak modern CPU'lar, saat hızı ve komut başına çevrim sayısı gibi birçok açıdan bakıldığında bu eski işletim sistemlerini çalıştırmak için gereğinden fazla hızlı kalıyor.

Orijinal yazıda başka ilginç noktalar da var. Windows 95'te bu mantığın biraz değiştirilerek daha fazla yerde kullanıldığı, ayrıca Intel işlemcilerde Pentium III 1GHz modelinde bile bu mantığın çalışmasının 6 milisaniye sürdüğü halde AMD işlemcilerde K6-2 350MHz modelinde bile sorun çıktığı; yani CPU'nun iç çalışma farklarının sorunun ortaya çıkıp çıkmamasını etkilediği anlatılıyor. Bu sorunun ancak 1999'da çıkan Windows 98 SE ile tamamen çözüldüğü de belirtiliyor.

Henüz yorum yok.

Henüz yorum yok.