Программа в ОЗУ

Обновлено: 20.11.2024

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

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

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

3 ответа 3

Есть аналогия, которую я использую при описании взаимодействия всей системы ЦП/ОЗУ/жесткого диска. Я проведу всю аналогию, и она охватывает не только оперативную память, но я думаю, что она поможет.

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

Если бы у вас было два повара (многоядерный процессор), вы могли бы готовить некоторые блюда быстрее, один человек мог бы резать морковь, а другой чистил картошку. Однако в некоторых пунктах рецепта есть вещи, которые может сделать только один повар, например, смешать все в стационарном миксере. Неважно, 1 повар у вас или 4 повара, на смешивание ингредиентов уходит одинаковое количество времени. Вот почему вы просто не можете использовать многопоточность для всего, некоторые шаги требуют времени, и его нельзя разделить между процессорами.

Теперь о памяти:
Самой быстрой памятью являются регистры процессора, они как разделочная доска. Он очень маленький и может содержать только то, над чем вы сейчас работаете.

Если перед вами что-то не так, куда вы идете? Вы идете в кладовую и получаете это, это Кэш ЦП. Вы не покидали кухню, но вам пришлось на несколько секунд прервать свои дела и потратить некоторое время, чтобы пройти в кладовую и взять то, что вам нужно.

Но что делать, если нужной вещи нет в кладовке? Ну, вы идете в магазин на углу вниз по улице, это ваша оперативная память. Теперь выход из кухни (CPU) и поездка в магазин на углу (RAM) занимает несколько минут, и это в 100 раз медленнее, чем дойти до кладовой внутри кухни, но ваша кладовая ограничена по размеру, и вы не можете хранить все там. (Двухканальная память — это все равно, что ехать на двух машинах в магазин: вы можете взять с собой в два раза больше памяти, так что вам не нужно совершать столько поездок)

Но магазин на углу — это всего лишь маленький магазин на углу. Что делать, если вам нужно что-то, чего нет в магазине на углу? Ну, езжай в город и сходи в большой Мега-Март, это твой жесткий диск. Сейчас Мега-Март огромен, там можно было купить почти все, но есть недостатки. Мега-Март находится за много миль по сравнению с магазином на углу, и дорога туда занимает час, а работникам там все равно, и они очень медленно проверяют вас, это в 100 раз дольше, чем идти в магазин на углу ( RAM) и в 100 000 раз дольше, чем просто ходить в кладовку (CPU Cache). И все это время ваш рецепт (Программа) ждет, пока вы добудете необходимый ингредиент для продолжения.

А как быть с теми вещами суперспецзаказа, которых нет даже в Мега-Марте? Ну, вы идете и заказываете его по почте и ждете 1-3 дня, пока он не появится, это что-то из Интернета. по сравнению с ожиданием нескольких секунд, чтобы пойти в кладовую, это вечность.

Введение.
В отличие от компьютерных приложений, программное обеспечение встроенных систем не выполняется в оперативной памяти. В подавляющем большинстве современных архитектур встраиваемых систем программы (инструкции) хранятся во флэш-памяти микроконтроллера (кодовая флэш-память/программная флэш-память) и выполняются непосредственно на месте. Ранее ПЗУ использовались для хранения и выполнения программ.
Из-за новых технологий в запоминающих устройствах в настоящее время используется флэш-память. ОЗУ является энергозависимой памятью и ничего не содержит после сброса или выключения питания. Он используется для хранения данных и хранения значений переменных во время выполнения. Можно безопасно разработать встроенный продукт, сохранив и выполнив программу во флэш-памяти кода (используя инструмент загрузки и отладчик). MCU имеют выделенные участки памяти для флэш-памяти кода и ОЗУ. Карты памяти в продвинутых микроконтроллерах содержат флэш-память данных, DSPR, PSPR, загрузочное ПЗУ, EEPROM, отладочную память и т. д. Чтобы упростить задачу, мы рассмотрим флэш-память кода для хранения и выполнения программ и ОЗУ для хранения переменных и данных. Существуют определенные ситуации, когда выполнение подпрограмм из ОЗУ становится обязательным.
В этой статье рассказывается о необходимости копирования участка кода в оперативную память, различных способах его реализации, его преимуществах и недостатках. Копирование в ОЗУ означает размещение двух копий кода — одной во флэш-памяти, а другой в ОЗУ.

