Создание модели оперативной памяти

Обновлено: 03.07.2024

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

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

Виды памяти

Существует 3 типа памяти: статический, автоматический и динамический.

Статический — выделение памяти до начала исполнения программы. Такая память доступна на протяжении всего времени выполнения программы. Во многих языках для размещения объекта в статической памяти достаточно задекларировать его в глобальной области видимости.

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

Стек, как структура данных, работает по принципу LIFO («последним пришёл — первым ушёл»). Другими словами, добавлять и удалять значения в стеке можно только с одной и той же стороны.

Старт 22 ноября, 4 месяца, Онлайн, От 35 000 до 100 000 ₽

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

Проще всего это понять из примера на С++:

Стек при вызове последней рекурсивной функции будет выглядеть следующим образом:


Детали реализации автоматической памяти могут быть разными в зависимости от конкретной платформы. Например, кому очищать из стека метаинформацию функции и её аргументы: вызывающей функции или вызываемой? Как передавать результат: через стек или, что намного быстрее, через регистры процессора (память, расположенную прямо на кристалле процессора. В этой статье не рассматривается, т. к. в языках программирования высокого уровня зачастую нет прямого доступа к регистрам процессора). На все эти вопросы отвечает конкретная реализация calling convention — описание технических особенностей вызова подпрограмм, определяющее способы передачи параметров/результата функции и способы вызова/возврата из функции.

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

Размер автоматической памяти, а он тоже фиксированный, определяется линковщиком (обычно — 1 мегабайт), максимальный размер зависит от конкретной системы и настроек компилятора/линковщика.

Если приложение выйдет за максимум автоматической памяти, его там может ждать Page Fault (сигнал SIGSEGV в POSIX-совместимых системах: Mac OS X, Linux, BSD и т. д.) — ошибка сегментации, приводящая к аварийному завершению программы.

Динамическая — выделение памяти из ОС по требованию приложения.

Автоматическая и статическая память выделяются единоразово перед запуском программы. При их нехватке, либо если модель LIFO не совсем подходит, используется динамическая память.

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

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

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

Максимальный размер динамической памяти зависит от многих факторов: среди них ОС, процессор, аппаратная архитектура в целом, не говоря уже о самом очевидном — максимальном размере ОЗУ у конкретного устройства. Например x86_64 процессоры используют только 48 бит для адресации виртуальной памяти, что позволяет использовать до 256 ТБ памяти. В следующей статье про более низкоуровневую архитектуру памяти будет объяснено, почему не все 64 бита.

Аллокатор

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

Аллокатор — это часть программы, которая запрашивает память большими кусками напрямую у ОС через системные вызовы (в POSIX-совместимых ОС это mmap для выделения памяти и unmap — для освобождения), затем по частям отдаёт эту память приложению (в Си это могут быть функции malloc() / free() ). Такой подход увеличивает производительность, но может вызвать фрагментацию памяти при длительной работе программы.

malloc() / free() и mmap / unmap — это не одно и то же. Первый является простейшим аллокатором в libc , второй является системным вызовом. В большинстве языков можно использовать только аллокатор по умолчанию, но в языках с более низкоуровневой моделью памяти можно использовать и другие аллокаторы.

Например, boost::pool аллокаторы, созданные для оптимальной работы с контейнерами ( boost::pool_allocator для линейных ( std::vector ), boost::fast_pool_allocator для нелинейных ( std::map, std::list )). Или аллокатор jemalloc, оптимизированный для решения проблем фрагментации и утилизации ресурсов CPU в многопоточных программах. Более подробно о jemalloc можно узнать из доклада с конференции C++ Russia 2018.

Способы контроля динамической памяти

Из-за сложности программ очень трудно определить, когда необходимо освобождать память в ОС, и это вторая явная проблема динамической памяти. Если забыть вызвать munmap() или free() , то произойдет следующая ситуация: приложению память уже не нужна, но ОС всё ещё будет считать, что эта память используется программой. Эту проблему называют «утечкой памяти». Существуют несколько способов автоматического или полуавтоматического решения этой проблемы:

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

