Intel CPU’lardaki kötü şöhretli A20 geçidine 10 yıl veda

Adanali

Member


  1. Intel CPU’lardaki kötü şöhretli A20 geçidine 10 yıl veda

IBM’in IBM PC AT ile PC tarihindeki en saçma donanım özelliklerinden birini piyasaya sürmesinden sadece 29 yıl sonra Intel, Haswell Core i işlemciler nesli ile kutsal uyumluluk yolundan vazgeçmeye cesaret etti. 1 Haziran 2013’ten itibaren, bir adres satırının sürekli olarak sıfırlanması komutunu basitçe vermek artık mümkün olmayacaktır. Çünkü bu güzel bir kapının işiydi: İstenirse A20 satırını sıfıra ayarlayın. Yıllar önce, Intel ve Microsoft sonunda PC2001 donanım belirtimiyle geçidi gömmeye karar vermişlerdi, ancak bu 10 yıldan fazla zaman alacaktı.


Tartışmalı Gate A20’nin aslında ne için kullanılması gerekiyor, merak ediyor musunuz? Bir Microsoft programcısı değilseniz ve ilk bilgisayar işlemcisi olan 8086/88’in adres alanı bölümlemesi ile mümkün kılınan bir özelliğinden yararlanmak istemiyorsanız pek değil; Daha fazla detay aşağıda. Bununla birlikte, CP/M DOS öykünücüsü, Microsoft Pascal veya Microsoft Exepack gibi bazı eski yazılımlar, kasıtlı veya özensiz programlama nedeniyle A20 geçidine ihtiyaç duyuyordu.

A20 vahşi büyüme


Her halükarda, Intel 80286’ya sahip AT PC ile, IBM görünüşe göre klavye denetleyicisinde boş bir geçit ve bir anahtar bağlantı noktasına sahipti ve şöyle düşündü: peki, o zaman isterseniz bir 8086/88’in adres alanını simüle edebiliriz. Ve 1990’ların ortalarında DOS uzantıları ve Windows ve OS/2 gibi diğer işletim sistemleri ortaya çıkana kadar ilk başta nispeten sorunsuz çalıştı. Bazen geçidi sık sık değiştirmek zorunda kalıyorsunuz, ancak klavye denetleyicisi aracılığıyla geçiş yapmak son derece yavaştı. Ve böylece BIOS’ta çoğunlukla “Hızlı A20 Kapısı” olarak anılan bir düzineden fazla alternatif yol vardı.







Bir IBM PC AT’nin şemasındaki A20 kapısı.


(Resim: IBM)



IBM, 1988’de PS/2 hattıyla çok daha hızlı 92 saat anahtarlama bağlantı noktasını kendisi tanıttı. HP, çok daha hızlı geçiş yapmak için Vectra’daki klavye denetleyicisine bazı komutlar verdi. Bazı işlemciler bağlantı noktası erişimlerini yakaladı ve aynısını dahili olarak yaptı, diğerleri 0xee bağlantı noktasını kullandı. Vahşi büyümeyi durdurmak için, daha sonra BIOS’ta 15h AX=24xx kesmesi tanımlandı.

486 ile dahili önbellekler tanıtıldığında, adreslerin dışında herhangi bir değişiklik olursa kafaları karıştığı için bunların temizlenmesi gerektiğinden daha fazla sorun ortaya çıktı. Bu da her zaman işe yaramadı. Cyrix, basitçe bir 386SX’e kırpılan 486slc2 adlı şık bir “klip yükseltmesi” geliştirmişti. Güncelleme çift saatlerde çalışıyordu ve küçük bir önbelleğe sahipti, ancak geçidin mevcut durumunu bildiren #A20m satırı sokette eksikti. Cyrix’in bunu nasıl yapacağına dair bir şeyler bulması gerekiyordu.


Hatalar, sorunlar, çözümler…


DOS 4.0’a kadar, kapı esas olarak önyüklemeden sonra aktifti, ancak DOS 5.0 ve HIMEM ile ikilem başladı: “A20 kapısı değiştirilemez” ifadesini gördüğünüz her yerde ve o kadar. config.sys’deki himem.sys sürücüsü, DOS 6.22’deki yaklaşık 16 değişkeni biliyordu, ancak genellikle sistemleri yanlış kaydetti.

Ve genellikle oyunlar için kullanılan bir sıkıştırma programı olan Microsoft Exepack ile sıkıştırılmış programları çalıştırmak isterseniz, genellikle yalnızca “Sıkıştırılmış dosya bozuk” aptalca hata mesajları alırsınız. Microsoft, Bilgi Bankası makalesi Q58225’te ve hatta 2000’de Q72360’ta saçma sapan gerekçelerle kendini tamamen aptal durumuna düşürdü.

Microsoft, yalnızca sıkıştırılmış programların 64K’dan yüksek olması için önce 64K’nın altındaki bir şeyi yüklemeniz gerektiğine dair geçici çözümü hazırdı. Örneğin, Microsoft çalışanı James Levin tarafından 1985 gibi erken bir tarihte uğursuz bir ABD patenti US4779187A ortaya çıktığı gibi, Microsoft Pascal tarafından iyi bilinmesine rağmen, sorunun anahtarsız A20 geçidinden kaynaklandığı açıklanmadı.

Son yıllarda, A20 kapısı çevresinde sayısız donanım sorunu birikmiştir. Pentium FDIV hatasından sonra düzenli olarak yayınlanan Intel’in “Özellik Güncellemeleri” bunlarla doluydu, bir liste tamamen kapsam dışı olurdu. Son olarak, sadece adres satırlarını değiştirip ardından gerçekten gitmenize izin verilmeyen bellek alanlarını okuyabilirseniz, güvenlik sorunları da vardı.







