Для чего системные программы хранятся в постоянной памяти?

Обновлено: 24.11.2024

Раздел 404 Закона Сарбейнса-Оксли (SOX) требует, чтобы все публичные компании установили внутренний контроль и процедуры.

Закон о защите конфиденциальности детей в Интернете от 1998 года (COPPA) – это федеральный закон, который налагает особые требования на операторов доменов .

План North American Electric Reliability Corporation по защите критически важной инфраструктуры (NERC CIP) представляет собой набор стандартов.

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

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

Метаморфное и полиморфное вредоносное ПО – это два типа вредоносных программ (вредоносных программ), код которых может изменяться по мере их распространения.

Медицинская транскрипция (МТ) – это ручная обработка голосовых сообщений, продиктованных врачами и другими медицинскими работниками.

Электронное отделение интенсивной терапии (eICU) — это форма или модель телемедицины, в которой используются самые современные технологии.

Защищенная медицинская информация (PHI), также называемая личной медицинской информацией, представляет собой демографическую информацию, медицинскую .

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

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

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

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

Интерфейс управления облачными данными (CDMI) – это международный стандарт, определяющий функциональный интерфейс, используемый приложениями.

Износ флэш-памяти NAND — это пробой оксидного слоя внутри транзисторов с плавающим затвором флэш-памяти NAND.

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

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

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

  • Вы включаете компьютер.
  • Компьютер загружает данные из постоянной памяти (ПЗУ) и выполняет самотестирование при включении питания (POST), чтобы убедиться, что все основные компоненты работают правильно. В рамках этого теста контроллер памяти проверяет все адреса памяти с помощью операции быстрого чтения/записи, чтобы убедиться в отсутствии ошибок в микросхемах памяти. Чтение/запись означает, что данные записываются в бит, а затем считываются из этого бита.
  • Компьютер загружает базовую систему ввода-вывода (BIOS) из ПЗУ. BIOS предоставляет самую основную информацию об устройствах хранения, последовательности загрузки, безопасности, функции Plug and Play (автоматическое распознавание устройств) и некоторых других элементах.
  • Компьютер загружает операционную систему (ОС) с жесткого диска в оперативную память системы. Как правило, критически важные части операционной системы хранятся в оперативной памяти, пока компьютер включен. Это позволяет ЦП иметь немедленный доступ к операционной системе, что повышает производительность и функциональность всей системы.
  • Когда вы открываете приложение, оно загружается в ОЗУ. Для экономии использования оперативной памяти многие приложения сначала загружают только основные части программы, а затем загружают другие части по мере необходимости.
  • После загрузки приложения все файлы, открытые для использования в этом приложении, загружаются в ОЗУ.
  • Когда вы сохраняете файл и закрываете приложение, файл записывается на указанное устройство хранения, а затем он и приложение удаляются из ОЗУ.

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

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

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

Оперативная память — это основной объем памяти вашего компьютера. Термин ОЗУ означает оперативную память , и он появился в первые дни существования компьютеров, когда мэйнфреймы имели два типа памяти: произвольный доступ, в котором любой бит памяти мог быть адресован в любой момент; и Последовательная память (например, данные, хранящиеся на ленте), где доступ к битам возможен только в определенном порядке. Вся память вашего компьютера имеет произвольный доступ, так что не беспокойтесь о последовательной памяти.

ОЗУ — это рабочая область вашего компьютера. Если на вашем компьютере больше оперативной памяти, он может одновременно открывать больше программ и документов большего размера. Это похоже на то, что у вас есть большой рабочий стол, на котором можно разложить рабочие документы, а не крошечный письменный стол. Документы, которые вы редактируете в данный момент (и программы, которые позволяет вам это делать на вашем компьютере), хранятся в оперативной памяти.

ОЗУ состоит из банков микрочиповых транзисторов, которые либо включены, либо выключены (обозначают 1 или ноль). Чипам оперативной памяти требуется постоянное питание, чтобы помнить, что в них хранится; прерывание питания даже на доли секунды (возможно, вызванное соседней молнией) может привести к потере содержимого ОЗУ. По этой причине оперативная память считается энергозависимой (от «легко испаряется»), и именно поэтому важно часто сохранять свою работу в более постоянном хранилище, например на жестком диске.