Умные указатели на основе RAII — указатели, автоматически владеющие динамической памятью, то есть автоматически освобождающие её, когда она больше не нужна. Умные указатели инкапсулируют только управление памятью объекта, но не сам объект, как, например, происходит в String, который инкапсулирует объект целиком. Примеры умных указателей ниже.

std::unique_ptr — класс уникального указателя, является единственным владельцем памяти и очищает её в своём деструкторе. Поэтому объекты класса std::unique_ptr не могут иметь копий, но могут быть перемещены. Подробнее о семантике перемещения в этой статье.

std::shared_ptr — класс общего указателя, использующий атомарный счётчик ссылок для подсчёта количества владельцев памяти. В конструкторе счётчик инкрементируется, в деструкторе — декрементируется. Как только счётчик становится равным нулю, память освобождается.

Но у std::shared_ptr есть проблема, например, когда объект A ссылается на объект B, а объект B ссылается на объект A. В таком случае у обоих объектов счётчик ссылок никогда не будет меньше 1 и произойдёт утечка памяти. Решений у этой проблемы два. Использование std::weak_ptr , который ссылается на объект, но без счётчика ссылок, и не может быть разыменован без предварительной конвертации в std::shared_ptr . Вторым решением этой проблемы является сборщик мусора.

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

Умные указатели и RAII используются в основном в относительно низкоуровневых языках, например, С++ или Swift. В более высокоуровневых языках обычно используется сборщик мусора (Java), хотя может применяться комбинация умного указателя и сборщика мусора (Python).

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

image


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

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

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

image

но в данном материале мы рассмотрим программные средства, которые позволяют изъять содержимое оперативной памяти защищенных машин путем так называемой «горячей» перезагрузки и запуска машины в Live-режиме.

Для выполнения этой задачи будем использовать специальный дистрибутив Ubuntu CyberPack (IRF) 1.0, состоящий из минимального набора компонент, а именно, только те, которые необходимы для изъятия данных из памяти. Соответственно отсутствует и графический интерфейс.

Использование такого подхода к изъятию содержимого оперативной памяти имеет ряд преимуществ и недостатков сравнительно с другими перечисленными выше средствами.
Плюсы:
— использование Live-дистрибутива позволяет проводить действие не зависимо от того какая операционная система установлена на исследуемой машине;
— отсутствуют затраты на приобретение дорогостоящих специальных устройств, кабелей, плат, и др.
Недостаток:
— содержимое оперативной памяти будет неполным — ее часть будет перезаписана данными, необходимыми для запуска Live-дистрибутива (приблизительно 125 Мб).

Для использования доступны специально собранные дистрибутивы для машин с памятью объемом до 3 Гб (і386) и свыше 3 Гб (amd64). С их помощью можно создать загрузочный CD/DVD-диск или загрузочный USB-диск.

Замечания:
— второго шанса система нам не дает — у нас есть только одна попытка. т. е. при повторной перезагрузке исследуемого компьютера большая вероятность того что мы уже не найдем необходимой информации. Отсюда следует что не надо перезагружать его несколько раз, экспериментировать, прицеливаться.
Необходимо заранее подготовится и знать как компьютер себя поведет после перезагрузки.
Большинство современных компьютеров позволяют прямо при старте указать откуда производить загрузку, но если этого нет, тогда необходимого настроить BIOS машины на загрузку с CD/DVD-привода или USB-привода/накопителя, после чего загрузить Live-дистрибутив с указанного устройства.

Перезагружаем компьютер.
ВАЖНО: перезагрузка ни в коем случае не должна быть холодной (путем нажатия кнопки «ресет» или выключение\включение питания), а именно — перезагрузка должна быть осуществлена средствами самой работающей системы (например нажатием кнопок Ctrl-Alt-Del или путем выбора пункта «перезагрузка» в системе)

image

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

Замечание: Для дальнейших действий понадобиться примонтировать заранее подготовленный носитель (внешний жесткий диск, флеш-накопитель) с файловой системой ext2/3/4, в который будет сохраняться файл с содержимым оперативной памяти.

