7 poin oleh kunggom 2020-06-15 | Belum ada komentar. | Bagikan ke WhatsApp

Seorang bernama Michal Necasek menulis artikel yang menyelidiki penyebab masalah setelah mendengar dari kenalannya bahwa [Windows 3.11 tidak bisa dijalankan di mesin virtual pada sistem yang menggunakan CPU AMD Ryzen 7 3800X (dirilis pada 2019)]. (bahasa Inggris)

Hasil penyelidikan menunjukkan bahwa penyebabnya adalah logika kalibrasi loop delay di modul NDIS (Network Driver Interface Specification). Logika tersebut bekerja dengan cara berikut.

  1. Saat mulai, ambil waktu saat ini dalam satuan milidetik.

  2. Jalankan instruksi LOOP sebanyak 2^20 (=1,048,576) kali.

  3. Ambil lagi waktu saat ini dalam satuan milidetik, lalu kurangi dengan waktu awal untuk mendapatkan waktu yang berlalu.

  4. Hitung [2^20 / waktu yang berlalu] untuk memperoleh jumlah loop per 1 milidetik.

Masalahnya, jika loop sebanyak 2^20 kali selesai dalam waktu kurang dari 1 milidetik, maka waktu yang berlalu dihitung sebagai 0 milidetik sehingga terjadi error [pembagian dengan 0]. Inilah penyebab proses boot gagal. Pada 1993, ketika Windows 3.11 dikembangkan dan dirilis, CPU tercepat di platform PC adalah prosesor Intel Pentium 66 MHz. Jika dihitung, bahkan dalam kondisi terbaik prosesor tersebut akan memerlukan lebih dari 94 milidetik untuk menyelesaikan loop sebanyak itu. Salah satu alasannya adalah prosesor pada masa itu tidak dapat mengeksekusi instruksi LOOP dalam 1 siklus. Namun CPU modern, dilihat dari kecepatan clock maupun jumlah siklus per instruksi, memang terlalu cepat untuk menjalankan sistem operasi lama seperti ini.

Jika membaca artikel aslinya, ada hal menarik lain juga. Di Windows 95, logika di atas sedikit diubah dan dipakai di lebih banyak tempat; pada prosesor Intel, bahkan model Pentium III 1GHz masih memerlukan 6 milidetik untuk menjalankan logika tersebut, tetapi pada prosesor AMD masalah sudah muncul bahkan di model K6-2 350MHz. Dijelaskan bahwa apakah masalah ini terjadi atau tidak bergantung pada perbedaan cara kerja internal CPU. Sebagai referensi, masalah ini baru benar-benar diperbaiki di Windows 98 SE yang dirilis pada 1999.

Belum ada komentar.

Belum ada komentar.