Разобраться как были устроены исторические типы памяти интересно просто чтобы в очередной раз восхититься, насколько изощренным и изворотливым может быть человеческий разум, особенно при нехватке ресурсов.

Механическая память (1840…1940).

В аналитической машине Бэббиджа (~1840, хоть она и не была построена, но формально, как показала её поздняя реплика, была работоспособна) и машинах Z1, Z2 (1938..1940) Цузе память была механической.

Фиг.1 устройство цилиндров для хранения данных в машине Бэббиджа (отсюда)
Фиг.1 устройство цилиндров для хранения данных в машине Бэббиджа (отсюда)

У Бэббиджа применялось десятичное счисление для хранения чисел, поэтому память состояла из цилиндров по 50 колёс с делениями, плюс дополнительное колесо под знак. Как и в Паскалине, отрицательные числа хранились в виде дополнения до 10,. Чтобы прочитать значение разряда, колесо проворачивали до упора на нуле и значение  передавалось с помощью зубчатой рейки (до 5 метров длиной) на такой же столбик в сумматоре - аналог регистра в современных процессорах.

Фиг.2 копирование числа в машине Бэббиджа (отсюда)
Фиг.2 копирование числа в машине Бэббиджа (отсюда)

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

Фиг.3 иллюстрация из патента Цузе, демонстрирующая работу механической памяти
Фиг.3 иллюстрация из патента Цузе, демонстрирующая работу механической памяти

Память на реле (1941)

Электромагнитное реле появилось в 1830..1832 гг., его изобретателем является Павел Львович Шиллинг. Независимо от него в 1835 г. реле изобрёл Джозеф Генри (Joseph Henry), оба варианта были использованы при разработке телеграфных аппаратов. Слово реле происходит от французского “relais” т.е. (в то время) смена лошадей почтовыми экипажами. Изначально предназначением реле было усиление телеграфного сигнала, в дальнейшем их стали применять в качестве вентилей, по аналогии с запорной арматурой гидравлических систем.

Фиг.4 Схема работы реле, подача напряжения на соленоид приводит и к замыканию контактов и к размыканию, кому что нужно.
Фиг.4 Схема работы реле, подача напряжения на соленоид приводит и к замыканию контактов и к размыканию, кому что нужно.

Машины Цузе

В своих последующих машинах с Z3(1941) по Z11(1955) Конрад Цузе создавал хранилища данных на основе электромеханических реле.

Фиг.5 Реле-Память Z3 из патента.1941 г. (отсюда)
Фиг.5 Реле-Память Z3 из патента.1941 г. (отсюда)
Фиг.6 Конрад Цузе на фоне релейной памяти Z3 (отсюда)
Фиг.6 Конрад Цузе на фоне релейной памяти Z3 (отсюда)

Как видим, для хранения 64 22-разрядных двоичных чисел использовано около 2000 реле или 1.4 реле на разряд. Этого не хватит на триггеры, бистабильных реле (реле с защелкой, примерно как на автоматической ручке) тогда еще не было, по-видимому, это реле с петлёй обратной связи.

В обычном реле питание катушки и управляемые контакты не связаны электрически (гальванически развязаны), это позволяет, в частности, использовать реле как усилитель мощности. Собственно это и было их изначальное предназначение.

Но если гальваническая развязка не важна, петля обратной связи позволяет в случае срабатывания реле запитать катушку. Для отключения реле придётся разорвать петлю. Очевидным минусом является длительное потребление тока в состоянии, когда реле включено. Впрочем, вряд ли Цузе в тот момент заботило  избыточное потребление электричества.

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

Коротко упомянем некоторые другие проекты того времени.

Harvard Mark I

Работы велись в рамках проекта IBM Automatic Sequence Controlled Calculator (ASCC).
Проект был представлен в 1937 г., начат в 1939. Первые программы на нем были запущены в 1944. г.