Далее следует примонтировать логический раздел накопителя к папке /tmp загруженной в Live-режиме операционной системы:

Все подготовительные шаги сделаны — можно переходить к изъятию содержимого оперативной памяти:

В результате мы получили содержимое оперативной памяти машины в файле «ram-image.mem» на накопителе. Теперь его можно обрабатывать в т.ч. извлекая части исполняемых процессов, удаленных файлов, информацию о пользовательских сессиях, криптографических ключах и многое другое.

P.S.
Также стоит обратить внимание что все современные системы используют в своей работе и swap-память (так называемый «файл подкачки»)
Файл подкачки – это своеобразное дополнение к оперативной памяти (которая занимается временным хранением данных для быстрой доставки их на обработку процессору) Вашего компьютера. Даже не столько дополнение, сколько её уширение или, можно сказать, продолжение. Дело в том, что когда не хватает оперативной памяти система может переносить данные из памяти на диск (так называемая дополнительная память), в котором соответственно также хранятся данные.
И для полной картины анализа памяти необходимо также получить и их.
Различные операционные системы используют разные способы их хранения.

В случае с Windows это обычно файлы в корне на системном диске С:
pagefile.sys для Win XP и Win 7 и достаточно просто скопировать файл

Для Linux — это отдельный раздел на носителе.
Например:
Команда sudo fdisk -l /dev/sda
покажет нам все разделы в системе
/dev/sda1 * 2048 78125055 39061504 83 Linux
/dev/sda2 78125056 117186559 19530752 82 Linux своп / Solaris
/dev/sda3 117186560 625141759 253977600 83 Linux
Исходя из чего мы видим что раздел подкачки находиться в /dev/sda2
Скопировать его можно также с помощию команды dd.
Например:
dd if=/dev/sda2 of=/media/<путь куда записать>/linux-swap.dd

Для MacOS необходимо скопировать все файлы из директории /private/var/vm/swapfile*

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

Достаточно сказать, что за время перехода от первого поколения ЭВМ (на электронных лампах) ко второму (на транзисторах) сменилось не менее пяти технологий ОЗУ. Из этого поста вы узнаете, какие причудливые формы порой принимала такая вроде бы знакомая вещь, как «оперативка»

Конденсаторы

Создателем первого компьютера в современном понимании этого слова принято считать немецкого инженера Конрада Цузе. Ещё в 30-е годы, работая в одиночку, он сумел спроектировать и построить в гостиной родительского дома устройство, способное автоматически выполнять различные вычисления по заданной программе. Машина, получившая название Z1, была электромеханической и потому не фигурирует в списках первых ЭВМ (электронных вычислительных машин). При этом она работала в двоичной системе счисления, как и современные компьютеры, а не в двоично-десятичной, как знаменитый ENIAC, созданный почти десятью годами позже

История оперативной памяти

Оперативная память Z1 была организована на конденсаторах, причём не покупных, а разработанных самим изобретателем. Конструкция, в которой чередовались слои стекла и металлические пластины, позволяла хранить 64 вещественных числа, каждое из которых состояло из 14 бит мантиссы и 8 бит, отводившихся под знак и порядок.
Стоит отметить, что эта вычислительная машина работала ненадёжно из-за низкой точности изготовления деталей, и последующие свои конструкции (Z2–Z4) Цузе создавал на базе выпускавшихся промышленностью телефонных реле.
В 1987–1989 гг. пожилой Цузе воссоздал компьютер Z1, утраченный во время войны, и теперь его рабочая копия выставлена в Немецком техническом музее. По ссылке доступна интерактивная панорама, позволяющая рассмотреть компьютер со всех сторон

Электронные лампы

Первые ЭВМ, например, вышеупомянутый ENIAC или отечественная БЭСМ, использовали электронные лампы как для вычислений, так и для промежуточной записи команд и операндов. Чтобы хранить один бит данных, нужна была одна запоминающая ячейка (триггер), собранная на двух триодах. В ЭВМ ставили двойные триоды, у которых в одном баллоне размещались, по сути, две независимые электронные лампы, поэтому можно упрощённо говорить, что для хранения N бит информации требовалось N электронных ламп (без учёта обвязки).
Неудивительно, что эти машины имели огромный размер и потребляли колоссальное количество энергии. БЭСМ содержала около 4000 электронных ламп, а ENIAC — почти
18 000. Дело в том, что, в отличие от чисто двоичной БЭСМ, ENIAC использовал весьма своеобразную двоично-десятичную систему представления чисел. Младшие 5 битов в ней кодировали число от 0 до 4 в унитарной системе счисления (когда значение определяет номер позиции, на которой в коде стоит единица, — скажем, 01000 означает 3, а 00001 — 0), а два старших бита определяли определяли, нужно ли прибавлять к этому числу пятёрку (10 — да, 01 — нет)

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

История оперативной памяти Компьютер, Оперативная память, Ведьмы, Бэсм, Eniac, Длиннопост

1. Конденсаторы

Создателем первого компьютера в современном понимании этого слова принято считать немецкого инженера Конрада Цузе. Ещё в 30-е годы, работая в одиночку, он сумел спроектировать и построить в гостиной родительского дома устройство, способное автоматически выполнять различные вычисления по заданной программе. Машина, получившая название Z1, была электромеханической и потому не фигурирует в списках первых ЭВМ (электронных вычислительных машин). При этом она работала в двоичной системе счисления, как и современные компьютеры, а не в двоично-десятичной, как знаменитый ENIAC, созданный почти десятью годами позже.

История оперативной памяти Компьютер, Оперативная память, Ведьмы, Бэсм, Eniac, Длиннопост

Оперативная память Z1 была организована на конденсаторах, причём не покупных, а разработанных самим изобретателем. Конструкция, в которой чередовались слои стекла и металлические пластины, позволяла хранить 64 вещественных числа, каждое из которых состояло из 14 бит мантиссы и 8 бит, отводившихся под знак и порядок.

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

В 1987–1989 гг. пожилой Цузе воссоздал компьютер Z1, утраченный во время войны, и теперь его рабочая копия выставлена в Немецком техническом музее. По ссылке доступна интерактивная панорама, позволяющая рассмотреть компьютер со всех сторон.

2. Электронные лампы

Первые ЭВМ, например, вышеупомянутый ENIAC или отечественная БЭСМ, использовали электронные лампы как для вычислений, так и для промежуточной записи команд и операндов. Чтобы хранить один бит данных, нужна была одна запоминающая ячейка (триггер), собранная на двух триодах. В ЭВМ ставили двойные триоды, у которых в одном баллоне размещались, по сути, две независимые электронные лампы, поэтому можно упрощённо говорить, что для хранения N бит информации требовалось N электронных ламп (без учёта обвязки).

Неудивительно, что эти машины имели огромный размер и потребляли колоссальное количество энергии. БЭСМ содержала около 4000 электронных ламп, а ENIAC — почти
18 000. Дело в том, что, в отличие от чисто двоичной БЭСМ, ENIAC использовал весьма своеобразную двоично-десятичную систему представления чисел. Младшие 5 битов в ней кодировали число от 0 до 4 в унитарной системе счисления (когда значение определяет номер позиции, на которой в коде стоит единица, — скажем, 01000 означает 3, а 00001 — 0), а два старших бита определяли определяли, нужно ли прибавлять к этому числу пятёрку (10 — да, 01 — нет).

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

История оперативной памяти Компьютер, Оперативная память, Ведьмы, Бэсм, Eniac, Длиннопост

Запоминающая ячейка БЭСМ на 1 бит тоже особой компактностью не отличалась:

История оперативной памяти Компьютер, Оперативная память, Ведьмы, Бэсм, Eniac, Длиннопост

Хотя у меня есть подозрение, что подпись к этой фотографии из музея неверна, и на ней — тоже не просто запоминающая, а суммирующая ячейка. Дело в том, что у БЭСМ были и двухламповые ячейки, которые, скорее всего, как раз представляли собой просто триггеры. Но информации по ним я в интернете не нашёл, а запрос в музей ИТМиВТ остался без ответа.

