X86 sınıfı bir işlemciyi ramless çalıştırabilir misiniz?


9

Modern x86 işlemcilerin en az 512K L2 önbelleği vardır. Bu belleğe tamamen uyan uygulamalar var. Bu yongaları RAM takılı olmadan çalıştırabilir misiniz? Öyleyse, CPU RAM tutarlılığını korumaya çalıştığında geri yazma zamanlaması cezasını ortadan kaldıran bir yol var mı?

Aklımda belirli bir uygulama yok, sadece boş bir merak. Bir yerde bu olsa yararlı olacağını bir niş uygulama olduğundan eminim.

Yanıtlar:


12

Evet yapabilirsin. Ardışık (var olmayan) fiziksel bellek konumlarından okumaları satarak, etiketleri önbellekte ayarlarsınız. Ardından, önbelleklerin daha fazla doldurulmasını kapatır ve geri yazma girersiniz, böylece okuma / yazma önbelleğe sınırlandırılır ve normal bir RAM gibi davranır.

Bazı bios-yedek projeler bunu yapar, çünkü o zaman yonga seti ve yonga seti bellek denetleyicisi kurulumuna çok daha fazla kod harcayabilirsiniz, böylece örneğin C'de yazabilirsiniz.

Bu uygulama, gömülü sınıf CPU'larda ve önyükleyicileri işlemek için yaygın olarak kullanılır. Önbelleği RAM benzeri bir moda dönüştürme yöntemleri biraz değişiklik gösterir.

Kısa bir düşük seviyeli tanıtım için bu sunuma göz atabilirsiniz .

Diğerlerinin işaret ettiği gibi, önyükleme kodunu açıkça bir yerden yüklemeniz gerektiğini unutmayın.


Aslında, tüm modern BIOS'ların bunu kullandığını ve neredeyse tüm modern x86 CPU'ların bu nedenle resmi desteği olduğunu düşünüyorum.
Yuhong Bao

7

CPU sıfırlandığında, önbellek kapatılır. BIOS, başlangıçta önbelleği yapılandıran ve temizleyen şeydir. Yani hayır, RAMsiz çalıştıramazsınız çünkü ilk etapta önyükleme yapacak RAM yoktur.


1
ROM'dan gelen ilk birkaç talimat RAM kullanmadan önbelleği başlatamadı ve açamadı mı?
Mark Ransom

1
@Mark Ransom Modern Intel işlemciler (ve diğer birçok CPU'lar) BIOS'u saklamak için Seri Flaş kullanır. Ancak seri flaştan kod yürütemez. Bunun yerine CPU bu seri flaşı RAM'e kopyalar ve yürütür.

Hah, cehaletim gösteriyor - donanım tasarımı yaptığımdan bu yana kaç yıl geçtiğini görebilirsiniz. CPU ilk talimat yürütülmeden önce flaşı otomatik olarak kopyalar mı? Bu üstesinden gelmek için kötü bir tavuk / yumurta sorunu olurdu.
Mark Ransom

@David Açıkçası 'seri' flaş değil 'Donanım Yazılımı Hub'ı. Bu, '
seri'den farklıdır

1
@Mark Ransom Seri bir bağlantı (Serial Flash, RS-232, SPI, vb.) Üzerinden önyükleme yapacak birçok CPU / MCU / DSP vardır. Hepsi bunu, CPU'nun içinde önyükleme yaptığı küçük bir ROM ile gerçekleştirir ve bu kod "gerçek" kodu her yerden yükler. Bir RAM-Less sistemi çalıştırmak, teorik olarak, Intel'in bu kodu harici RAM yerine önbelleği kullanmak üzere değiştirmesini sağlayarak mümkün olabilir. Ama Intel'in bunu yapacağından şüpheliyim.

3

Bunun ne kadar doğru olduğunu bilmiyorum, ama bunlar benim düşüncelerim:

Önbelleğe programlı erişmenin herhangi bir yolu olduğunu düşünmüyorum. Bir komuttan diğerine önbellekte ne olacağını ve nerede bulunacağını garanti edemezsiniz, böylece doğrudan erişebilseniz bile onu RAM olarak güvenilir şekilde kullanamazsınız.

RAM olmadan bir x86 çalıştırabilirsiniz, ancak çok kullanışlı yapmasını sağlayamazsınız. Yalnızca veri depolamak için dahili kayıtları kullanmakla sınırlı kalacaksınız.


2
Önbellek doldurma ve yıkama protokolleri, x86 dahil olmak üzere çoğu CPU'da ayrıntılı olarak belgelenmiştir ve yapılandırılabilir. Önbellek içeriği talimatlar arasında rastgele bir şekilde temizlenmez. Tipik olarak doğrusal RAM olarak davranacak şekilde nasıl ayarladığınıza ilişkin cevabımı görün.
Bjorn Wesen

Herhangi bir RAM olmadan düzgün çalışacak bir 80x86 klon için bir hex yükleyici yardımcı programı yazdım; IIRC, dönüş adresini tutmak için SP kullanarak tek düzeyli bir çağrı yığını uyguladım. ROM, RAM ile aynı veri yolunda olduğu için, RAM çalışmadığında ROM'un çalışmasına izin verecek bir sorun olması büyük olasılıkla değildi, ancak böyle bir durumda yükleyici sorunu teşhis edebilir. Harici kod veriyolları olan ancak az miktarda dahili kod alanı bulunan bazı diğer mikro sistemlerde, bozuk veri yoluna sahip bir sistemde kod çalıştırabilmek yararlı bir tanı aracıydı.
supercat

@Yanlış olabilir ama RAM ikili kod ve işlemci tarafından okuma ve yazma için değil mi?
Victor Mehta
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.