En yeni AMD Epyc “Genoa” işlemcisi bile A20 için BIOS yapılandırma ayarına sahiptir: “istek üzerine”.



ölü ilan edildi…


Sunucular söz konusu olduğunda Intel, sıkıcı Gates’i Nehalem CPU ailesiyle resmen gömdü. 10 yıl önce Haswell ile masaüstü sistemlerde – en azından artık #A20m sinyali yoktu.

Ancak artık CPU ile çevre birimleri arasında Direct Media Interface (DMI) Virtual Legacy Wire (VLW) gibi yeni iletişim seçenekleri var. Onun sicilinde her türlü safsataya bolca yer var. Ayrıca platform denetleyici merkezindeki (PCH) mevcut Intel yonga setlerinde init register bağlantı noktası 92’yi de bulabilirsiniz ve bununla bir init sinyali ayarlayabilirsiniz. Hâlâ ayrılmış beş biti var… yani görünüşe göre bir anakart üreticisi bunu gerçekten istiyorsa, artık hala A20 desteği var. Bir Intel geliştiricisi bunu birkaç yıl önce bana doğruladı, bu nedenle Intel bu özelliği hiçbir zaman gerçekten ortadan kaldırmadı.

AMD’de işler doğası gereği farklıdır. Burada hiçbir zaman resmi bir cenaze töreni olmadı. En yeni Epyc Genova işlemcisi bile A20 için A20 BIOS ayarına sahiptir: “istek üzerine”.

CP/M ve Kapı A20’nin kalıntıları


Biraz daha kesin olarak bilmek istiyorsanız, bir 8086/88 işlemcinin mimarisine derinlemesine bakmanız gerekir. Bu işlemci, 20 bitlik fiziksel adresi iki adet 16 bitlik kayıttan, bir segmentten ve bir ofset kayıttan “bir araya getirdi”. Intel, 4 bitlik bir segmenti 16 bitlik ofsetle 20 bitlik bir adrese paketleyebilirdi, ancak hayır, segment kaydındaki 16 bitlik bir değer dört bit sola kaydırıldı ve ofset Şimdi eklendi.

Sonuç olarak, aynı fiziksel adres birçok farklı şekilde üretilebilir, örneğin 12345h ile 1234h:5h veya 1230h:35h veya 235h:FFF5h ile vb. toplam 4096 yol için üretilebilir. Tutumlu programcılar daha sonra yığını kullanmadan sadece segment-ofset kombinasyonunu seçerek başka bir parametre ekleyebilir.

Peki ya örneğin F01Dh:FEF0h? Bu 1000C0h olurdu, ancak işlemcinin yalnızca 20 adres satırı var ve bunlar yalnızca FFFFFh’ye gidiyor. Sonuç olarak, bir “Adres Taşması” hata kesintisi verebilir, ancak Intel bunu kaydetti. Bunun yerine, segment kaydından dışarı kaydırılan ilk dört bit basitçe kaybolur, böylece her şey 000C0h’ye (sarma) geri döner. Sarma yoluyla ulaşılabilecek maksimum değer (FFFFh:FFFFh) => 0FFEFh’dir.

Bu adres 000C0h tamamen rasgele seçilmedi, aslında özel bir amacı var, çünkü 30h kesmesinin adresi. Microsoft, onları CP/M öykünmesindeki sıçramayla meşgul etti. CP/M – eski emekliler yine de bilirler – 8080, 8085 ve Z80 8-bit işlemcilerin ana işletim sistemiydi. Ve bir Seattle Bilgisayar Ürünleri programcısı olan Tim Paterson, Quick’n Dirty x86 DOS’u için, Bill Gates onu “sıkmadan” önce bile, büyük ölçüde CP/M’ye yaslandı.

“Call 5” standart girişi için çağrıyı ilgili MSDOS 21h işlevine dönüştüren küçük bir CP/M öykünücüsü kurdu. Yürütülebilir her programın CP/M uyumlu sıçraması, Program Segmenti Önekinde (PSP) Int 30’da en başta CS:5h çağrısı aracılığıyla ofset 5’te elde edildi. Yukarıda açıklanan seçenek, sarma yoluyla 000C0h’yi adreslemek ve aynı zamanda istenen program segmenti boyutunu yayınlamak için kullanıldı.

Her şeyi yeniden programlamak zorunda kalan Dosbox geliştiricileri, CP/M girişine yapılan bu sıçrama hakkında şu yorumu yaparlar: “Umarım kimse bu adresi gerçekten kullanmaz”.

Wikipedia’daki program bölümü önekine daha yakından bakmak isterseniz: İngilizce versiyonu alın, Almanca versiyonu biraz kafa karıştırıcı. Konuyla ilgili daha fazla bilgi OS/2 Müzesi’nde bulunabilir.

Bu arada, bu Int 30h aracılığıyla çağrılabilecek gerçek bir yazılım kesintisi değildi, ancak beş bayt alan ve bu nedenle bir sonraki kesinti 31h’yi de “yok eden” bir uzak atlama vardı. Paterson 1980’de bunun yalnızca eski yazılımlar için kısaca gerekli olduğunu yazdı: “Bu, yeni programlar için önerilmez”. Ama görünüşe göre bu Microsoft’ta sağır kulaklara düştü.



c't Magazine'den daha fazlası



c't Magazine'den daha fazlası




(ciw)



Haberin Sonu
 
Üst