~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ FAFED9E2988B11896DD2DB59751A8728__1717429560 ✰
Заголовок документа оригинал.:
✰ Memory management - Wikipedia ✰
Заголовок документа перевод.:
✰ Управление памятью — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Memory_management ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/fa/28/fafed9e2988b11896dd2db59751a8728.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/fa/28/fafed9e2988b11896dd2db59751a8728__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 09:45:47 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 3 June 2024, at 18:46 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Управление памятью — Википедия Jump to content

Управление памятью

Из Википедии, бесплатной энциклопедии

Управление памятью — это форма управления ресурсами, применяемая к памяти компьютера . Основным требованием к управлению памятью является предоставление способов динамического выделения частей памяти программам по их запросу и освобождения ее для повторного использования, когда она больше не нужна. более одного процесса . Это критически важно для любой продвинутой компьютерной системы, в которой в любой момент времени может выполняться [1]

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

В некоторых операционных системах , например OS/360 и последующих версиях , [2] Память управляется операционной системой. [примечание 1] В других операционных системах, например Unix-подобных , управление памятью осуществляется на уровне приложения.

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

Ручное управление памятью [ править ]

Пример внешней фрагментации

Задача выполнения запроса на выделение состоит в поиске блока неиспользуемой памяти достаточного размера. Запросы памяти удовлетворяются путем выделения частей из большого пула. [заметка 2] памяти, называемой кучей [заметка 3] или бесплатный магазин . В любой момент времени некоторые части кучи используются, а некоторые «свободны» (не используются) и, следовательно, доступны для будущего распределения. На языке C функция, выделяющая память из кучи, называется malloc а функция, которая берет ранее выделенную память и помечает ее как «свободную» (для использования при будущих выделениях), называется free. [примечание 4]

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

Эффективность [ править ]

Реализованный конкретный алгоритм динамического выделения памяти может существенно повлиять на производительность. Исследование, проведенное в 1994 году Digital Equipment Corporation, иллюстрирует накладные расходы , связанные с различными распределительами. Наименьшая средняя длина пути команд , необходимая для выделения одного слота памяти, составляла 52 (согласно измерениям с помощью профилировщика уровня инструкций в различных программах). [1]

Реализации [ править ]

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

Распределение блоков фиксированного размера [ править ]

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

Блоки друзей [ править ]

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

Распределение плит [ править ]

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

Распределение стека [ править ]

Многие Unix-подобные системы, а также Microsoft Windows реализуют функцию, называемую alloca для динамического распределения памяти стека аналогично принципу на основе кучи malloc. Компилятор обычно преобразует его во встроенные инструкции, манипулирующие указателем стека. [5] Хотя нет необходимости вручную освобождать выделенную таким образом память, поскольку она освобождается автоматически, когда функция, вызвавшая allocaвозвращается, существует риск переполнения. А поскольку alloca — это специальное расширение, которое встречается во многих системах, но никогда не встречается в POSIX или стандарте C, его поведение в случае переполнения стека не определено.

Более безопасная версия alloca под названием _malloca, который сообщает об ошибках, существует в Microsoft Windows. Это требует использования _freea. [6] gnulib предоставляет эквивалентный интерфейс, хотя вместо выдачи исключения SEH при переполнении он делегирует функции malloc при обнаружении слишком большого размера. [7] Подобную функцию можно имитировать с помощью ручного учета и проверки размера, например, при использовании alloca_account в glibc. [8]

Автоматизированное управление памятью [ править ]

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

переменными стека вызовов управление Автоматическое

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

Сбор мусора [ править ]

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

Подсчет ссылок [ править ]

Подсчет ссылок — это стратегия обнаружения того, что память больше не может использоваться программой, путем поддержания счетчика количества независимых указателей, указывающих на память. Всякий раз, когда новый указатель указывает на участок памяти, программист должен увеличить счетчик. Когда указатель меняет то место, куда он указывает, или когда указатель больше ни на что не указывает или сам был освобожден, счетчик должен уменьшиться. Когда счетчик упадет до нуля, память следует считать неиспользуемой и освобожденной. Некоторые системы подсчета ссылок требуют участия программиста, а некоторые реализуются автоматически компилятором. Недостаток подсчета ссылок заключается в том, что могут возникать циклические ссылки, вызывающие утечку памяти. Это можно смягчить, либо добавив концепцию «слабой ссылки» (ссылка, которая не участвует в подсчете ссылок, но получает уведомление, когда объект, на который она указывает, больше не действителен), либо объединив подсчет ссылок и сборку мусора вместе. .

Пулы памяти [ править ]

Пул памяти — это метод автоматического освобождения памяти в зависимости от состояния приложения, например жизненного цикла запроса или транзакции. Идея состоит в том, что многие приложения выполняют большие фрагменты кода, которые могут генерировать выделение памяти, но в какой-то момент выполнения все эти фрагменты становятся недействительными. Например, в веб-службе после каждого запроса веб-служба больше не нуждается в памяти, выделенной во время выполнения запроса. Таким образом, вместо отслеживания того, используется ли память в данный момент или нет, память выделяется в соответствии с запросом или этапом жизненного цикла, с которым она связана. Когда этот запрос или этап пройден, вся связанная память освобождается одновременно.

Системы с виртуальной памятью [ править ]

Виртуальная память — это метод отделения организации памяти от физического оборудования. Приложения работают с памятью через виртуальные адреса . Каждая попытка приложения получить доступ к определенному адресу виртуальной памяти приводит к преобразованию адреса виртуальной памяти в реальный физический адрес . [9] Таким образом, добавление виртуальной памяти обеспечивает детальный контроль над системами памяти и методами доступа.

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