История оперативной памяти Компьютер, Оперативная память, Ведьмы, Бэсм, Eniac, Длиннопост

Созданный в 1948 году, он оказался первым в мире электронным компьютером, построенным по принципу совместного хранения данных и программ в памяти (фон-неймановская архитектура). Также это была первая универсальная ЭВМ в Великобритании (созданный ранее компьютер Colossus, хотя и имел ограниченные возможности программирования, всё-таки предназначался для одной узкой задачи — взлома немецкого шифра Lorenz SZ).

История оперативной памяти Компьютер, Оперативная память, Ведьмы, Бэсм, Eniac, Длиннопост

В 1998 году с использованием оригинальных компонентов была построена реплика компьютера SSEM, которую теперь можно увидеть в Манчестерском музее науки и промышленности.

4. Декатроны

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

История оперативной памяти Компьютер, Оперативная память, Ведьмы, Бэсм, Eniac, Длиннопост

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

5. Ртутные линии задержки.

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

История оперативной памяти Компьютер, Оперативная память, Ведьмы, Бэсм, Eniac, Длиннопост

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

Такая память была сложна в производстве, требовала тонкой настройки, представляла опасность в случае повреждения, нуждалась в системах поддержания постоянной температуры, а главное — предполагала только последовательный доступ (то есть приходилось ждать, пока на выходе линии задержки появится нужная информация). Почему же при таком огромном наборе недостатков её использовали? Всё дело в экономичности и надёжности. Одна ртутная линия задержки могла хранить несколько сотен бит информации (скажем, 576 бит в компьютере EDSAC). Чтобы реализовать такой же объём памяти на триггерах, понадобилось бы больше тысячи электронных ламп, которые занимали бы больше места и потребляли бы больше энергии, а главное — регулярно бы перегорали. Ртутные же линии, при всей их сложности, после грамотной настройки работали очень долго.

История оперативной памяти Компьютер, Оперативная память, Ведьмы, Бэсм, Eniac, Длиннопост

В 1953 г. оперативная память на ртутных трубках объёмом 1024 слова (по 39 бит в каждом) появилась и у отечественной БЭСМ.

6. Селектроны

Если трубка Уильямса и ртутные линии задержки считаются прототипами динамической памяти (DRAM), то следующее устройство можно назвать одним из прототипов статической памяти (SRAM).

Это — селектрон, особая электронная лампа, разработанная компанией RCA (кстати, под руководством небезызвестного В. К. Зворыкина) в конце 40-х — начале 50-х годов. На фоне памяти на триггерах, где одна электронная лампа была способна хранить в лучшем случае один бит данных, возможности этого устройства казались фантастическими: один селектрон мог иметь внутри матрицу ёмкостью до 4096 бит! Время доступа к информации при этом было на порядок меньше, чем у ртутной памяти (называлась цифра в 16 мкс).

История оперативной памяти Компьютер, Оперативная память, Ведьмы, Бэсм, Eniac, Длиннопост

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

История оперативной памяти Компьютер, Оперативная память, Ведьмы, Бэсм, Eniac, Длиннопост

7. Магнитные барабаны

История оперативной памяти Компьютер, Оперативная память, Ведьмы, Бэсм, Eniac, Длиннопост

8. Ферритовые сердечники

Появление памяти на магнитных сердечниках, или ферритовой памяти, ознаменовало наступление новой эпохи. Идею такого ОЗУ предложил Джон Преспер Экерт (один из разработчиков ENIAC) в 1945 г., а первые практические реализации появились в начале 50-х. Патент на ферритовую память получили американские инженеры китайского происхождения Ван Ань и Во Вайдун в 1955 г.

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

История оперативной памяти Компьютер, Оперативная память, Ведьмы, Бэсм, Eniac, Длиннопост

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

История оперативной памяти Компьютер, Оперативная память, Ведьмы, Бэсм, Eniac, Длиннопост

Вытеснила её уже привычная нам память на микросхемах, но это — уже совсем другая история.

Читайте также: