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

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


ram

Это старая версия документа!


RAM

Оперативная память PlayStation. Имеет объем в 2 MiB.

Пространство адресов 32-битное и отображено на несколько сегментов с разными свойствами:

  • KUSEG - 0x00000000..0x7FFFFFFF - сегмент пользовательского режима (user mode), кэшируемый доступ;
  • KSEG0 - 0x80000000..0x9FFFFFFF - сегмент режима ядра (kernel mode), кэшируемый доступ;
  • KSEG1 - 0xA0000000..0xBFFFFFFF - сегмент режима ядра (kernel mode), некэшируемый доступ;
  • KSEG2 - 0xC0000000..0xFFFFFFFF - виртуальная память. В PlayStation нет виртуальной памяти, поэтому данный сегмент не применяется, за исключением адреса 0xFFFE0130, по которому находится регистр контроля кэша.

Физически KUSEG/KSEG0/KSEG1 - это одна и та же память, разница лишь в том, как процессор интерпретирует доступ к ней. Различие между кэшированным и некэшированным доступом имеет значение для кэша инструкций (I-кэш) и очереди записи: доступ к памяти через KUSEG и KSEG0 использует как I-кэш, так и очередь записи, тогда как доступ к памяти через KSEG1 не использует ни то, ни другое.

При доступе через KUSEG и KSEG0 процессор использует сквозную очередь записи глубиной 4 слова, что позволяет снизить нагрузку на шину. Данные уходят в очередь, и процессор сразу продолжает выполнять следующие инструкции, не дожидаясь, пока шина физически осуществит запись. Для портов оборудования это критично: команда может выполниться позже, чем CPU начнет выполнять следующую. Поэтому для работы с портами ввода/вывода нужно либо обращаться через KSEG1 (в этом случае процессор будет каждый раз ждать завершения записи), либо грамотно расставлять слоты задержки.

Заметим, что большинство SDK, включая библиотеки PsyQ, используют KUSEG для доступа к GP0/GP1, так как это особый случай. GPU работает асинхронно и имеет собственную аппаратную очередь команд. Когда процессор отправляет команды, они не выполняются мгновенно, а заносятся в очередь, и было бы неэффективно заставлять процессор ждать завершения записи каждого слова - пока шина пишет одно слово, CPU готовит следующее. Поскольку порт GP0 работает исключительно на запись, здесь не возникает классической проблемы read-after-write hazard, когда CPU записал значение в порт и тут же попытался его прочитать, получив старое значение из-за задержки шины.

В пользовательском режиме обращение через KSEG0 или KSEG1 вызовет исключение шины. BIOS переключает CPU в режим ядра при старте, и игры обычно его не отключают, поэтому практической разницы между доступом через KUSEG и KSEG0 нет. Обращение к любому адресу KSEG2, отличному от 0xFFFE0130, также вызовет исключение шины.

Исполняемый код лучше всего адресовать только через KUSEG.

Карта распределения памяти

KUSEG      KSEG0      KSEG1
0x00000000 0x80000000 0xA0000000 - 2048 KiB - RAM. Первые 64 KiB зарезервированы под данные BIOS (kernel workspace)
0x1F000000 0x9F000000 0xBF000000 - 8192 KiB - Expansion Region 1
0x1F800000 0x9F800000 --         - 1 KiB    - Scratchpad
0x1F801000 0x9F801000 0xBF801000 - 8 KiB    - Порты ввода/вывода (DMA, GPU, MDEC, SPU, CD-ROM и др.)
0x1F802000 0x9F802000 0xBF802000 - 8 KiB    - Expansion Region 2
0x1FA00000 0x9FA00000 0xBFA00000 - 2048 KiB - Expansion Region 3
0x1FC00000 0x9FC00000 0xBFC00000 - 512 KiB  - BIOS ROM

KSEG2
0xFFFE0130                       - регистр контроля кэша

VRAM, звуковая память, память контроллера CD-ROM, внешние карты памяти (EEPROM) не имеют отображения в шине CPU. Обращение к ним происходит исключительно через порты ввода/вывода.

Scratchpad

Процессоры MIPS обычно имеют кэш данных (D-кэш), но в PSX вместо него используется так называемый Scratchpad, отображенный в область памяти 0x1F800000..0x1F8003FF в KUSEG. Он используется как быстрая память и предназначен для предоставления программам гибкой системы кэширования. Ни функции BIOS, ни библиотеки Sony не используют Scratchpad, поэтому он полностью во власти игры. Его обычно используют для хранения промежуточных данных в разного рода вычислениях, где важна производительность чтения/записи.

ram.1791743736.txt.gz · Последнее изменение: — gecko

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