В Mark I использована десятичная система счисления, работа велась с 23-разрядными десятичными числами с плавающей точкой, имелось хранилище на 72 таких числа (числа вводились вручную с помощью циферблатов). Программы вводились с перфоленты. Производительность - 3 сложения в секунду, умножение за 6 секунд и деление за 15. Общее количество реле - 3 500 штук.

В Mark I не было условных инструкций, не появились они и в Mark II (1947).
Дальнейшее развитие продолжилось уже на электронных компонентах.

Релейные машины Штибица.

Джордж Штибиц (George Robert Stibitz) начал работать (в Bell Labs) над своим компьютером в середине 1930-х годов, сумматор на реле он продемонстрировал еще в 1937 г. В 1940 он создал вычислитель для комплексных чисел, назвав его Bell-I, более универсальная машина Bell-V была построена в 1947 г., она могла умножать за секунду, делить за 2.2 секунды и состояла из 9 000 реле.

Фиг.7 Двоичный сумматор Штибица. (отсюда)
Фиг.7 Двоичный сумматор Штибица. (отсюда)

РВМ-1 Бессонова.

Релейная Вычислительная Машина-1 разрабатывалась в Институте теоретической и экспериментальной физики АН СССР под руководством Николая Ивановича Бессонова. О предварительных работах и прототипах мало что известно, РВМ-1 была построена в начале 1950-х, сдана в эксплуатацию в 1957 г. и проработала вплоть до 1965 г., Отмечалась ее исключительная надёжность, особенно по сравнению с ламповыми ЭВМ, которые уже вовсю развивались в то время. Машина содержала 5500 реле и демонстрировала производительность в 20 умножений в секунду.

Фиг.7 РВМ-1 (отсюда)
Фиг.7 РВМ-1 (отсюда)

Триггеры (1919)

Триггеры (или защелки, flip-flop) - это устройства, имеющие два стабильных состояния, которые можно менять внешним воздействием.

Идея триггера была впервые представлена (устные доклады, один из которых позднее опубликован в журнале “Радиотехник” №7, 1919) М.А. Бонч-Бруевичем в 1918, в самый разгар гражданской войны. В 1918 же году была подана заявка на патент (опубликован в 1920 г.)
У.Г. Экклзом и Ф.У. Джорданом.

Фиг.8 Схемы с использованием двух вакуумных триодов из патента (отсюда).
Фиг.8 Схемы с использованием двух вакуумных триодов из патента (отсюда).

Триггер - асинхронная схема, где выход с одних вентилей подаётся обратно на вход других, это существенно усложняет дело так как обратная связь распространяется и на переходные процессы. Для реализации минимального триггера, как мы видели, нужно только два вентиля, в более сложных случаях (чтобы исключить случайные срабатывания на выходах) может потребоваться 4, 6 или даже 8 вентилей. Так, на основе 8 вентилей возможно создать триггер, который позволяет одновременное чтение из него старого значения и запись нового.

В качестве вентилей можно использовать и вакуумные триоды и реле и, конечно, транзисторы. Все три варианта были реализованы по мере развития технологий.
На данный момент идея триггеров применяется в регистрах и так называемой SRAM - статической памяти, которая использует триггеры в качестве основы кэш-памяти процессоров.

К положительным сторонам SRAM относятся - высокая скорость и отсутствие необходимости постоянно её перезаписывать (как DRAM). Поэтому она и называется Static Random Access Memory. Минус - дороговизна, ведь один двоичный разряд требует 6..8 транзисторов, тогда как в случае DRAM - только одного.

Фиг.9 пример схемы реализации одного разряда SRAM
Фиг.9 пример схемы реализации одного разряда SRAM
Фиг.10 микрофотография микросхемы Intel 3101 - 64 битной СОЗУ (отсюда)
Фиг.10 микрофотография микросхемы Intel 3101 - 64 битной СОЗУ (отсюда)

Линии задержки (ртутные, 1945).

