Чи можете ви запустити безрамний процесор класу x86?


9

Сучасні процесори x86 мають щонайменше 512 Кэш кешу L2. Є додатки, які б повністю вписалися в цей об'єм пам'яті. Чи можете ви запускати ці мікросхеми без доданої оперативної пам'яті? Якщо так, чи існує спосіб, який виключає штраф за термін повернення, коли ЦП намагається підтримувати когерентність оперативної пам'яті?

Я не маю на увазі конкретного застосування, це просто простою цікавість. Я впевнений, що десь є нішевий додаток, де це було б корисно, хоча.

Відповіді:


12

Так, ти можеш. Підробляючи читання з послідовних (неіснуючих) місць фізичної пам'яті, ви встановлюєте теги в кеш-пам'яті. Потім ви вимикаєте подальше заповнення кеш-ліній і вводите запис, таким чином обмежуючи читання / запис у кеш, і він буде вести себе як звичайна ОЗП.

Деякі проекти біозаміни роблять це тим, що тоді ви можете витратити набагато більше коду на налаштування контролера пам'яті чіпсету і чіпсету, так що ви можете написати це, наприклад, на C.

Ця практика широко застосовується як для процесорів з вбудованим класом, так і для обробки завантажувачів. Способи перетворення кешу в режим, схожий на оперативну пам'ять, дещо відрізняються.

Для короткого ознайомлення ви можете ознайомитись із цією презентацією.

Зауважте, що, як зазначали інші, вам все одно потрібно завантажувати завантажувальний код звідкись очевидно.


Насправді, я думаю, що майже всі сучасні BIOS використовують це, і майже всі сучасні процесори x86 мають офіційну підтримку з цієї причини.
Yuhong Bao

7

Коли процесор виходить із скидання, кеш вимикається. BIOS - це те, що спочатку налаштовує та очищає кеш. Так що ні, ви не можете запустити його RAM-менше, оскільки немає оперативної пам’яті, яка б спочатку завантажувала річ.


1
Не вдалось ініціалізувати перші кілька інструкцій з ROM і ввімкнути кеш, не використовуючи оперативну пам’ять?
Марк Викуп

1
@Mark Ransom Сучасні процесори Intel (та багато інших процесорів) використовують Serial Flash для зберігання BIOS. Але він не може виконати код із послідовного спалаху. Натомість процесор копіює цей послідовний спалах в оперативну пам'ять і потім виконує його.

Га, моє невігластво показує - ви можете бачити, скільки років пройшло з мого дизайну обладнання. Отже, процесор копіює спалах автоматично перед виконанням першої інструкції? Це було б неприємною проблемою з куркою / яйцями, яку треба подолати.
Марк Ransom

@David Строго кажучи, це не "серійний" спалах, а "концентратор прошивки". Це відрізняється від "серійного" тим, що він передає одночасно 4 біти замість 1.
Majenko

1
@Mark Ransom Є багато процесорів / MCU / DSP, які завантажуватимуться через послідовне посилання (Serial Flash, RS-232, SPI тощо). Всі вони досягають цього, маючи невеликий ROM в процесорі, з якого він завантажується, і цей код буде завантажувати "реальний" код звідки завгодно. Запуск системи RAM-Less теоретично може бути можливим, якщо Intel модифікує цей код, щоб використовувати кеш замість зовнішньої ОЗУ. Але я сумніваюся, що Intel це зробить.

3

Я не знаю, наскільки це точно, але це мої думки:

Я не думаю, що ви можете отримати програмний доступ до кешу. Ви не можете гарантувати від однієї інструкції до наступної, що буде в кеші, і де він буде розташований, тому ви не можете надійно використовувати його як оперативну пам’ять, навіть якщо ви могли отримати доступ до нього безпосередньо.

Ви можете запустити x86 без оперативної пам’яті, але ви не зможете зробити це дуже корисним. Ви будете обмежені лише використанням внутрішніх регістрів для зберігання даних.


2
Протоколи заповнення та промивання кеш-лінії ретельно задокументовані та налаштовані в більшості процесорів, включаючи x86. Вміст кешеліну не вмикається випадковим чином між інструкціями. Дивіться мою відповідь про те, як ти зазвичай налаштовуєш його на поведінку як лінійну ОЗУ.
Bjorn Wesen

Я написав утиліту з шестигранним завантажувачем для клону 80x86, який би працював правильно без жодної оперативної пам'яті; IIRC, я реалізував однорівневий стек викликів, використовуючи SP для утримання зворотної адреси. Оскільки ПЗУ знаходився на тій же шині, що і ОЗУ, не було дуже ймовірно, що виникне проблема, яка дозволить ПЗУ працювати, коли оперативна пам'ять цього не зробила, але в такому випадку завантажувач міг діагностувати проблему. Для деяких інших мікросхем із шинами зовнішнього коду, але невеликою кількістю внутрішнього кодового простору, можливість роботи коду в системі зі зламаною шиною була корисним діагностичним інструментом.
supercat

@ Я можу помилитися, але оперативна пам'ять не для двійкового коду, а для читання і запису процесором?
Віктор Мехта
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.