Memory (computing)

Материал из Dwarf Fortress Wiki
Перейти к навигацииПерейти к поиску

Память используется для сложения чисел и состояний в дварфийской компьютерной системе. Обычно используется бинарная память, но это не обязательно. Здесь показаны различные способы создания клетки памяти, в зависимости от того, что вы используете, будь то механическую логику, жидкостную логику, логику существ, или вагонеточную логику. С бинарной памятью, каждая клетка будет иметь два состояния — 0 и 1, или же ложь и истина.

Триггеры против защёлок

Наиболее базовая характеристика памяти в Dwarf Fortress заключается в том, что что она действует как разделитель сигналов: даётся серия on-off сигнальных циклов, и выходит серией переменных on или off сигналов. Память, действующая по такой, и только такой, схеме, работает как триггер: каждый раз вы воздействуете на ячейку памяти, она меняет состояние. Такая память идеально подходит для таких устройств, как счетчики. Тем не менее, обычно хочется иметь возможность непосредственно изменять состояние памяти вместо того, чтобы переключать его, т. е. писать либо истину или ложь в память самому, без знания текущего состояния памяти. Это можно описать таблицей, в которой значение памяти возвращается обратно в себя:

Вход Состояние защёлок Выход Новое состояние защёлок
0 0 ничего 0
0 1 off 0
1 0 on 1
1 1 ничего 1

Производительность

К счастью, системы памяти в игры очень хорошо сохраняют своё значения (в отсутствие каких-либо троллей), но они по-прежнему страдают от проблем с задержками и длительными рефрактерными периодами. Задержка относится к периоду времени, в течение которого будет зарегистрировано изменение значения, а рефрактерный период относится к периоду после записи в память, в течение которого невозможно надежно записать в нее второй раз. Из-за задержек, связанных с нажимными плитами, задержка и рефрактерный период для ячейки памяти часто зависят от того, в какое состояние осуществляется переход памяти. Например, механическая гибридная ячейка из примера ниже почти не имеет задержки, когда в неё записана 1, но когда в ней записан 0, задержка составляет около 100 тактов.

В некоторых схемах простоту или потребность в материалах можно получить увеличением затрат на производительность.

Жидкостная логика

Простые защелки с жидкостной логикой полагаются на бесконечный источник и бесконечный сток, сохраняя информацию в виде присутствия или отсутствия воды в определенном месте.

~X^X~

В этой конструкции вода течет из бесконечного источника ~ через выходную нажимную пластину ^ в сторону бесконечного стока ~. Его поток контролируется двумя шлюзами, X и X, связанными с двумя отдельными входами. Когда X открыт, а X закрыт, вода покроет ^ и остается так независимо от состояния X.

Если X открыт, а X закрыт, вода уйдет из ^ и тайл останется пустым до тех пор, пока X не откроется снова.

Эта конструкция имеет относительно низкую скорость работы из-за задержки в 100 тиков, связанной с шлюзами. Замена шлюзов на двери, не имеющие задержки, значительно ускоряет реакцию триггера-защёлки, но общая производительность все равно ограничена периодом сброса нажимных пластин. При достаточно тщательном проектировании и достаточном давлении воды задержка при записи в значение истины может приближаться к 10, а задержка записи в значение ложь — около 110.

Логика существ

     
p¢^¢¢^¢p
     

В этой схеме существо, помещенное посередине, ищет путь p, но ограничено люками ¢ и ¢, каждый из которых связан с нажимной пластиной ^ того же цвета. Когда дверь + открыта, существо может переместиться влево (ложь) ^, а когда дверь ^ + открыта, существо может двигаться вправо (истина) ^, таким образом выводя сигнал на всё, что связано с этой нажимной пластиной. Это пример памяти, для которой можно записывать определенное состояние, а не просто переключать его, что позволяет упростить проектирование некоторых систем. Также обратите внимание, что вместо записи по одному сигналу включения или выключения, схема зависит от цикла включения-выключения.

Эта конструкция имеет довольно хорошую задержку для схемы логики существ, в результате чего сигналы включения появляются примерно через 40 тактов после записи, а сигналы выключения — примерно через 150 тактов после записи. Рефрактерный период составляет 110 тиков, что соответствует времени, необходимому для закрытия люков.

Механическая логика

Редуктор может функционировать сам по себе как ячейка памяти, будучи либо активным, либо отключенным. Однако некоторые сложные применения предполагают использование гибридной механико-жидкостной памяти.

z+2   
 %% 
z+1   
 %%^
z+0
~

В этом проекте два насосных массива с отдельным питанием: %% и % % располагаются друг над другом: нижний перемещает вправо, а верхний перемещает влево. Когда вода ~ лежит в самой правой ячейке (истина), она активирует нажимную пластину ^. Чтобы записать в память значение истины, активируется нижний редуктор , активируя нижний насос, а для записи значения "ложь" активируется верхний редуктор и массив насосов. Как и описанная выше память на логике существ, эта ячейка может быть записана как истинная или ложная, и зависит от цикла включения-выключения в качестве входных данных.

Эта конструкция имеет очень хорошую задержку (от почти нулевой для записи как истина до 100 тиков для записи как ложь) и не имеет реального рефрактерного периода — запись может быть выполнена сразу после предыдущей записи, хотя это зависит от завершения предыдущего сигнал записи (получение сигнала off) перед повторной записью.

Память и преобразование энергии в сигнал

Отличить память от преобразования энергии в сигнал может быть сложно. Благодаря обратной связи устройства, работающие по принципу "энергия-сигнал", часто могут быть преобразованы в ячейки памяти, а устройства памяти с питанием могут быть адаптированы для преобразования "энергия-сигнал". До появления вагонеток наиболее распространенное устройство передачи энергии в сигнал очень напоминало ячейку памяти, описанную выше. Однако существует большая разница между памятью и преобразователем энергии в сигнал. В то время как конструкции памяти получают циклические сигналы включения-выключения и в ответ выдают дискретные сигналы "включения" или "выключения", преобразователи преобразуют один тип двоичной информации (включение/выключение энергии) в другой (включение/выключение сигнала). То есть сигнальное устройство, которое получает, а затем теряет питание, должно возвращать полный цикл сигнала включения-выключения.

Логика вагонеток

Существует множество способов хранения информации в вагонетках. Некоторые конструкции памяти используют движение или его отсутствие; другие используют просто положение вагонетки. В продвинутых конструкциях можно использовать вес или направление движения вагонетки. Следующая конструкция вагонетки с электроприводом, разработанная пользователем Bloodbeard, представляет собой самую маленькую схему памяти, известную в настоящее время дварфийскому роду:

       Легенда:            
 O     O Стена             
      Медная вагонетка  
       Железная вагонетка
      Редукторы        
 O      Роллеры           
       ^ Нажимная плита    
 O      Вагонеточные пути 
       Конец пути      
 ^                         
                         
 O                         
                           
 O                         
                         
                          
                         
 O                         
                           

На диаграмме вверху показан слой вагонетки, посередине слой роллеров/предметов обстановки и, наконец, слой рельсов внизу. Когда активируется узел северного редуктора, приводящий в движение северный роллер, тяжелая вагонетка (в данном примере медная) толкается на юг. Это толкает более легкую вагонетку (здесь железную) на юг и запускает нажимную пластину, которая настроена так, чтобы сигнализировать только о весе медной вагонетки, а не о весе более легкой железной вагонетки. При включении южного редуктора ситуация обратная. Железная вагонетка прижимается к нажимной пластине, и подается сигнал "выключено".

Адресация памяти

В сложных проектах может возникнуть желание использовать ячейку памяти абстрактно — для представления какого-то количества различных значений. Чтобы использовать несколько таких абстрактных ячеек, необходимо точно указать, из какой ячейки памяти вы хотите читать или писать в любой данный момент времени.

Это проще всего в механической логике. Сетка редукторов может представлять строки и столбцы памяти, и, отключив механизмы управления для всех ячеек, кроме ячейки, которая находится на пересечении этой конкретной строки/столбца, можно легко обратиться к конкретной ячейке. Строгая жидкостная логика может дать нечто подобное, через контроль поступления воды в ячейки памяти, хотя это требует длительных задержек. В логике существ можно использовать дополнительные двери, чтобы ограничить запись в любые ячейки, на которые нет ссылок.

Альтернативный дизайн

Поскольку большая часть памяти используется для конкретного приложения, не существует единственного лучшего решения. Нередко можно увидеть функциональные возможности, встроенные в схемы памяти — простой счетчик, который имеет свою собственную память. Альтернативные конструкции важны, когда запись в память необходимо производить различными способами (переключение или установка в определенное значение) или когда задержка и рефрактерный период не важны по сравнению с требованиями к ресурсам или пространству.