Конкретным типом ОЗУ, используемым вашим компьютером, может быть SDRAM (синхронная динамическая RAM), RDRAM (динамическая RAM Rambus) или DDR SDRAM (SDRAM с удвоенной скоростью передачи данных), но не беспокойтесь о деталях. Просто убедитесь, что вы приобрели правильный тип для вашей системы, когда покупаете больше оперативной памяти.

Оперативная память обычно устанавливается в разъемы на материнской плате в виде модулей DIMM (двухрядных модулей памяти), небольших печатных плат, на которых установлены микросхемы ОЗУ. Вы даже можете установить больше оперативной памяти на свой компьютер, но вы должны принять меры предосторожности, чтобы статическое электричество не повредило оперативную память или материнскую плату. Архитектура конкретной материнской платы ограничивает объем дополнительной оперативной памяти, которую вы можете добавить.

Размер оперативной памяти измеряется в байтах, килобайтах, мегабайтах и т. д., как описано в разделе, посвященном двоичным числам. Типичный компьютер 2004 года может иметь 512 МБ оперативной памяти.

Виртуальная память

Объем оперативной памяти ограничивает размер и количество одновременно открытых программ и файлов данных. Обычно вы не можете одновременно открыть две программы, каждая из которых требует 70 МБ ОЗУ, на компьютере с 128 МБ ОЗУ.

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

Микрокомпьютеры также имеют некоторое количество ПЗУ (памяти только для чтения) на материнской плате. ПЗУ не требуется питание, чтобы запомнить его содержимое, поэтому именно здесь компьютер хранит программы, необходимые для запуска (загрузки) компьютерной системы. (Инструкции нельзя хранить в ОЗУ, так как ОЗУ теряет свое содержимое, когда компьютер выключен; и их нельзя хранить на жестком диске, так как для простого чтения данных с жесткого диска требуются программы.)

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

Инструкции по запуску, хранящиеся в ПЗУ ПК, являются частью BIOS (базовой системы ввода-вывода). BIOS также содержит низкоуровневый интерфейсный код, необходимый для доступа к дискам, клавиатуре и простого вывода на дисплей.

Обратите внимание, что то, что мы называем «ПЗУ», в настоящее время в большинстве случаев хранится на микросхеме EEPROM (электрически стираемое программируемое ПЗУ).Материнская плата включает в себя специальную схему, которая позволяет при необходимости обновлять «постоянное» содержимое чипа, но это делается редко (EEPROM можно перезаписывать только ограниченное количество раз, но это ограничение может быть 10 000 раз) <. /p>

"КМОП-память" компьютера – это небольшой объем "полупостоянной" памяти, в которой могут храниться изменяемые данные, которые должны оставаться доступными, пока компьютер выключен. Небольшая батарея на материнской плате поддерживает работу CMOS при отключении питания.

В памяти CMOS (называемой PRAM или «RAM параметров» на Macintosh) может храниться такая информация, как жесткий диск или копия ОС, с которой вы хотите загрузиться, каковы настройки вашего монитора по умолчанию и т. д. BIOS собирает эту информацию и использует ее во время загрузки. Память CMOS также может хранить время и дату, чтобы ваш компьютер помнил их, даже когда питание было выключено. Если ваш компьютер не запоминает правильное время или не запоминает системные настройки, когда он выключен, возможно, потребуется заменить маленькую батарею.

Обратите внимание, что я использовал термин «память CMOS» в кавычках. КМОП (произносится «See-Moss») — это тип транзисторной памяти, которая требует очень мало энергии для хранения данных, поэтому этот тип чипов использовался в первые дни для хранения полупостоянных данных. Однако в настоящее время почти ВСЕ чипы вашего компьютера (например, ОЗУ) используют технологию CMOS, и (ирония) «полупостоянная память CMOS» во многих современных ПК НЕ хранится на чипах CMOS, а может использовать флэш-память ( своего рода EEPROM). Но термины «память CMOS» и «CMOS» по-прежнему используются для обозначения полупостоянной памяти.

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

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