Линия задержки - прибор, который получает аналоговый сигнал и через расчетный промежуток времени отдаёт его обратно. Устройства такого рода использовались с 1920-х годов для задания формы сигналов в формирователях частоты.

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

Первым практически использовать для хранения сигналов акустические волны, распространяющиеся в среде, удалось Джону Эккерту (J. Presper Eckert) в середине 1940-х. Он использовал трубу, наполненную ртутью, на обоих концах которой были расположены пьезокристаллические трансдьюсеры (пара микрофон-динамик). Сигнал, излученный с одного конца, достигал второго, пере-излучался обратно и приходил назад с требуемой задержкой. И снова запускался в линию, это циклический процесс. Почему ртуть? Как ни странно, на тот момент это был самый простой в реализации вариант, экспериментировали, конечно, с разными материалами. В газах акустическая волна быстро рассеивается (скорость звука 200…500 м/с, ~1300 у водорода), в металлах также (3000..13000 м/с), возможно, подошли бы монокристаллы, но это слишком дорого и вряд ли было возможно в то время. Из жидкостей лучше всего подошла ртуть (~1500 м/с при 40℃), её еще пришлось термостатировать (поддерживать температуру) чтобы добиться нужных характеристик.

Фиг.11 Ртутная память EDSAC и один из разработчиков - Морис Вилкс (отсюда).
Фиг.11 Ртутная память EDSAC и один из разработчиков - Морис Вилкс (отсюда).

Когда Эккерта привлекли к работе над британским компьютером EDSAC, он применил навыки работы с акустическими сигналами для хранения информации. В конце удалось закодировать в акустической волне 560 двоичных разрядов (в одной ртутной трубке, всего их в EDSAC было 16).

Память на конденсаторах (1937).

Идея довольно очевидная, конденсатор находится в разряженном или заряженном состоянии, что можно использовать для хранения разряда. Проблема в том, что конденсатор имеет ток утечки, поэтому время от времени его надо перезаряжать. Зарядка происходит в два шага - сначала считывается значение, при этом конденсатор разряжается, если в нем был заряд, конденсатор заряжается заново.

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

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

Фиг.12 Работающая реплика компьютера Атанасова-Берри (отсюда)
Фиг.12 Работающая реплика компьютера Атанасова-Берри (отсюда)

Итого, 6 десятков 50-разрядных чисел, каждое из которых считывалось и перезаписывалось раз в секунду с помощью металлических щеток.

Не слишком надёжно и не слишком быстро. Неудивительно, что такой вариант не получил развития.

На Фиг.13 видим более поздний вариант памяти на конденсаторах (1953), уже с использованием полупроводниковых диодов. На один разряд уходит два на тот момент довольно дорогих диода (они разнонаправлены - для чтения и записи).

Фиг.13 Конденсаторная память с использованием диодов (отсюда)
Фиг.13 Конденсаторная память с использованием диодов (отсюда)

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

Современная DRAM (Dynamic Random Access Memory) также является памятью на перезаряжаемых конденсаторах, вариант с использованием одного полевого транзистора на каждый конденсатор появился в 1966 г. (Роберт Деннард, Robert Dennard). 

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

Конечно, вместо транзистора здесь можно использовать любой вентиль - и реле и ламповый триод, но с соответствующим ростом размеров и падением производительности.

Фиг.14 DRAM 4x4 (отсюда)
Фиг.14 DRAM 4x4 (отсюда)

Вцелом, идея оказалась весьма плодотворной.

Память на CRT (cathode ray tube, кинескоп), трубка Вильямса (1959)

Память на электронных трубках (кинескопах) тоже можно рассматривать как массив конденсаторов с перезарядкой. Попробуем разобраться.

В каждой электронной трубке есть источник электронов - разогретый катод в цилиндре Венельта (придуман Артуром Венельтом в 1902 г.).

Фиг.15 Цилиндр Венельта (отсюда)
Фиг.15 Цилиндр Венельта (отсюда)

Поскольку электроны имеют заряд, их можно магнитным полем сфокусировать в пучок. Магнитным же полем этим пучком можно в каких-то пределах управлять.

Фиг.16 Схема из патента Вильямса (1960) (отсюда)
Фиг.16 Схема из патента Вильямса (1960) (отсюда)

В данном случае управление заключается в направлении пучка на люминесцирующий (светящийся при попадании электронов) слой (57 на Фиг.16), где остаются светящиеся отметки, обычно в виде прямоугольной решетки. Так они находятся далеко друг от друга и не мешают общей работе. А еще на них можно буквально поглядеть.

Фиг.17 Фотография области памяти на трубке Вильямса (отсюда).
Фиг.17 Фотография области памяти на трубке Вильямса (отсюда).

Снаружи кинескопа напротив люминесцентного слоя расположена проводящая пластина. Эта пластина (11 на Фиг.16) вместе с люминесцентным слоем образуют конденсатор, когда пучок электронов попадает на мишень, в конденсаторе изменяется разность потенциалов и это можно измерить. По очереди, конечно.

Также важен эффект вторичного излучения электронов. Когда энергия электронов в пучке небольшая, они осаждаются на поверхности и быстро рассеиваются т.к. отталкиваются друг от друга. Но если их энергия велика, они как бы отскакивают от поверхности и при этом еще выбивают из нее дополнительные электроны, заряд в точке парадоксальным образом становится положительным, электроны оседают кольцом вокруг чтобы компенсировать заряд.

Если провести лучом линию с энергией достаточной для вторичной эмиссии, то выбитые электроны рекомбинируют с положительными зарядами в тех местах, где луч был ранее и заряд там возвращается к нейтральному состоянию (но начало линии продолжает светиться). Так и кодируются 0 и 1 - есть положительный заряд в точке или нет. Но как потом прочитать информацию? Ведь заряженная точка существует доли секунды, потом расплывается.

Да, память на конденсаторах недолговечна и требует постоянной перезаписи/обновления. Так и в этом случае. Если направить пучок электронов на положительно заряженное пятно, заряды рекомбинируют и на конденсаторе возникнет скачок разности потенциалов. В случае попадания пучка электронов на нейтральное пятно, скачок разности потенциалов в конденсаторе будет выглядеть совсем по другому, их нетрудно отличить. После того, как значение в точке прочитано (и уничтожено при этом), оно перезаписывается.

Кодирование в виде точки и линии (можно видеть на Фиг.17) очень удобно с точки зрения отладки, так , например, в компьютере R1 (Rice Computer, 1959) аппаратное слово имело размер 64 разряда, 1 из которых использовался для отладки работы самих трубок, которые были весьма ненадёжным хранилищем. Фактически, каждая 64-я трубка была CRT монитором, на котором можно было буквально подглядеть содержимое любой из соседних трубок. Т.к. содержимое рабочих трубок невозможно было разглядеть из-за пластины конденсатора, скоммутировав отладочный монитор, можно было увидеть на нем копию сигнала с любой из 63 соседок.

Стоит упомянуть вариант памяти на электронных трубках, где чтение происходило не вне самого кинескопа, с помощью решетки фотоэлементов, расположенных с внешней стороны трубки. Это так называемая Mellon optical memory т.к. разрабатывалась она (1951) в Университете Карнеги-Меллона. Распространения не получила из-за появления магнитной памяти.

Селектрон или трубка Райхмана (1950).

Это развитие идеи памяти на лучевых трубках.

Фиг.18 Селектрон (отсюда)
Фиг.18 Селектрон (отсюда)

При записи изменяется потенциал записывающей пластины (writing plate на Фиг.18), если надо записать 1 (или 0), то потенциал делают положительным и он ускоряет электроны так, что они становятся способными вызывать вторичную эмиссию на мишени.
Если записывается 0 (или 1), потенциал делают отрицательным и он тормозит электроны, вторичной эмиссии нет. 

