Регенерация памяти
Динамическая память любого типа, в отличие от статической, даже при подаче питающих напряжений не обладает способностью хранить свою информацию сколь угодно долго. Состояние элементарной ячейки динамической памяти определяется наличием или отсутствием заряда на конденсаторе, и этот заряд подвержен утечке. Поэтому для сохранения данных в динамической памяти ее ячейки необходимо периодически подзаряжать, что и составляет суть процесса регенерации. Как это происходит, чуть ниже.
При выполнении операции чтения регенерация выполняется автоматически. Полученные на усилителе сигнала данные тут же записываются обратно. Считается, что такой алгоритм позволяет уменьшить число требуемых регенераций и увеличить быстродействие. Но это совершенно не так! Считывается ли информация из памяти или нет, "частота" регенерации при этом не меняется. Она либо вообще не регулируется (нет соответствующих опций в "BIOS Setup"), либо является строго фиксированной после соответствующиих установок.
Возможны три различных метода регенерации данных.
Регенерация одним RAS (RAS Only Refresh - ROR). Этот метод использовался еще в первых микросхемах DRAM. Адрес регенерируемой строки передается на шину адреса и выдается сигнал RAS (точно так же, как при чтении или записи). При этом выбирается строка ячеек, и данные из них поступают на внутренние цепи микросхемы, после чего записываются обратно. Так как далее сигнал CAS не следует, цикл чтения/записи не начинается. Затем передается адрес следующей строки и так далее, пока не будет пройдена вся матрица памяти, после чего цикл регенерации повторяется. К недостаткам этого метода можно отнести то, что занимается шина адреса, и в момент регенерации блокируется доступ к другим подсистемам компьютера.
CAS перед RAS (CAS Before RAS - CBR) - стандартный метод регенерации. При нормальном цикле чтения/записи сигнал RAS всегда приходит первым, за ним следует CAS. Если же CAS приходит раньше RAS, то начинается специальный цикл регенерации - CBR. При этом адрес строки не передается, а микросхема использует свой внутренний счетчик, содержимое которого увеличивается на 1 при каждом CBR-цикле (т.н. инкрементирование адреса строки). Этот режим позволяет регенерировать память, не занимая шину адреса, что, безусловно, более экономично.
Автоматическая регенерация памяти (Self Refresh - SR, или саморегенерация). Этот метод обычно используется в режиме энергосбережения, когда система переходит в состояние "сна" ("suspend"), и тактовый генератор перестает работать. В таком состоянии обновление памяти по вышеописанным методам невозможно (попросту отсутствуют источники сигналов), и микросхема памяти выполняет регенерацию самостоятельно. В ней запускается свой собственный генератор, который тактирует внутренние цепи регенерации. Такая технология работы памяти была внедрена с появлением EDO DRAM. Необходимо отметить, что в режиме "сна" память потребляет очень малый ток.
В классической реализации PC AT запросы на регенерацию DRAM генерировал канал 1 системного таймера 8254. К его выходу подключен триггер, работающий в счетном режиме и меняющий свое состояние на противоположное при каждом запросе. Состояние этого триггера можно программно считывать через бит 4 порта 61h. Проверка Refresh Toggle заключалась в проверке того факта, что этот триггер переключается с заданной частотой. Но со временем стали применяться другие алгоритмы регенерации памяти (что и изложено выше), и несмотря на то, что Refresh Toggle сохраняется для совместимости, по нему уже нельзя проверить формирование запросов на регенерацию. Циклы регенерации выполняет входящий в состав чипсета контроллер регенерации, который для выполнения своей задачи должен получать управление магистралью каждые 15,6 мкс. Во время цикла регенерации производится чтение одной из N ячеек памяти.