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

В компьютере любая информация хранится и обрабатывается в виде последовательностей 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 - рабочая память запущенных программ.
- Энергонезависимая память - память, сохраняющая данные без постоянного питания.
- Накопитель - устройство долговременного хранения файлов и программ.
Связанные темы
- Устройство компьютера - место памяти в общей компьютерной системе.
- Двоичная система счисления - как читать числа, записанные с помощью
0и1. - Хранение данных в памяти - как набор битов получает смысл числа, текста или изображения.
- Микроконтроллеры и компьютеры - различия вычислительных платформ.
Источники
- Arduino Docs. Memory Guide: https://docs.arduino.cc/learn/programming/memory-guide/
- Arduino Docs. UNO R3: https://docs.arduino.cc/hardware/uno-rev3/
- Python Documentation. Binary sequence types: https://docs.python.org/3/library/stdtypes.html#binary-sequence-types-bytes-bytearray-memoryview
- Raspberry Pi Documentation. Computers: https://www.raspberrypi.com/documentation/computers/