При чтении в случае наличия положительного заряда на люминесцентном слое электроны сначала рекомбинируют с ним и попадают на датчик (сеточка signal out на Фиг.18) с опозданием по сравнению со случаем, когда мишень нейтральна.

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

Фиг.19 селектрон на 1024 разряда (отсюда)
Фиг.19 селектрон на 1024 разряда (отсюда)

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

Память на магнитных сердечниках (magnetic core memory, 1955).

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

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

Фиг.20 Память на 16 разрядов (отсюда).
Фиг.20 Память на 16 разрядов (отсюда).

Провода Xn и Yn на Фиг.20 это так называемые провода возбуждения. Сила тока, идущего через них подбирается так, что воздействия одного лишь провода недостаточно, чтобы перемагнитить кольцо. Но если ток течет по обоим проводам, кольцо перемагничивается. Таким образом можно управлять состоянием любого из колец на выбор. Провод S называется провод считывания (Sense). Он проходит через все кольца и в случае перемагничивания какого-либо из них, в проводе S возникает скачок тока. В идеале провод S расположен по оси кольца, провода XY - под 45°. Провод Z называется проводом запрета. Если ток в нем пустить в противоположном проводу Y направлении, он отменяет (компенсирует) его действие и перемагничивания не происходит.

Для чтения кольцо принудительно перемагничивается в состояние 1, при этом старое состояние кольца теряется. Если перемагничивания не произошло, значит там и так была 1, ничего делать не требуется. Но если в S зафиксирован скачок тока, там был 0 и его надо вернуть. Это можно сделать, запустив обратный ток, но координатных линий много, приделывать к каждой переключатель дорого. Технологически, проще после чтения (принудительной записи 1)  запустить принудительную запись 0, и отменять ее с помощью Z там, где нужно оставить 1.

Фиг.21 Память на магнитных сердечниках.
Фиг.21 Память на магнитных сердечниках.

Позднее функции линий Z и S объединили, результат можно увидеть на Фиг.21.

Изготовление такой памяти происходило следующим образом:
- ферритовые стержни спекались из порошка
- в стержнях высверливалось отверстие
- получившуюся ферритовую трубку распиливали на кольца
- через кольца вручную продевались провода

Хотя здесь присутствует ручной труд, это всё равно намного технологичнее и дешевле, если сравнивать, скажем, с изготовлением электронно-лучевых трубок. Неудивительно, что такая память массово выпускалась до начала 1970-х годов, когда появилась полупроводниковая DRAM.

Скорость работы данной памяти была достаточно высокой, от 6 мсек на момент появления до 0.6 мсек в начале 1970-х. Это превосходило все альтернативные варианты (кроме триггеров), поэтому память такого рода использовалась в качестве основной.

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

Магнитные барабаны и диски.

Впервые хранение информации, нанесённой магнитным способом на стальную проволоку, было описано в 1888 г. Оберлином Смитом (Oberlin Smith). В 1924 г. Курт Штилле (Kurt Stille) разработал диктофон, записывающий на стальную ленту.
В 1928 г. Фриц Флиумер (Fritz Pfleumer) догадался нанести оксид железа на бумажную полоску в качестве носителя сигнала.

В магнитных барабанах ферромагнетик равномерно нанесён на поверхность вращающегося цилиндра из немагнитного материала.

Фиг.22 виды записывающих головок (отсюда)
Фиг.22 виды записывающих головок (отсюда)

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

Фиг.23 устройство магнитного барабана, 1- привод, 2- барабан, 3-головки, 4-дорожки, 5-ось, 6-станина (отсюда)
Фиг.23 устройство магнитного барабана, 1- привод, 2- барабан, 3-головки, 4-дорожки, 5-ось, 6-станина (отсюда)

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

Фиг.24 схематическое устройство жесткого диска (отсюда)
Фиг.24 схематическое устройство жесткого диска (отсюда)

Магнитные диски (в том числе распространённые сегодня) - дальнейшее развитие технологии магнитных барабанов.

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

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

Фиг.25 Эволюция жестких дисков, шкала в дюймах (отсюда)
Фиг.25 Эволюция жестких дисков, шкала в дюймах (отсюда)

Flash память

Изобретена относительно недавно, в 1984 г. инженером Toshiba  Фудзи Масуоко.
В ее основе транзистор с так называемым “плавающим” затвором.

Фиг.26 транзистор с плавающим затвором (отсюда).
Фиг.26 транзистор с плавающим затвором (отсюда).

В обычном полевом транзисторе плавающий затвор и затвор управления - единое целое, между ними нет прослойки диэлектрика. Положительно заряженный (в случае npn полевого транзистора) затвор притягивает электроны из p слоя (p хоть и имеет дырочную проводимость, но электроны в нем имеются). Электроны скапливаются в области, обозначенной как “канал n-типа” на Фиг.26, вместе с затвором они образуют конденсатор. При этом возникает сплошная проводящая область n-типа от стока до истока - транзистор “открыт”. Если снять положительный заряд с затвора, электроны из проводящего канала расползаются обратно по p-области, транзистор “закрывается”.

Идея плавающего затвора - ввести дополнительный изолированный проводящий слой между затвором и p-областью. Если создать разность потенциалов между истоком и стоком, а также подать высокое положительное напряжение (~+15 В) на затвор, через n-канал потечет поток электронов, некоторые из которых смогут пробить слой изолятора и оказаться в “плавающей” части затвора. Причем, после снятия напряжения они там и останутся. Транзистор останется в вечно-закрытом состоянии. В обратной ситуации - высокое отрицательное напряжение на затворе, высокий ток между истоком и стоком, электроны из плавающей части затвора будут выдавлены в область n-канала и транзистор откроется до следующего пробоя. 

Это даже не пробой, в обычном смысле этого слова, разности потенциалов недостаточно для  пробития слоя диэлектрика, но т.к. этот слой очень тонкий (считанные нанометры), начинают работать квантовые эффекты и возникает туннелирование электронов, т.н. эффект Фаулера-Нордгейма

Каждый раз, когда происходит пробой (туннелирование), диэлектрик (тем не менее) деградирует, поэтому число циклов записи такого транзистора ограничено. В отличие от неограниченного числа чтений.

Итак, наличие избыточных электронов в плавающей части затвора будем считать логической единицей, их отсутствие - нулём. Как прочитать состояние транзистора?

При отсутствии избыточных электронов, мы имеем дело почти с обычным полевым транзистором - если подать напряжение на затвор (пусть +5 В), npn-транзистор должен открыться и между истоком и стоком потечет ток. Но при наличии избыточных электронов, понадобится большее напряжение (+10 В, пороговое напряжение открывает транзистор, но его еще недостаточно для изменения состояния плавающего затвора). Подав что-то среднее (+7.5 В, например, зондирующее напряжение) мы сможем протестировать состояние, не изменяя его.

CTF (Charge Trap Flash)

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

NAND & NOR

Раз уж речь идёт об энергонезависимой памяти, такой памяти должно быть много. Возникает проблема упаковки, чтения-записи. Возможны два базовых варианта планарной упаковки - их с некоторой натяжкой называют NOR и NAND. По порядку.

Фиг.27 NOR упаковка транзисторов с плавающим затвором (отсюда)
Фиг.27 NOR упаковка транзисторов с плавающим затвором (отсюда)

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

Для чтения:
- подаётся напряжение на выбранную линию битов
- и зондирующее на линию слов
- если напряжение на линии битов упало (транзистор открыт),
всё ушло на землю, значит это логическая единица
- в противном случае логический ноль

Результат равен обратному значению на линии битов, отсюда буква N в NOR, означающая отрицание. OR означает, что из всей линейки битов мы обращаемся к конкретному (не слишком интуитивно, но так сложилась терминология).

Фиг.28 NAND упаковка (отсюда)
Фиг.28 NAND упаковка (отсюда)

Как видим, все транзисторы в линии битов соединены последовательно и напряжение на линии битов может измениться только если откроются все транзисторы (отсюда AND в названии, N  означает то же что и в NOR).

С другой стороны, все биты одного слова могут считываться параллельно.
Чтение происходит так:

- подаётся напряжение на все линии битов слова
- и зондирующее напряжение на выбранную линию слов 
- а также пороговое напряжение на все остальные линии слов
- проверяются уровни на всех линиях битов 

При пороговом напряжении все транзисторы гарантированно откроются (но не перезапишутся) и результаты будут зависеть только от состояния транзисторов выбранной линии.

В схеме есть еще т.н. “выбор линии” с обычными полевыми транзисторами, это технологический способ отключить чтение данного блока.

Итак:
NOR проще, надёжней, можно достичь большей плотности
NAND быстрее за счет блочного чтения, все SSD диски устроены по этой топологии

MLC (Multi Level Cell)

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

Большая часть современных SSD дисков сделана по этой технологии, в один транзистор удаётся записывать до 4 разрядов данных.

Недостаток данной технологии - меньшая надёжность и ресурс.

3D NAND

NAND топология оказалась очень удобна для многослойного, непланарного выращивания. При данном подходе транзисторы одного слова формируются при последовательном напылении слоев с разными свойствами. На данный момент число таких слоев измеряется сотнями, значительная часть современных SSD накопителей создаётся по этой технологии.

ПЗУ (постоянное запоминающее устройство)

ПЗУ (ROM - Read Only Memory) - распространённое устройство в компьютерной технике. Основные особенности - оно только для чтения и оно энергонезависимое, т.е. при обесточивании не теряет содержимого. Физические носители могут быть самые разные, например, перфокарты или перфолента, скоммутированная матрица, CDROM (компакт-диск), …

Если говорить о более-менее современной электронике, то постоянную память различают по технологии изготовления.

  • ROM (Read Only Memory), изготовленное с нужной топологией без возможности изменения, например, микрокод встроен прямо в тело микропроцессоров, пример - Фиг.27

    Фиг.27 микрофотография, фрагмент ПЗУ микрокода процессора Intel 8086 (отсюда). Видны транзисторы в местах, соответствующих единицам и пропуски на месте нулей. Некоторые транзисторы не соединены с дорожками, это артефакт травления химикатами в процессе приготовлений к съемке.
    Фиг.27 микрофотография, фрагмент ПЗУ микрокода процессора Intel 8086 (отсюда). Видны транзисторы в местах, соответствующих единицам и пропуски на месте нулей. Некоторые транзисторы не соединены с дорожками, это артефакт травления химикатами в процессе приготовлений к съемке.
  • PROM, устройство (P- Programmable), допускающее однократную запись. Обычно это матрица транзисторов, изначально заполненное единицами т.к. все транзистору могут проводить ток. Там, где необходимо записать ноль, высоким напряжением сжигают перемычку между транзистором и дорожкой проводника.

  • EPROM, устройство (E-Erasable), которое можно переписать несколько раз. Обычно, это матрица транзисторов с плавающим затвором, которые можно стереть с помощью ультрафиолета, для этого в них предусмотрено окошко.

  • EEPROM, (EE - Electrically Erasable) сейчас обычно это Flash память, которую можно переписать ограниченное количество раз. Собственно, EEPROM появилась раньше Flash, появление Flash как раз и было вызвано очень низкой скоростью записи в существовавшую на тот момент EEPROM.

  • NVRAM (Non Volatile Random Access Memory), статическая память (потребляет меньше энергии) с батарейкой. Такой вариант позволяет обращаться к памяти максимально быстро.

PS. Спасибо Олегу Бартунову ( @zen ) за мотивацию
PPS. А также Егору Рогову (@erogov) за помощь.
PPS. Первоисточник данной статьи здесь.