Несмотря на то, что память, выделенная для определенных процессов, обычно изолирована, иногда процессам требуется возможность совместного использования информации. Общая память — один из самых быстрых методов межпроцессного взаимодействия .

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

и последующих версиях Управление памятью в OS/ 360

IBM System/360 не поддерживает виртуальную память. [примечание 5] Изоляция памяти заданий дополнительно осуществляется с помощью ключей защиты , при этом каждому заданию назначается отдельный ключ хранилища: 0 для супервизора или 1–15. Управление памятью в OS/360 является функцией супервизора . Хранение запрашивается с помощью GETMAIN макроса и освобождается с помощью FREEMAIN макрос, который приводит к вызову супервизора ( SVC ) для выполнения операции.

система В OS/360 детали различаются в зависимости от того, как сгенерирована , например, для PCP , MFT , MVT .

задания В OS/360 MVT распределение в пределах региона или общей системной области очереди (SQA) основано на подпулах — областях, размер которых кратен 2 КБ — размеру области, защищенной ключом защиты. Подпулы имеют номера 0–255. [10] Внутри региона подпулам назначается либо защита хранилища задания, либо ключ супервизора, ключ 0. Подпулы 0–127 получают ключ задания. Первоначально создается только нулевой подпул, и все пользовательские запросы к памяти удовлетворяются из подпула 0, если в запросе памяти не указано иное. Подпулы 250–255 создаются супервизором по запросам памяти от имени задания. Большинству из них присвоен ключ 0, хотя некоторые получают ключ задания. Номера подпулов также актуальны в MFT, хотя детали гораздо проще. [11] MFT использует фиксированные разделы, переопределяемые оператором, вместо динамических регионов, а PCP имеет только один раздел.

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

Детали для OS/VS1 аналогичны. [13] для MFT и для MVT; Детали для OS/VS2 аналогичны данным для MVT, за исключением того, что размер страницы составляет 4 КиБ. Как для OS/VS1, так и для OS/VS2 общая область системной очереди (SQA) не поддается выгрузке.

В MVS адресное пространство включает в себя дополнительную разделяемую область с возможностью выдачи страниц, общую область хранения (CSA), и дополнительную частную область, рабочую область системы (SWA). Кроме того, все ключи хранения 0–7 зарезервированы для использования привилегированным кодом.

См. также [ править ]

Примечания [ править ]

  1. ^ Однако среда выполнения языкового процессора может разделять память, динамически полученную от операционной системы, например, для реализации стека.
  2. ^ В некоторых операционных системах, например OS/360 , свободное хранилище может быть разделено различными способами, например, на подпулы в OS/360 , под чертой, над чертой и над чертой в z/OS .
  3. ^ Не путать с несвязанной структурой данных кучи .
  4. ^ Упрощенную реализацию этих двух функций можно найти в статье «Управление внутренней памятью». [3]
  5. ^ За исключением модели 67.

Ссылки [ править ]

  1. ^ Перейти обратно: а б Детлефс, Д.; Доссер, А.; Зорн, Б. (июнь 1994 г.). «Затраты на выделение памяти в больших программах на C и C++» (PDF) . Программное обеспечение: практика и опыт . 24 (6): 527–542. CiteSeerX   10.1.1.30.3073 . дои : 10.1002/спе.4380240602 . S2CID   14214110 .
  2. ^ «Распределение основной памяти» (PDF) . Концепции и возможности операционной системы IBM/360 (PDF) . Справочная библиотека систем IBM (первое издание). Корпорация IBM. 1965. с. 74 . Проверено 3 апреля 2019 г.
  3. ^ Джонатан Бартлетт. «Управление внутренней памятью» . IBM DeveloperWorks .
  4. ^ Зильбершац, Авраам ; Гэлвин, Питер Б. (2004). Концепции операционной системы . Уайли. ISBN  0-471-69466-5 .
  5. ^ alloca(3) Linux программиста Руководство – Библиотечные функции
  6. ^ "_маллока" . Документация Microsoft CRT .
  7. ^ "gnulib/malloca.h" . Гитхаб . Проверено 24 ноября 2019 г.
  8. ^ "glibc/include/alloca.h" . Зеркала Берена Минора. 23 ноября 2019 г.
  9. ^ Таненбаум, Эндрю С. (1992). Современные операционные системы . Энглвуд Клиффс, Нью-Джерси: Прентис-Холл. п. 90. ИСБН  0-13-588187-0 .
  10. ^ OS360Sup , стр. 82–85 .
  11. ^ OS360Sup , стр. 82 .
  12. ^ Корпорация IBM (май 1973 г.). Логика программы: Операционная система IBM System/360 MVT Supervisor (PDF) . стр. 107–137 . Проверено 3 апреля 2019 г.
  13. ^ OSVS1Dig , с. 2.37-2.39 .

Библиография [ править ]

OS360Sup
OS Release 21 Службы супервизора операционной системы IBM System/360 и инструкции по макросам (PDF) . Справочная библиотека систем IBM (Восьмое изд.). ИБМ . Сентябрь 1974 г. GC28-6646-7.
ОСВС1Вы
Справочный дайджест программиста OS/VS1, выпуск 6 (PDF) . Системы (Шестое изд.). ИБМ . 15 сентября 1976 г. GC24-5091-5 с TNL.

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: FAFED9E2988B11896DD2DB59751A8728__1717429560
URL1:https://en.wikipedia.org/wiki/Memory_management
Заголовок, (Title) документа по адресу, URL1:
Memory management - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)