Поддержка операционной системой памяти и хранилища

На рис. 3-1 показано упрощенное представление того, как операционные системы управляют хранилищем и энергозависимой памятью. Как показано, энергозависимая основная память подключается непосредственно к ЦП через шину памяти. Операционная система управляет отображением областей памяти непосредственно в адресное пространство видимой памяти приложения. Хранилище, которое обычно работает на скорости, намного меньшей, чем у ЦП, подключается через контроллер ввода-вывода. Операционная система обрабатывает доступ к хранилищу через модули драйверов устройств, загруженные в подсистему ввода-вывода операционной системы.

Хранилище и энергозависимая память в операционной системе

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

Постоянная память как блочное хранилище

Первое расширение операционной системы для энергонезависимой памяти — это возможность обнаруживать наличие модулей энергонезависимой памяти и загружать драйвер устройства в подсистему ввода-вывода операционной системы, как показано на рис. 3-2. Этот драйвер NVDIMM выполняет две важные функции. Во-первых, он предоставляет интерфейс для управления и утилит системного администратора для настройки и мониторинга состояния оборудования постоянной памяти. Во-вторых, он работает аналогично драйверам устройств хранения.

Постоянная память как блочное хранилище

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

На рис. 3-2 также показан драйвер таблицы преобразования блоков (BTT), который можно дополнительно настроить в подсистеме ввода-вывода. Устройства хранения, такие как жесткие диски и твердотельные накопители, представляют собственный размер блока с 512 КБ и 4 КБ в качестве двух распространенных собственных размеров блока.Некоторые устройства хранения, особенно твердотельные накопители NVM Express, гарантируют, что при сбое питания или сбое сервера во время записи блока будет записан либо весь блок, либо ни один из них. Драйвер BTT обеспечивает такую ​​же гарантию при использовании энергонезависимой памяти в качестве блочного запоминающего устройства. Большинство приложений и файловых систем зависят от этой атомарной гарантии записи и должны быть настроены на использование драйвера BTT, хотя операционные системы также предоставляют возможность обойти драйвер BTT для приложений, которые реализуют собственную защиту от частичного обновления блоков.

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

Следующее расширение операционной системы — сделать файловую систему осведомленной и оптимизированной для постоянной памяти. Файловые системы, которые были расширены для постоянной памяти, включают Linux ext4 и XFS и Microsoft Windows NTFS. Как показано на рис. 3-3, эти файловые системы могут либо использовать блочный драйвер в подсистеме ввода-вывода (как описано в предыдущем разделе), либо обойти подсистему ввода-вывода, чтобы напрямую использовать постоянную память для загрузки/сохранения с байтовой адресацией. память как самый быстрый и кратчайший путь к данным, хранящимся в постоянной памяти. В дополнение к устранению операций ввода-вывода, этот путь позволяет выполнять запись небольших данных быстрее, чем традиционные блочные устройства хранения, которые требуют, чтобы файловая система считывала исходный размер блока устройства, изменяла блок, а затем записывала полный блок обратно в устройство.

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

Эти постоянные файловые системы с поддержкой памяти по-прежнему предоставляют знакомые стандартные файловые API для приложений, включая системные вызовы open , close , read и write. Это позволяет приложениям продолжать использовать знакомые файловые API, получая при этом более высокую производительность энергонезависимой памяти.

Файлы с отображением памяти

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

Приложения сопоставляют файл с памятью, сначала открывая файл, а затем передавая полученный дескриптор файла в качестве параметра системному вызову mmap() в Linux или MapViewOfFile() в Windows. Оба возвращают указатель на копию части файла в памяти. В листинге 3-1 показан пример кода Linux C, в котором память отображает файл, записывает данные в файл, обращаясь к нему, как к памяти, а затем использует системный вызов msync для выполнения операции ввода-вывода для записи измененных данных в файл. на запоминающем устройстве. В листинге 3-2 показаны эквивалентные операции в Windows. Мы рассмотрим и выделим ключевые шаги в обоих примерах кода.

mmap_example.c — файл с отображением памяти в примере Linux

Строки 67–74: мы проверяем, что вызывающая сторона передала имя файла, который можно открыть. Открытый вызов создаст файл, если он еще не существует.

Строка 76: мы извлекаем статистику файла, чтобы использовать длину при сопоставлении памяти файла.

Строка 84: мы сопоставляем файл с адресным пространством приложения, чтобы наша программа могла получить доступ к содержимому, как если бы оно находилось в памяти. Во втором параметре мы передаем длину файла, запрашивая у Linux инициализацию памяти полным файлом. Мы также сопоставляем файл с правами доступа ЧТЕНИЕ и ЗАПИСЬ, а также как ОБЩИЙ, что позволяет другим процессам сопоставлять один и тот же файл.

Строка 91: мы удаляем дескриптор файла, который больше не нужен после сопоставления файла.

Строка 94: мы записываем данные в файл, обращаясь к ним, как к памяти, через указатель, возвращаемый mmap .

Строка 101: мы явно сбрасываем новую записанную строку на резервное запоминающее устройство.

В листинге 3-2 показан пример кода C, в котором память отображает файл, записывает данные в файл, а затем использует системные вызовы FlushViewOfFile() и FlushFileBuffers() для сброса измененных данных в файл на устройстве хранения. .

Файл с отображением памяти на примере Windows

Строки 45–75: как и в предыдущем примере для Linux, мы берем имя файла, переданное через argv, и открываем файл.

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

Строка 89: мы делаем первый шаг к сопоставлению памяти с файлом, создавая сопоставление файла. Этот шаг еще не сопоставляет файл с пространством памяти нашего приложения.

Строка 106: этот шаг сопоставляет файл с нашим пространством памяти.

Строка 125: Как и в предыдущем примере с Linux, мы записываем строку в начало файла, обращаясь к файлу, как к памяти.

Строка 132: мы сбрасываем измененную страницу памяти в резервное хранилище.

Строка 139: мы сбрасываем весь файл в резервное хранилище, включая любые дополнительные метаданные файла, поддерживаемые Windows.

Строки 146–157: мы удаляем сопоставление файла, закрываем его и выходим из программы.

Файлы, сопоставленные с памятью, с хранилищем

На рис. 3-4 показано, что происходит внутри операционной системы, когда приложение вызывает mmap() в Linux или CreateFileMapping() в Windows. Операционная система выделяет память из своего кэша страниц памяти, сопоставляет эту память с адресным пространством приложения и создает связь с файлом с помощью драйвера запоминающего устройства.

Когда приложение считывает страницы файла в памяти, и если эти страницы отсутствуют в памяти, в операционной системе возникает исключение ошибки страницы, которая затем считывает эту страницу в основную память посредством операций ввода-вывода хранилища. Операционная система также отслеживает записи в эти страницы памяти и планирует асинхронные операции ввода-вывода для записи изменений обратно в первичную копию файла на устройстве хранения. В качестве альтернативы, если приложение хочет убедиться, что обновления записаны обратно в хранилище, прежде чем продолжить, как мы сделали в нашем примере кода, системный вызов msync в Linux или FlushViewOfFile в Windows выполняет сброс на диск. Это может привести к тому, что операционная система приостановит работу программы до завершения записи, аналогично описанной ранее операции записи в файл.

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

Прямой доступ к энергонезависимой памяти (DAX)

Функция прямого доступа к энергонезависимой памяти в операционных системах, называемая DAX в Linux и Windows, использует файловые интерфейсы с отображением памяти, описанные в предыдущем разделе, но использует преимущества встроенной способности энергонезависимой памяти как для хранения данных, так и для использования. как память. Постоянная память может быть изначально сопоставлена ​​с памятью приложения, что избавляет операционную систему от необходимости кэшировать файлы в энергозависимой основной памяти.

Чтобы использовать DAX, системный администратор создает файловую систему в модуле постоянной памяти и монтирует эту файловую систему в дерево файловой системы операционной системы. Для пользователей Linux устройства постоянной памяти будут отображаться как специальные файлы устройств /dev/pmem*. Чтобы отобразить физические устройства постоянной памяти, системные администраторы могут использовать утилиты ndctl и ipmctl, показанные в листингах 3-3 и 3-4.

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