Рис.1. Карта памяти микроконтроллера

  1. Во время перепрограммирования флэш-памяти (функция загрузчика) определенные функции должны выполняться из ОЗУ, например стирание программной флэш-памяти, запись данных в программную флэш-память. Код не должен запускаться из той же флэш-памяти, которая стирается/программируется. В некоторых чипах флеш-память зависает при выполнении операций с флешкой. Следовательно, раздел кода необходимо поместить в ОЗУ и выполнить.
  2. Во время перепрограммирования флэш-памяти (функции загрузчика) адреса векторов прерываний и ISR должны размещаться и выполняться из ОЗУ.
  3. Загрузчики выполняются из ОЗУ. Самый безопасный способ для работы загрузчика — получить файл загрузчика с хост-устройства и поместить полный код в ОЗУ.
  4. Запуск программ из ОЗУ выполняется намного быстрее, чем из флэш-памяти. размещение часто выполняемого кода в оперативной памяти для оптимизации времени.
  5. Некоторые планировщики во встроенных системах создают задачу в ОЗУ, которая указывает на программу во флэш-памяти.
  6. Запускайте приложение из ОЗУ во время выполнения флэш-памяти.

Скопировать раздел кода и выполнить из ОЗУ:

<р>1. Некоторые контроллеры предоставляют довольно простой способ копирования кода в ОЗУ. Все, что вам нужно, это просмотреть инструментальную цепочку и руководства пользователя. Различные способы перечислены ниже –

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

Программа отображает память в память. Это означает, что операционная система резервирует 5 МБ (или больше) места для программы, но делит его на страницы (фрагменты) по 1 МБ (или больше) и загружает каждую страницу только в первый раз, когда она используется. Идея состоит в том, что если вы не используете функцию программы, она никогда не загружается.

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

Вещи, "отображенные" в память, могут фактически присутствовать в ОЗУ. Когда программа пытается получить доступ к этой странице памяти, MMU (блок управления памятью) вызывает ошибку страницы, которая обрабатывается ОС, которая загружает соответствующий ресурс в ОЗУ для программы, а затем возобновляет выполнение программы с того момента, когда вина была поднята. Это происходит прозрачно для самой программы.

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

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

Просто чтобы исправить то, чего больше никто не касается.

загрузка и выгрузка памяти, за неимением лучшего слова, программа?

Оперативная память — это самая тупая и наименее функциональная часть вашего ПК. Он не действует сам по себе.

Операционная система отвечает за чтение образа процесса с диска, запись его в память и «исправление» его любым способом, который требует конкретная ОС (например, вставка образов библиотек по определенным адресам и т. д.).

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

Как ОС попадает в оперативную память? Что ж, загрузчик, представляющий собой мини-ОС, которая поставляется с вашей материнской платой/ЦП в той или иной форме ПЗУ, знает достаточно, чтобы иметь возможность прочитать жесткий диск (или SD-карту или что-то еще), а затем загрузить начальную часть. ОС из него в оперативную память и начните его выполнение.

Как ОС попадает в оперативную память?Что ж, загрузчик, представляющий собой мини-ОС, которая поставляется с вашей материнской платой/ЦП в той или иной форме ПЗУ, знает достаточно, чтобы иметь возможность прочитать жесткий диск (или SD-карту или что-то еще), а затем загрузить начальную часть. ОС из него в оперативную память и начните его выполнение.

Незначительные придирки. В архитектуре ПК сам загрузчик является установленным компонентом, то есть он не связан с материнской платой. Скорее, BIOS (который идет в комплекте с материнской платой) — это первый код, который выполняется в системе при включении питания. Процессор x86 получит свою первую инструкцию по адресу 0xffff_fff0, это запрограммированная константа.

На платформах, предшествующих UEFI, существует крошечное ПЗУ BIOS, расположенное по этому адресу в карте памяти платформы. У него есть одна или несколько инструкций, которые заставляют ЦП переходить к основной области памяти BIOS (флеш-памяти). Этот основной компонент BIOS выполняет множество задач системного уровня. После того, как BIOS выполнит все свои платформенные задачи, он перечислит диски в системе в определенном порядке и проверит, является ли один из них загрузочным (имеет загрузочный раздел, отформатированный с помощью загрузчика). Если BIOS находит загрузочный диск, он загружает загрузочный раздел этого диска по физическому адресу 0x7c00, а затем передает управление загрузчику. Подробнее см. здесь.

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

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

Пользователи Microsoft Windows

  1. Нажмите Ctrl + Shift + Esc на клавиатуре, чтобы открыть диспетчер задач Windows.
  2. В окне диспетчера задач нажмите вкладку "Процессы", если она еще не выбрана.

Как показано на приведенном выше примере, на вкладке "Процессы" вы увидите каждый из запущенных процессов и объем используемой ими памяти. Например, выделенный файл firefox.exe использует более 1 ГБ памяти.

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

Пользователи Linux

Пользователи Linux могут использовать команду top, чтобы отобразить текущую общую, используемую и свободную память. Он также может отображать каждый PID и объем используемой им памяти.

пользователи macOS

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

  1. В главном меню macOS выберите Приложения > Утилиты.
  2. Выберите в списке утилиту Activity Monitor.

В утилите "Мониторинг активности" вы можете увидеть имя каждого запущенного процесса (столбец "Имя процесса") и объем используемой каждым процессом памяти (столбец "Реальная память").

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