# Лекция 15. Память

## Содержание

- [Лекция 15. Память](#лекция-15-память)
  - [Содержание](#содержание)
  - [Определение](#определение)
  - [Характеристики](#характеристики)
  - [Метод доступа к данным](#метод-доступа-к-данным)
  - [Иерархия памяти](#иерархия-памяти)
    - [Локальность по обращению](#локальность-по-обращению)
  - [Статическая и динамическая память](#статическая-и-динамическая-память)
    - [Регенерация DRAM](#регенерация-dram)
    - [Сравнение SRAM и DRAM](#сравнение-sram-и-dram)
  - [Структура микросхемы памяти](#структура-микросхемы-памяти)
  - [Блочная память](#блочная-память)
    - [Расслоение памяти](#расслоение-памяти)
  - [Способы доставки данных](#способы-доставки-данных)
  - [Энергонезависимая память](#энергонезависимая-память)
    - [Flash-память](#flash-память)
  - [Защита памяти](#защита-памяти)
  - [Основные материалы лекции](#основные-материалы-лекции)

## Определение

**Система памяти** — это функциональный блок микропроцессорной системы, предназначенный для временного или постоянного хранения данных и команд, состоящий из _запоминающего устройства_ и _устройства управления_.

## Характеристики

- **Ёмкость** — это количество битов данных, которые запоминающее устройство может хранить единовременно.
- **Единица пересылки** — это количество битов данных, передаваемых по линиям шины одновременно.
- **Быстродействие** состоит из нескольких характеристик:
  - _Время выборки данных_ — это время между началом формирования запроса к памяти и получения первых бит информации на выходах из памяти.
  - _Время хранения данных_
  - _Период обращения_ — это минимальное время, которое должно пройти между обращениями к памяти.
  - _Скорость передачи данных_

P.S. Стоит отметить, что не существует памяти, которая будет одновременно и ёмкой, и быстрой, и дешёвой в производстве. В любом случаем придётся жертвовать одним из трёх пунктов.

## Метод доступа к данным

- **Произвольный** — метод, который просто возвращает данные по указанному адресу (RAM — Randoom Access Memory).
- **Последовательный** — метод, при котором перед получением данных нужно прочитать все ячейки памяти, находящиеся до нужного адреса (видеокассета).
- **Прямой** — это метод при котором поиск макроячейки осуществляется произвольным методом, а внутри макроячейки осуществляется последовательный поиск нужной ячейки.
- **Ассоциативный** — это метод, при котором поиск осуществляется по тегам (Кэш-память).

## Иерархия памяти

  С течением времени производительность процессора увеличивалась в разы быстрее чем производительность памяти, вследствие чего память отделилась от процессора и стала отдельным блоком. Из-за этого появилась **иерархия памяти** (см. рис. 1). Память в компьютере состоит из нескольких уровней, которые условно разделены на две части: внутренняя и внешняя. Внутренняя нужна для функционирования системы, а внешняя для хранения больших данных, которые могут быть использованы процессором не так часто.

![../.pic/Lectures/15.%20Memory/fig_01.jpg](../.pic/Lectures/15.%20Memory/fig_01.jpg)

*Рис. 1. Иерархия памяти.*

В иерархии памяти можно выделить несколько зависимостей (см. рис. 2):

- Чем ближе часть памяти к процессору, тем меньше у неё ёмкость и тем она быстрее работает.
- Чем ближе часть памяти к процессору, тем чаще тот к ней обращается.
- Чем дальше от процессора, тем дешевле единица памяти. Т.е. гигабайт магнитной ленты стоит во много раз дешевле гигабайта кэш-памяти.

![../.pic/Lectures/15.%20Memory/fig_02.jpg](../.pic/Lectures/15.%20Memory/fig_02.jpg)

*Рис. 2. Зависимости в иерархии памяти.*

### Локальность по обращению

Обращения к памяти обладают временной и пространственной локальностью:

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

**Пространственная локальность** — это понятие, отражающее закономерность обращений программ к памяти и, с высокой вероятностью, проявляющееся в использовании в ближайшем будущем данных, находящихся по соседним адресам.

Именно из-за этих понятий 90% времени работы программы связано с доступом к 10% адресного пространства этой программы. Если 10% адресного пространства поместить на быстродействующую память (Например кэш-паять), то 90% времени процессор будет работать с памятью на высокой скорости.
Поэтому и существует иерархия памяти, которая помогает обходить проблему с быстротой, ёмкостью и дешевизной отдельных уровней памяти. Т.е. если взять быструю, маленькую и дешёвую кэш-память и медленную, большую и дешёвую оперативную память, то получится иерархия памяти, обладающая быстротой, ёмкостью и дешевизной. Это и есть главная причина возникновения иерархии.

## Статическая и динамическая память

**Статическая память** (SRAM) — это память, сделанная из транзисторов (см. рис. 3). Адрес ячейки подаётся на `address decoder`, с помощью которого определяется с какой ячейки считывать/записывать данные. На `drivers` подаются данные, которые будут использованы для записи. На выходе стоят усилители сигнала — `Sense amplifiers`. Обычно из статической памяти делается кэш-память.

![../.pic/Lectures/15.%20Memory/fig_03.jpg](../.pic/Lectures/15.%20Memory/fig_03.jpg)

*Рис. 3. Статическая память.*

Рассмотрим теперь отдельную ячейку памяти (см. рис. 4). Ячейка статической памяти состоит из двух инверторов, которые в свою очередь состоят из двух транзисторов (Например `М1` и `М2`). Эти два инвертора подключены так, что выход первого соединён со входом второго, а выход второго со входом первого. Таким образом, они образуют бистабильную ячейку. Также существуют транзисторы `M5` и `M6`, которые являются ключами, позволяющие положить в эту ячейку либо 0, либо 1. Итого для организации одной статической ячейки памяти требуется 6 транзисторов.

![../.pic/Lectures/15.%20Memory/fig_04.jpg](../.pic/Lectures/15.%20Memory/fig_04.jpg)

*Рис. 4. Ячейка статической памяти.*

**Динамическая память** (DRAM) — это память, состоящая из конденсаторов (см. рис. 5). Обычно из статической памяти делается оперативная память.

Ячейка динамической памяти (красный прямоугольник) состоит из одного конденсатора и одного транзистора, являющегося ключом. Если конденсатор заряжен, то в ячейке хранится 1, если разряжен — 0.

![../.pic/Lectures/15.%20Memory/fig_05.jpg](../.pic/Lectures/15.%20Memory/fig_05.jpg)

*Рис. 5. Динамическая память.*

### Регенерация DRAM

Ввиду малых размеров конденсатора (а значит и его ёмкости), записанная на нем информация хранится крайне недолго — буквально сотые, а то тысячные доли секунды. Причина тому — саморазряд конденсатора. Для борьбы с "забывчивостью" памяти прибегают к ее **регенерации** — периодическому считыванию ячеек с последующей перезаписью. Во время регенерации все процессы, связанные с работой с памятью, останавливаются.

### Сравнение SRAM и DRAM

| Критерий                                  | SRAM                                           | DRAM                                            |
|:------------------------------------------|:-----------------------------------------------|:------------------------------------------------|
| Доступ к ячейки памяти                    | В любой момент времени                         | Недоступна во время регенерации                 |
| Кол-во элементов для одной ячейки памяти  | 6-8 элементов                                  | 2 элемента                                      |
| Стоимость кб памяти                       | Высокая стоимость                              | Низкая стоимость                                |
| Стабильность                              | Произвольное содержимое памяти после включения | Данные обнуляются после выключения |
| Скорость работы                           | 10-50 нс.                                      | До 100 нс.                                      |
| Применение                                | Кэш-память                                     | Оперативная память                              |

## Структура микросхемы памяти

Рассмотрим структуру устройства микросхемы памяти (см. рис. 6). На вход подаётся адрес ячейки A<sub>m</sub>...A<sub>0</sub>. С помощью `дешифратора адреса столбца` и `дешифратора адреса строки` выделяется нужная ячейка памяти. С помощью `усилителя считывания` на выход подаётся информация с нужной ячейки памяти, которая в дальнейшем идёт на процессор. Также в схеме присутствует устройство `синхронизации и управления`, которое отвечает за корректную работу всех элементов схемы.

![../.pic/Lectures/15.%20Memory/fig_06.jpg](../.pic/Lectures/15.%20Memory/fig_06.jpg)

*Рис. 6. Структура микросхемы памяти.*

## Блочная память

Иногда не удаётся сделать память единым блоком, и для увеличения адресного пространства применяется **блочную память** (см. рис. 7). В данной схеме банк памяти может хранить только семибитные адреса, а для получения девятибитного адресного пространства надо объединить четыре таких банка. Для управления ними используется `дешифратор номера банка`, которому на вход подаётся два старших бита адреса, а остальные младшие 7 бит идут сразу на вса банки. В результате на `шину данных` придёт информация из нужной ячейки.

![../.pic/Lectures/15.%20Memory/fig_07.jpg](../.pic/Lectures/15.%20Memory/fig_07.jpg)

*Рис. 7. Блочная память.*

### Расслоение памяти

У схемы блочной памяти, рассмотренной в прошлом примере, есть недостаток: если обращения идут к соседним ячейкам памяти, что происходит довольно часто из-за [пространственной локальности](#локальность-по-обращению), то обработка этих обращений будет осуществляться тоже последовательно. Эта проблема решается использованием **расслоения памяти** (см. рис. 8), т.е. соседние адреса будут находиться в разных банках памяти, вследствие чего запросы к соседним ячейкам памяти будут обрабатываться параллельно.

![../.pic/Lectures/15.%20Memory/fig_08.jpg](../.pic/Lectures/15.%20Memory/fig_08.jpg)

*Рис. 8. Расслоение память.*

## Способы доставки данных

- Последовательный режим (flow through mode)
- Регистровый (register to latch)
- Быстрый постраничный (fast page mode)
- Пакетный (burst mode)
- Конвейерный (pipelined mode)
- Метод удвоенной скорости (double data rate)

Стоит отметить, что все современные компьютеры используют метод удвоенной скорости.

## Энергонезависимая память

- Энергонезависимая память сохраняет свое состояние даже при отключении питания
  - _ROM_: программируется на этапе производства
  - Программируемая ROM (_PROM_): может быть запрограммирована пользователем один раз
  - Стираемая PROM (_EPROM_): может быть стерта (УФ, рентген)
  - Электрически стираемая PROM (_EEPROM_): стирание происходит через подачу электрического сигнала
  - _Flash-память_: EEPROM с частичной возможностью стирания (по секторам)
- Сфера применения энергонезависимой памяти
  - Встраиваемые программы размещаются в ROM (BIOS, контроллеры дисков, сетевых и графических адаптеров, аппаратно-криптографические средства,…)
  - Твердотельные накопители (SSD)
  - Кеш в обычных дисковых накопителях

### Flash-память

Рассмотрим устройство ячейки flash-памяти (см. рис. 9). Она очень похожа на транзистор, за исключением наличия `плавающего затвора`, который находится внутри изолятора. Если подать большое напряжение на вход, то некоторые электроны "перепрыгнут" на плавающий затвор. Чем больше напряжение подаём, тем больше электронов будет перепрыгивать на этот затвор. С помощью этого можно задать, несколько уровней заряженности плавающего затвора, тем самым уже можно закодировать несколько бит информации (Например для 2 битов информации потребуется 4 уровня заряженности). Есть один минус у этого: чем больше уровней, тем ниже надёжность этой памяти.

![../.pic/Lectures/15.%20Memory/fig_09.jpg](../.pic/Lectures/15.%20Memory/fig_09.jpg)

*Рис. 9. Flash-память.*

## Защита памяти

Некоторые системы требуют повышенную надёжность для памяти (например, система бортового управления самолёта). Рассмотрим пример подобной схемы (см. рис. 10). На вход подаётся `M` бит входных данных. Они записываются в память и (одновременно с этим) преобразуются с помощью блока `F` (например, хэшируется) в `K` бит, которые тоже записывается в эту память. Когда исходная информация возвращается из памяти, её снова преобразуют по тому же алгоритму и сравнивают с результатом исходного преобразования: если те совпадают, то информация подаётся на выход, если нет, то выдаётся сигнал об ошибке. В некоторых схемах, этих избыточных `K` бит данных даже достаточно, чтобы исправить некоторое количество битых бит в исходных `M` бит данных.

![../.pic/Lectures/15.%20Memory/fig_10.jpg](../.pic/Lectures/15.%20Memory/fig_10.jpg)

*Рис. 10. Память с повышенной надёжностью.*

## Основные материалы лекции

1. [Ссылка](https://youtu.be/PBZITnGVdxI?si=EsTtU_rA7ouSCfgP) на видеозапись лекции
