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

Обновлено:

1. Память компьютера

Для работы компьютера используются разные виды памяти.

На этом уроке нас интересуют две основные составляющие:

  • постоянный накопитель;
  • оперативная память.

Они решают разные задачи и не заменяют друг друга.


2. Постоянный накопитель

Постоянный накопитель используется для длительного хранения данных.

Чаще всего в современных устройствах встречаются:

SSD
HDD

HDD — жёсткий магнитный диск.

SSD — твердотельный накопитель.

Технически SSD не является жёстким диском, поэтому правильнее называть SSD и HDD двумя видами постоянных накопителей.

В обычной речи их часто объединяют под общим названием «диск».


3. Что хранится на накопителе

На постоянном накопителе могут находиться:

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

Например, установленная программа Visual Studio Code находится на накопителе.

Установленный Python также находится на накопителе.

Созданный и сохранённый Python-файл:

main.py

тоже находится на накопителе.


4. Почему накопитель называется постоянным хранилищем

Данные на SSD или HDD сохраняются без постоянного питания.

Если:

  • выключить компьютер;
  • перезагрузить компьютер;
  • отключить накопитель;
  • извлечь накопитель из устройства;

сохранённые данные обычно останутся на нём.

После повторного включения компьютера мы снова можем открыть сохранённые файлы.

Именно поэтому SSD и HDD называют постоянным или долговременным хранилищем.


5. Данные всё равно могут быть потеряны

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

Причинами потери могут быть:

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

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

Но при обычном выключении компьютера данные с накопителя не исчезают.


6. Преимущества постоянного накопителя

Основные преимущества SSD и HDD:

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

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


7. Отличие SSD от HDD

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

SSD не содержит движущихся механических частей и использует электронную память.

Обычно SSD:

  • работает быстрее;
  • быстрее запускает операционную систему и программы;
  • меньше боится тряски;
  • работает тише.

HDD обычно позволяет дешевле хранить большой объём данных.

Для этого урока главное не различие между SSD и HDD, а то, что оба устройства используются для постоянного хранения информации.


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

Оперативная память называется:

RAM

Расшифровка:

Random Access Memory

По-русски обычно используется сокращение:

ОЗУ

Оперативная память — это быстрое временное хранилище, которое используется работающими программами.


9. Почему оперативная память временная

Данные находятся в оперативной памяти, пока:

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

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

Поэтому оперативная память не подходит для постоянного хранения важных файлов.

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


10. Основные преимущества оперативной памяти

Главное преимущество оперативной памяти — скорость.

Она значительно быстрее постоянного накопителя.

Благодаря этому программа может быстро:

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

Недостатки оперативной памяти:

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

11. Простое сравнение

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

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

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

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

Когда работа закончена:

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

12. Накопитель и оперативная память работают вместе

Обычно программа постоянно взаимодействует с обоими видами памяти.

Сначала программа хранится на накопителе.

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

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

Если результат нужно сохранить надолго, программа записывает его на накопитель.

Упрощённая схема:

Накопитель → оперативная память → работа программы

При сохранении данных:

Оперативная память → накопитель

13. Память в разных устройствах

Постоянный накопитель и оперативная память есть не только в настольных компьютерах.

Они используются в:

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

Названия и устройство памяти могут отличаться, но общий принцип остаётся похожим:

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

14. Что происходит при запуске программы

Предположим, программа установлена на накопителе.

Пока программа не запущена, её файлы просто хранятся на SSD или HDD.

Когда пользователь запускает программу:

  1. операционная система находит её файлы;
  2. необходимые части программы загружаются в оперативную память;
  3. процессор начинает выполнять команды программы;
  4. во время работы создаются дополнительные временные данные.

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

Обычно загружаются те части, которые необходимы для текущей работы.


15. Что происходит при закрытии программы

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

Временные данные исчезают.

Данные, которые программа успела сохранить на постоянный накопитель, остаются.

Например, после закрытия текстового редактора:

  • несохранённый текст может быть потерян;
  • сохранённый файл останется на накопителе.

16. Пример с компьютерной игрой

Файлы игры находятся на постоянном накопителе:

  • игровой движок;
  • модели персонажей;
  • текстуры;
  • звуки;
  • музыка;
  • карты;
  • уровни.

Когда мы запускаем игру, необходимые данные загружаются в оперативную память.

Это одна из причин, почему перед началом игры появляется экран загрузки.


17. Загрузка игрового уровня

Предположим, игрок открывает определённый уровень.

Игре могут понадобиться:

  • карта этого уровня;
  • модели противников;
  • звуки;
  • текстуры;
  • информация о предметах;
  • текущее состояние игрока.

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

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

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


18. Почему нельзя загрузить в память всю игру

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

50 ГБ
100 ГБ
200 ГБ

При этом в компьютере может быть значительно меньше оперативной памяти.

Например:

8 ГБ
16 ГБ
32 ГБ

Поэтому игра не может постоянно держать в оперативной памяти абсолютно все свои файлы.

Разработчики решают:

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

19. Недостаток оперативной памяти

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

Могут появиться:

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

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

Поэтому такая замена не обеспечивает ту же скорость.


20. Visual Studio Code на накопителе

Visual Studio Code — это программа.

После установки её файлы находятся на постоянном накопителе.

Например, там хранятся:

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

Пока Visual Studio Code закрыт, его файлы продолжают находиться на накопителе.


21. Запуск Visual Studio Code

Когда мы запускаем Visual Studio Code, необходимые части программы загружаются в оперативную память.

В оперативной памяти могут находиться:

  • открытые файлы;
  • текущий текст;
  • состояние вкладок;
  • результаты подсказок;
  • данные расширений;
  • временная информация редактора.

Когда Visual Studio Code закрывается, выделенная ему оперативная память освобождается.

Сохранённые файлы и настройки остаются на накопителе.


22. Создание нового файла

Предположим, мы открыли Visual Studio Code и создали новый файл.

Начали писать:

number = 10

print(number)

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

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

Некоторые редакторы пытаются восстановить несохранённый текст, но полагаться на это не следует.


23. Сохранение файла

Когда мы нажимаем:

Ctrl + S

или на macOS:

Command + S

Visual Studio Code записывает содержимое файла на постоянный накопитель.

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

Если изменить сохранённый файл, новые изменения снова нужно записать на накопитель.

В Visual Studio Code также можно включить автоматическое сохранение.


24. Сохранение при запуске программы

В некоторых настройках и расширениях Visual Studio Code перед запуском файла автоматически выполняется его сохранение.

Но это зависит от конфигурации редактора.

Поэтому безопасное правило:

Перед запуском программы самостоятельно сохранить файл.

Если файл не сохранён, Python может запустить его старую сохранённую версию без последних изменений.


25. Python также установлен на накопителе

Python — это отдельная установленная программа.

Его файлы находятся на постоянном накопителе.

Когда мы запускаем Python:

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

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


26. Что происходит при запуске Python-файла

Предположим, на накопителе находится файл:

main.py

Внутри файла записан код:

numbers = [10, 20, 30]

result = sum(numbers)

print(result)

Когда мы запускаем файл:

  1. Python читает исходный код;
  2. проверяет его синтаксис;
  3. преобразует код во внутреннее представление;
  4. выполняет команды;
  5. создаёт необходимые объекты в оперативной памяти.

27. Компиляция и интерпретация

Python часто называют интерпретируемым языком.

Однако перед выполнением CPython сначала компилирует исходный код во внутренний байт-код.

После этого виртуальная машина Python выполняет этот байт-код.

Упрощённая схема:

Исходный код → байт-код → выполнение

На начальном этапе не нужно подробно запоминать внутреннее устройство байт-кода.

Главное понимать:

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

28. Объекты Python находятся в оперативной памяти

Когда программа создаёт объекты:

number = 10
price = 99.5
message = 'Hello'
numbers = [10, 20, 30]

во время работы программы эти объекты хранятся в оперативной памяти.

Для них требуется место.

Небольшие числа и короткие строки занимают мало памяти.

Большие списки, длинные строки и большие объёмы данных могут занимать значительно больше памяти.


29. Временные результаты вычислений

Во время выполнения выражения Python может создавать промежуточные значения.

Например:

result = (10 + 20) * 5

Сначала вычисляется:

10 + 20

Получается промежуточный результат:

30

После этого:

30 * 5

Получается итоговый результат:

150

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


30. Что сохраняется после завершения программы

Если программа создала переменные:

number = 10
message = 'Hello'
numbers = [10, 20, 30]

но никуда их не записала, после завершения процесса эти данные исчезнут.

Переменные сами по себе не сохраняются на накопитель.

Чтобы результат остался после завершения программы, его нужно записать в постоянное хранилище.

Например:

  • в файл;
  • в базу данных;
  • на удалённый сервер;
  • в другое постоянное хранилище.

Работу с файлами и базами данных мы изучим позже.


31. База данных и постоянное хранение

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

Например, в ней могут храниться:

  • пользователи сайта;
  • заказы;
  • товары;
  • платежи;
  • сообщения;
  • результаты вычислений.

Сама база данных может находиться:

  • на накопителе текущего компьютера;
  • на отдельном сервере;
  • в облачном сервисе.

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


32. Что должен решать программист

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

Например:

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

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


33. Пример невыгодного хранения данных

Предположим, программа работает с очень большим файлом.

Можно попытаться загрузить всё содержимое сразу в один огромный список.

Тогда список займёт много оперативной памяти.

В некоторых задачах выгоднее обрабатывать данные небольшими частями:

  1. получить часть данных;
  2. обработать её;
  3. сохранить результат;
  4. перейти к следующей части.

Подробно такие способы мы изучим позже.

Сейчас важно понимать: объём оперативной памяти ограничен.


34. Временные и постоянные данные

Программист должен различать два вида данных.

Временные данные

Нужны только во время текущего запуска программы.

Например:

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

Их обычно хранят в оперативной памяти.

Постоянные данные

Должны сохраниться после завершения программы.

Например:

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

Их нужно записывать в постоянное хранилище.


35. Удаление данных из оперативной памяти

Мы уже знакомы с ключевым словом:

del

Оно удаляет имя, то есть ссылку на объект:

numbers = [10, 20, 30]

del numbers

После этого обратиться к имени numbers нельзя.

Однако важно понимать:

del не всегда означает немедленное физическое освобождение памяти.

Если на объект существуют другие ссылки, объект продолжит существовать.

Даже когда объект больше не нужен, Python самостоятельно управляет очисткой памяти.

Ссылки и работу функции id() мы подробно рассмотрим в следующей части урока.


36. Автоматическое управление памятью

Python автоматически:

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

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

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

Можно случайно создать слишком большой список или слишком долго хранить ненужные данные.


37. Функции и временные данные

В будущем мы научимся создавать собственные функции.

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

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

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

Однако утверждение, что функция всегда уничтожает абсолютно всё внутри себя, было бы неточным.

Объект может продолжить существовать, если:

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

Подробно это станет понятнее после изучения ссылок и областей видимости.


38. Зачем писать код внутри функций

Функции помогают:

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

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

Изучать собственные функции мы будем позже.


39. Пример работы программы

Представим программу, которая рассчитывает среднюю цену.

На накопителе находится файл с кодом:

average_price.py

Когда мы запускаем файл:

  1. Python загружает необходимые данные;
  2. создаёт список цен в оперативной памяти;
  3. вычисляет сумму;
  4. вычисляет длину списка;
  5. выполняет деление;
  6. выводит результат;
  7. завершает программу;
  8. операционная система освобождает память процесса.

Если программа только вывела результат, после закрытия он нигде не сохранится.

Если результат должен использоваться завтра, его нужно записать в постоянное хранилище.


40. Пример с сайтом

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

Постоянно в базе данных хранятся:

  • товары;
  • цены;
  • остатки;
  • описания.

Когда пользователь открывает страницу:

  1. сервер получает нужные записи из базы;
  2. временно помещает необходимые данные в оперативную память;
  3. формирует страницу;
  4. отправляет результат пользователю;
  5. освобождает ненужные временные данные.

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


41. Пример с торговым ботом

Торговый бот может постоянно хранить в базе данных или файлах:

  • историю сделок;
  • настройки;
  • результаты;
  • журналы работы.

В оперативной памяти во время работы могут находиться:

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

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


42. Почему скорость памяти важна

Процессор выполняет огромное количество операций.

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

Оперативная память позволяет быстро предоставлять процессору необходимые данные.

Упрощённо:

Накопитель — большой и постоянный, но медленнее
Оперативная память — быстрая, но временная и ограниченная

43. Почему нельзя хранить всё только в оперативной памяти

Если хранить всю информацию только в оперативной памяти:

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

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


44. Почему нельзя работать только с накопителем

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

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

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


45. Основная схема работы

Упрощённо работу программы можно представить так:

1. Код программы хранится на накопителе.
2. Пользователь запускает программу.
3. Необходимые данные загружаются в оперативную память.
4. Процессор выполняет команды.
5. Программа создаёт временные объекты.
6. Важные результаты записываются на накопитель.
7. Программа закрывается.
8. Временная память освобождается.

46. Основные различия

Постоянный накопитель

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

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

RAM или ОЗУ
  • хранит данные только во время работы;
  • используется запущенными программами;
  • работает значительно быстрее;
  • имеет ограниченный объём;
  • очищается после выключения или перезагрузки.

47. Основные выводы урока

Программы, игры, фотографии и Python-файлы постоянно хранятся на SSD или HDD.

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

Во время работы Python создаёт числа, строки, списки, кортежи и другие объекты в оперативной памяти.

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

Python автоматически управляет памятью, но программист всё равно должен понимать:

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

В следующей части мы подробнее рассмотрим:

  • переменные как ссылки;
  • объекты в оперативной памяти;
  • функцию id();
  • несколько ссылок на один объект;
  • удаление ссылок;
  • особенности изменяемых и неизменяемых объектов.