Инструменты пользователя

Инструменты сайта


ram

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
ram [2026/10/11 18:34] – geckoram [2026/10/23 17:55] (текущий) – gecko
Строка 13: Строка 13:
 При доступе через KUSEG и KSEG0 процессор использует сквозную очередь записи глубиной 4 слова, что позволяет снизить нагрузку на шину. Данные уходят в очередь, и процессор сразу продолжает выполнять следующие инструкции, не дожидаясь, пока шина физически осуществит запись. Для портов оборудования это критично: команда может выполниться позже, чем CPU начнет выполнять следующую. Поэтому для работы с портами ввода/вывода нужно либо обращаться через KSEG1 (в этом случае процессор будет каждый раз ждать завершения записи), либо грамотно расставлять слоты задержки. При доступе через KUSEG и KSEG0 процессор использует сквозную очередь записи глубиной 4 слова, что позволяет снизить нагрузку на шину. Данные уходят в очередь, и процессор сразу продолжает выполнять следующие инструкции, не дожидаясь, пока шина физически осуществит запись. Для портов оборудования это критично: команда может выполниться позже, чем CPU начнет выполнять следующую. Поэтому для работы с портами ввода/вывода нужно либо обращаться через KSEG1 (в этом случае процессор будет каждый раз ждать завершения записи), либо грамотно расставлять слоты задержки.
  
-Заметим, что большинство SDK, включая библиотеки PsyQ, используют KUSEG для доступа к GP0/GP1, так как это особый случай. [[GPU]] работает асинхронно и имеет собственную аппаратную очередь команд. Когда процессор отправляет команды, они не выполняются мгновенно, а заносятся в очередь, и было бы неэффективно заставлять процессор ждать завершения записи каждого слова - пока шина пишет одно слово, CPU готовит следующее. Поскольку порт GP0 работает исключительно на запись, здесь не возникает классической проблемы read-after-write hazard, когда CPU записал значение в порт и тут же попытался его прочитать, получив старое значение из-за задержки шины.+Заметим, что большинство SDK используют KUSEG для доступа к GP0/GP1, так как это особый случай. [[GPU]] работает асинхронно и имеет собственную аппаратную очередь команд. Когда процессор отправляет команды, они не выполняются мгновенно, а заносятся в очередь, и было бы неэффективно заставлять процессор ждать завершения записи каждого слова - пока шина пишет одно слово, CPU готовит следующее. Поскольку порт GP0 работает на запись, здесь не возникает классической проблемы read-after-write hazard, когда CPU записал значение в порт и тут же попытался его прочитать, получив старое значение из-за задержки шины.
  
 В пользовательском режиме обращение через KSEG0 или KSEG1 вызовет исключение шины. BIOS переключает CPU в режим ядра при старте, и игры обычно его не отключают, поэтому практической разницы между доступом через KUSEG и KSEG0 нет. Обращение к любому адресу KSEG2, отличному от 0xFFFE0130, также вызовет исключение шины. В пользовательском режиме обращение через KSEG0 или KSEG1 вызовет исключение шины. BIOS переключает CPU в режим ядра при старте, и игры обычно его не отключают, поэтому практической разницы между доступом через KUSEG и KSEG0 нет. Обращение к любому адресу KSEG2, отличному от 0xFFFE0130, также вызовет исключение шины.
Строка 19: Строка 19:
 Исполняемый код лучше всего адресовать только через KUSEG. Исполняемый код лучше всего адресовать только через KUSEG.
  
-===== Маппинг памяти =====+===== Карта распределения памяти =====
  
 <code> <code>
ram.1791743677.txt.gz · Последнее изменение: — gecko

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC0 1.0 Universal
CC0 1.0 Universal Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki