Оперативная память

Содержание отдельной ячейки памяти

Каждая ячейка памяти на компьютере с хранимой программой хранит двоичное число или десятичное число некоторого типа. Эти числа определяются как данные или как команды, а их использование определяется командами, которые извлекают и взаимодействуют с ними.
Некоторые «ранние» программисты сочетали команды и данные в словах как способ сэкономить память: «Манчестер-Марк-1» имел место в своих 40-битных словах для хранения нескольких бит данных — его процессор игнорировал небольшую секцию в середине слова — и это часто использовалось как эксплойт для хранения дополнительных данных. Самовоспроизводящиеся программы, такие как вирусы, иногда рассматривают себя как данные, а иногда как команды

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

Адресное пространство в программировании приложений

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

  • Машинный код, в том числе:
    • Собственный код программы;
    • Совместно используемые библиотеки.
  • Данные, в том числе:
    • Инициализированные данные;
    • Неинициализированные (но выделенные) переменные;
    • Стек для переменных исполняемой программы;
    • Куча;
    • Совместно используемая память и отображенные в память файлы.

Некоторые части адресного пространства могут вообще не отображаться.

Что можно узнать о телефоне, положив его в морозилку

Забавное исследование провели немецкие ученые. При анализе оперативной памяти телефона под управлением операционной системы Android они использовали бытовую морозильную камеру (bit.ly/Xa9XXN).

Идея заморозитьтелефон связана с появлением в системе Android 4.0 возможности шифрования разделов. Эта функция не позволяет исследователю получить доступ к информации, записанной в заблокированном телефоне, без введения корректного пароля. Поскольку подбор пароля — дело длительное и неблагодарное, исследователи решили поискать способ обойти защиту.

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

Возможность снять образ оперативной памяти устройства под управлением Android существует: для этого телефон переводится в специальный отладочный режим fastboot; в память инсталлируется специальная программа, и образ оперативной памяти можно скачать через USB. Проблема здесь в том, что при перезагрузке телефона в отладочный режим содержимое оперативной памяти успевает обнулиться.

Чтобы замедлить процесс обнуления памяти, ученые положили телефон в морозилку, заморозив его до температуры –15 градусов. При такой низкой температуре ячейки памяти меняют состояние очень медленно. Соответственно, при выключении охлажденного телефона и моментальной его перезагрузке в отладочный режим содержимое оперативной памяти не успевает обнулиться. Эксперимент оказался удачным: исследователям удалось извлечь из телефона двоичные ключи, с помощью которых были зашифрованы разделы с пользовательскими данными.

Подробнее об этом эксперименте можно прочитать на сайте университета. Там же доступен пакет программ FROST, с помощью которого скачивается образ оперативной памяти и извлекаются крипто-ключи: bit.ly/Xa9XXN

Типы адресов памяти

Физические адреса

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

Эффективные адреса

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

Логические адреса

Без знания номера и параметров сегмента, в котором указан эффективный адрес, последний бесполезен. Сам сегмент выбирается ещё одним числом, именуемым селектором. Пара чисел, записываемая как selector:offset, получила имя логический адрес. Так как активные селекторы хранятся в группе специальных регистров, чаще всего вместо первого числа в паре записывается имя регистра, например, ds:0x11223344. В старых компьютерах логические и физические адреса были согласованы, но с момента появления виртуальной памяти у большинства прикладных программ нет информации о физических адресах. Скорее, они адресуют логические адреса или виртуальные адреса, используя блок управления памятью компьютера и отображение памяти операционной системы.

Линейные адреса

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

lin_addr = segment.base + eff_addr

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

Виртуальные адреса

В литературе и в документации других архитектур встречается ещё один термин — виртуальный адрес. Он не используется в документации Intel на IA-32, однако встречается, например, в описании Intel Itanium, в котором сегментация не используется. Можно смело считать, что для IA-32 виртуальный == линейный. В советской литературе по вычислительной технике этот вид адресов также именовался математическим.

ОЗУ современных компьютеров

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

Память динамического типа

Основная статья: DRAM

Экономичный вид памяти. Для хранения разряда (бита или трита) используется схема, состоящая из одного конденсатора и одного транзистора (в некоторых вариантах два конденсатора). Такой вид памяти, во-первых, дешевле (один конденсатор и один транзистор на 1 бит дешевле нескольких транзисторов входящих в триггер), и, во-вторых, занимает меньшую площадь на кристалле, там, где в SRAM размещается один триггер, хранящий 1 бит, можно разместить несколько конденсаторов и транзисторов для хранения нескольких бит.

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

Именно из-за того, что заряд конденсатора постепенно уменьшается во времени, память на конденсаторах получила своё название DRAM — динамическая память. Поэтому, дабы не потерять содержимое памяти, величина заряда конденсаторов периодически восстанавливается («регенерируется») через определённое время, называемое циклом регенерации, для современных микросхем памяти это время не должно превышать 2 мс. Для регенерации в современных микросхемах достаточно выполнить циклограмму чтения по всем строкам запоминающей матрицы. Процедуру регенерации выполняет процессор или контроллер памяти. Так как для регенерации памяти периодически приостанавливается обращение к памяти, это снижает среднюю скорость обмена с этим видом ОЗУ.

Память статического типа

Основная статья: SRAM (память)

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

Единица измерения адреса

Большинство современных компьютеров используют байтовую адресацию, причем каждый адрес идентифицирует один 8-разрядный байт памяти; данные, слишком большие чтобы храниться в одном байте, могут находиться в нескольких байтах, образуя последовательность последовательных адресов. Существуют компьютеры с пословной адресацией, где минимальным адресуемым блоком памяти является слово на процессоре. Например, миникомпьютер Data General Nova и микросхемы Texas Instruments TMS9900 и National Semiconductor IMP-16 использовали 16-битные слова, также было много 36-разрядных универсальных компьютеров (например, PDP-10), которые использовали 18-разрядную пословную адресацию, а не байт-адресацию, предоставляя адресное пространство из 218 36-битных слов (приблизительно 1 мегабайт памяти). Эффективность адресации памяти зависит от размера бита шины, используемой для адресации — чем больше бит, тем больше адресов доступно компьютеру. Например, 8-разрядный адресный компьютер с 20-разрядной адресной шиной (например, Intel 8086) может адресовать 220 (1 048 576) ячеек памяти или один MB памяти, тогда как 32-разрядная шина (например, Intel 80386) Адреса 232 (4 294 967 296) или 4 ГБ адресного пространства. Напротив, 36-разрядный адресно-адресуемый аппарат с 18-разрядной адресной шиной адресует только 218 (262,144) 36-разрядных местоположений (9,437,184 бита), что эквивалентно 1,179,648 8-битным байтам или 1152 КБ.

Некоторые старые компьютеры (десятичные компьютеры) были десятизначными с цифровой адресацией. Например, каждый адрес в магнитной памяти IBM 1620 идентифицировал одну шестиразрядную двоично-кодированную десятичную цифру, состоящую из бита четности, бита флага и четырех числовых битов. В 1620 использовались пятизначные десятичные адреса, поэтому в теории максимально возможный адрес был 99,999. На практике CPU поддерживал 20000 ячеек памяти и мог добавить до двух дополнительных модулей внешней памяти, каждый из которых поддерживает 20 000 адресов, в общей сложности 60 000 (00000-59999).

Размер слова в зависимости от размера адреса

Размер слова является характеристикой для данной архитектуры компьютера. Он обозначает количество цифр, которое процессор может обрабатывать за один раз. Современные процессоры, включая встроенные системы, обычно имеют размер слова 8, 16, 24, 32 или 64 бита; Большинство современных компьютеров общего назначения используют 32 или 64 бита. В истории же использовалось много различных вариантов, включая 8, 9, 10, 12, 18, 24, 36, 39, 40, 48 и 60 бит.

Очень часто, когда речь идет о размере слова современного компьютера, также оценивается размер адресного пространства на этом компьютере. Например, компьютер, называемый «32-битным», также обычно разрешает 32-разрядные адреса памяти; 32-разрядный компьютер с байтовой адресацией может адресовать 2^32 = 4,294,967,296 байт памяти или 4 гибибайта (GB). Это позволяет эффективно хранить адрес памяти одним словом.

Однако это не всегда выполняется. Компьютеры могут иметь адреса памяти, большие или меньшие, чем размер их слова. Так многие 8-разрядные процессоры, например MOS Technology 6502, поддерживают 16-разрядные адреса, а если бы они их не поддерживали, то они были бы ограничены лишь 256 байтами адресной памяти. 16-разрядные процессоры Intel 8088 и Intel 8086 поддерживают 20-разрядную адресацию через сегментацию, что позволяет им получать доступ к 1 Мбайт, а не 64 Кбайт памяти. Все процессоры Intel Pentium, начиная с Pentium Pro, включают в себя расширения физических адресов (PAE), которые поддерживают отображение 36-разрядных физических адресов в 32-разрядные виртуальные адреса.

Теоретически современные 64-разрядные компьютеры с байтовой адресацией могут адресовать 264 байта, но на практике объем памяти ограничен процессором, контроллером памяти или особенностями печатной платы (например, количеством разъемов физической памяти или количеством паяемой памяти).

Выводы

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

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

Для обеспечения потребностей пользователя в скорости записи / считывания и сохранении информации используются RAID массивы — объединение нескольких жестких дисков, контролируется специальным RAID-контроллером. В зависимости от типа подключения на одни — будет записываться новая информация, а остальные будут их копиями (за счет чего создается избыточность).

У любого массива RAID, который остается работоспособным при сбое одного диска, существует такое понятие, как время восстановления (rebuild time) — это время, за которое контроллер должен организовать функционирование нового диска в массиве.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector