Bisakah Anda menjalankan prosesor kelas x86 ramless?

9

Prosesor x86 modern memiliki setidaknya L2 cache 512K. Ada aplikasi yang sepenuhnya cocok dengan jumlah memori ini. Bisakah Anda menjalankan chip ini tanpa RAM terpasang? Jika demikian, apakah ada cara untuk melakukannya yang menghilangkan penalti waktu writeback ketika CPU mencoba untuk mempertahankan koherensi RAM?

Saya tidak memiliki aplikasi spesifik dalam pikiran, itu hanya keingintahuan kosong. Saya yakin di suatu tempat ada aplikasi niche di mana ini akan berguna sekalipun.

Mark tebusan
sumber

Jawaban:

12

Ya kamu bisa. Dengan memalsukan pembacaan dari lokasi memori fisik berturut-turut (tidak ada), Anda menetapkan tag di cache. Kemudian Anda mematikan pengisian lebih lanjut dari sarjana dan masukkan writeback, sehingga membatasi membaca / menulis ke cache dan itu akan berperilaku sebagai RAM normal.

Beberapa proyek penggantian bios melakukan ini karena Anda dapat menghabiskan lebih banyak kode pada pengaturan pengontrol memori chipset dan chipset, sehingga Anda dapat menulisnya dalam C misalnya.

Praktik ini banyak digunakan untuk CPU kelas tertanam juga untuk menangani bootloader. Metode untuk mengubah cache menjadi mode seperti RAM bervariasi sedikit.

Untuk pengantar tingkat rendah singkat Anda dapat memeriksa presentasi ini.

Perhatikan bahwa seperti yang ditunjukkan orang lain, Anda masih perlu memuat kode boot dari suatu tempat.

Bjorn Wesen
sumber
Sebenarnya, saya pikir hampir semua BIOS modern menggunakan ini dan hampir semua CPU x86 modern memiliki dukungan resmi untuk itu karena alasan itu.
Yuhong Bao
7

Saat CPU keluar dari reset, cache dimatikan. BIOS adalah yang awalnya mengkonfigurasi dan menghapus cache. Jadi tidak, Anda tidak dapat menjalankannya RAM-kurang karena tidak ada RAM untuk mem-boot-nya sejak awal.


sumber
1
Tidak bisakah beberapa instruksi pertama dari ROM menginisialisasi dan menghidupkan cache, tanpa menggunakan RAM?
Mark Ransom
1
@Mark Ransom Prosesor Intel modern (dan banyak CPU lainnya) menggunakan Serial Flash untuk menyimpan BIOS. Tetapi tidak dapat mengeksekusi kode dari flash serial. Sebaliknya CPU menyalin flash serial ini ke RAM dan kemudian menjalankannya.
Hah, ketidaktahuan saya menunjukkan - Anda dapat melihat sudah berapa tahun sejak saya melakukan desain perangkat keras. Jadi CPU menyalin flash secara otomatis sebelum instruksi pertama dijalankan? Itu akan menjadi masalah ayam / telur jahat untuk diatasi.
Mark Ransom
@ David Jelas, ini bukan 'serial' flash tapi 'Firmware Hub'. Ini berbeda dari 'serial' dalam hal mentransfer 4 bit sekaligus, bukan 1.
Majenko
1
@Mark Ransom Ada banyak CPU / MCU / DSP yang akan boot melalui tautan serial (Serial Flash, RS-232, SPI, dll.). Mereka semua melakukan ini dengan memiliki ROM kecil di dalam CPU tempat boot, dan kode itu akan memuat kode "nyata" dari mana saja. Menjalankan sistem RAM-Less bisa, secara teori, dimungkinkan dengan meminta Intel memodifikasi kode ini untuk menggunakan cache alih-alih RAM eksternal. Tapi saya ragu Intel akan melakukan ini.
3

Saya tidak tahu seberapa akurat ini, tetapi ini adalah pikiran saya:

Saya tidak berpikir ada cara apa pun Anda bisa mendapatkan akses terprogram ke cache. Anda tidak dapat menjamin dari satu instruksi ke instruksi berikutnya apa yang ada di cache, dan di mana ia berada, jadi Anda tidak dapat menggunakannya dengan andal sebagai RAM bahkan jika Anda dapat mengaksesnya secara langsung.

Anda dapat menjalankan x86 tanpa RAM, tetapi Anda tidak akan bisa melakukannya dengan sangat berguna. Anda akan dibatasi hanya menggunakan register internal untuk penyimpanan data.

Majenko
sumber
2
Protokol cacheline fill and flush didokumentasikan secara menyeluruh dan dapat dikonfigurasi di sebagian besar CPU termasuk x86. Konten Cacheline tidak disiram secara acak di antara instruksi. Lihat jawaban saya tentang bagaimana biasanya Anda mengaturnya untuk berperilaku sebagai RAM linier.
Bjorn Wesen
Saya telah menulis utilitas hex loader untuk klon 80x86 yang akan bekerja dengan benar tanpa RAM; IIRC, saya menerapkan tumpukan panggilan satu tingkat menggunakan SP untuk menyimpan alamat kembali. Karena ROM berada di bus yang sama dengan RAM, kemungkinan besar tidak akan ada masalah yang akan membiarkan ROM bekerja ketika RAM tidak, tetapi dalam kasus seperti itu loader dapat mendiagnosis masalah. Pada beberapa micros lainnya dengan bus kode eksternal tetapi sedikit ruang kode internal, mampu menjalankan kode pada sistem dengan bus rusak adalah alat diagnostik yang berguna.
supercat
@ Saya bisa salah tetapi bukankah RAM bukan untuk kode biner dan untuk dibaca dan ditulis oleh prosesor?
Victor Mehta