Перейти к основному содержимому

Устройство памяти

Виды памяти в компьютерной системе

Коротко

В компьютере любая информация хранится и обрабатывается в виде последовательностей 0 и 1. Память состоит из множества областей, где находятся программа и данные. Чтобы получить нужные данные, компьютер должен знать, где они расположены.

Зачем это нужно

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

Например:

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

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

Главная идея

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

адрес -> область памяти -> данные в виде 0 и 1

Ячейки, адреса и данные в памяти

Адрес памяти - числовое обозначение места, где находятся данные. Зная адрес, процессор может прочитать данные или записать новое значение.

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

Бит, байт и область памяти

Бит - минимальная единица цифровой информации. Он имеет одно из двух значений: 0 или 1.

Байт обычно состоит из восьми бит. Один байт может содержать 256 различных комбинаций - от 00000000₂ до 11111111₂. Если читать эти комбинации как беззнаковые целые числа, получится диапазон от 0₁₀ до 255₁₀.

ЕдиницаЧто содержитПример использования
Битодно значение 0 или 1логический признак: выключено или включено
Байтвосемь битнебольшой числовой код или часть символа
Несколько байтовбольше комбинацийчисло, координата, время, цвет
Область памятипоследовательность байтовмассив, строка, изображение, программа

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

Переменная как понятное имя для данных

Рассмотрим переменную:

int distance = 25;
  • int задает тип данных;
  • distance - имя переменной, понятное человеку;
  • 25 - начальное значение.

Имя distance концептуально работает как понятная ссылка на область памяти. Когда программа использует это имя, система находит соответствующие данные по настоящему числовому адресу. Само слово distance не является физическим адресом вроде 0x20000120, но избавляет программиста от необходимости помнить такие числа.

С переменной можно выполнять разные действия.

Прочитать значение

Serial.println(distance);

Программа берет текущее значение из памяти и выводит его.

Изменить значение

distance = 30;

Старое значение переменной заменяется новым.

Использовать в вычислении

int doubledDistance = distance * 2;

Программа читает distance, выполняет умножение и сохраняет результат в другой переменной.

Проверить условие

if (distance < 10) {
// выполнить действие
}

Программа читает значение и сравнивает его с числом 10.

Сохранить в массив

distances[index] = distance;

Текущее значение записывается в один из элементов массива.

Важно про имена переменных

Имя переменной выбирают так, чтобы оно объясняло смысл данных. distance, temperature и userCount понятнее, чем a, b и x. Хорошее имя не меняет устройство памяти, но делает программу понятнее человеку.

Основные виды памяти компьютера

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

Вид памятиГде находитсяДля чего используетсяПосле выключения
Регистрывнутри CPUданные текущей операцииочищаются
Кэш-памятьвнутри или рядом с CPUчасто используемые данные и командыочищается
Оперативная память, RAMотдельные микросхемы или часть общей системызапущенные программы и рабочие данныеобычно очищается
Flash и ROMв устройстве или на платепрошивка и постоянные данныесохраняются
SSD, HDD, карта памятинакопительпрограммы, документы, фотографии и другие файлысохраняются

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

регистры -> кэш -> RAM -> SSD или HDD
быстрее и меньше медленнее и больше

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

Оперативная и долговременная память

Оперативная память нужна во время работы программ. Например, при открытии фотографии данные загружаются с SSD в RAM. Когда пользователь редактирует изображение, программа хранит промежуточные результаты в оперативной памяти.

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

Важно

Оперативная память и место на накопителе измеряются в байтах, но не заменяют друг друга. Большой SSD позволяет хранить много файлов, а большой объем RAM позволяет одновременно работать с большим количеством данных и программ.

Переменные, массивы и буферы

Переменная хранит одно логическое значение:

int speed = 120;

Массив хранит несколько значений одного типа:

int measurements[5] = {30, 28, 27, 26, 25};

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

Что такое границы массива

Если массив содержит пять элементов, допустимы только его пять позиций. Попытка обратиться за пределы выделенной области может повредить другие данные и привести к неправильной работе программы.

Виды памяти в роботе

Буфер измерений датчика в памяти робота

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

Робот на микроконтроллере

ПамятьВозможное содержимое
Flash-памятьпрошивка робота
Оперативная памятьпеременные, показания датчиков, буферы обмена
EEPROM или область энергонезависимой памятикалибровка, настройки, счетчики

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

Робот с одноплатным компьютером

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

Пример использования переменной distance

Датчик расстояния передает новое измерение, а программа сохраняет его:

int distance = readDistance();

Затем переменная может использоваться несколько раз:

Serial.println(distance);      // показать измерение человеку
saveToBuffer(distance); // сохранить в буфер
if (distance < 10) { // сравнить с порогом
stopMotors(); // выполнить действие
}

Одно значение в памяти становится частью отображения, вычисления и алгоритма управления.

Что запомнить про память

ВопросПочему он важен
В каком виде хранится информация?внутри компьютера она представлена битами 0 и 1
Сколько байтов занимает значение?размер ограничивает диапазон и расход памяти
Где находятся данные?процессору нужен адрес или ссылка на область памяти
Как долго они должны храниться?RAM и накопитель ведут себя по-разному
Кто изменяет данные?это помогает понимать работу программы и искать ошибки
Не вышла ли программа за границы?неверный индекс может повредить другие данные

Практика

Задание 1

Расположи виды памяти от наиболее близкой к процессору до долговременного накопителя:

RAM, SSD, регистры, кэш-память

Задание 2

Для каждого значения выберите RAM или долговременный накопитель.

ЗначениеГде хранить?Почему
Открытая фотография во время редактирования
Сохраненный документ
Текущее положение персонажа в игре
Установленная программа
Настройки робота после выключения

Задание 3

Придумайте четыре действия с переменной temperature: присваивание, вывод, вычисление и проверку условия. Можно использовать псевдокод.

Проверьте себя

  • В каком виде хранится информация внутри компьютера?
  • Чем бит отличается от байта?
  • Чем имя переменной отличается от настоящего адреса памяти?
  • Почему RAM не подходит для постоянного хранения файлов?
  • Для чего используется кэш-память?
  • Чем массив отличается от одной переменной?
  • Какие виды памяти могут использоваться в роботе?
Ориентиры для самопроверки

Сначала ответьте без подсказки. Ответ можно считать полным, если вы:

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

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

Словарь статьи

  • Бит - минимальная единица цифровой информации со значением 0 или 1.
  • Байт - группа из восьми бит.
  • Адрес памяти - числовое обозначение места, где расположены данные.
  • Переменная - имя, с помощью которого программа обращается к значению определенного типа.
  • Массив - последовательность элементов одного типа.
  • Буфер - область памяти для временного накопления данных.
  • Регистр - очень быстрая небольшая память внутри процессора.
  • Кэш-память - быстрая память для часто используемых данных и команд.
  • Оперативная память, RAM - рабочая память запущенных программ.
  • Энергонезависимая память - память, сохраняющая данные без постоянного питания.
  • Накопитель - устройство долговременного хранения файлов и программ.

Связанные темы

Источники