У вас вопросы?
У нас ответы:) SamZan.net

Лекция 5 Распределение оперативной памяти в операционной системе 1

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 28.12.2024

Лекция 5. Распределение оперативной памяти в операционной системе

1. Общие принципы организации управления оперативной памятью.

2. Организация управления виртуальной памятью.

3. Распределение оперативной памяти в MS-DOS.

4. Распределение оперативной памяти в Windows NT.

1. Общие принципы организации управления оперативной памятью

Способы управления памятью.

Простое непрерывное распределение и распределение с перекрытием (оверлейные структуры)

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

область, занимаемая операционной системой;

область, в которой размещается исполняемая задача;

незанятая ничем (свободная) область памяти.

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

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

Такая схема влечет за собой два вида потерь вычислительных ресурсов – потеря процессорного времени, потому что процессор простаивает, пока задача ожидает завершения операции  ввода/вывода, и потеря самой оперативной памяти, потому что далеко не каждая программа использует всю память, а режим работы в этом случае однопрограммный. Подобную схему распределения памяти поддерживает DOS.

Метод распределения памяти с перекрытием – оверлейные структуры (overlay – перекрытие, расположение поверх чего-то) – предполагает, что вся программа может быть разбита на части – сегменты. Каждая оверлейная программа имеет одну главную часть (main) и несколько сегментов (segment), причем в памяти компьютера одновременно могут находиться одна главная ее часть и один или несколько не перекрывающихся сегментов. Пока в оперативной памяти располагаются выполняющиеся сегменты, остальные находятся во внешней памяти. После того, как текущий (выполняющийся) сегмент завершит свое выполнение, возможны два варианта. Либо он сам (если данный сегмент не нужно сохранять в памяти в его текущем состоянии) обращается к ОС с указанием, какой сегмент дожжен быть загружен в память следующим. Либо он возвращает управление главному сегменту задачи (в модель main), и уже тот обращается к ОС с указанием, какой сегмент сохранить, а какой сегмент загрузить в оперативную память, и вновь отдает управление одному из сегментов, располагающихся в памяти. Простейшие схемы сегментирования предполагают, что в памяти в каждый конкретный момент времени может располагаться только один сегмент (вместе с модулем main). Более сложные схемы, используемые в больших вычислительных системах, позволяют располагать по несколько сегментов.

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

Распределение со статическими и динамическими разделами.

Любая ОС, поддерживающая одновременно работу более одного пользователя, должна обладать механизмом разделения центральной памяти между совместно выполняющимися процессами. Многие мультипрограммные системы разбивают память на разделы с выделением каждому процессу своего раздела. Размер и расположение разделов могут быть либо заранее заданы (разделы фиксированного размера), либо назначаться динамически в процессе выполнения заданий (разделы переменного размера) (рис. 1).

Исходные данные.

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

Рис. 1 Исходные данные для пояснения способов  распределения памяти

Полный объем доступной памяти ЭВМ предполагается равным 56000 байт; ОС занимает первые 10000 байт. Память, не занятая ОС, состоит из 4-х разделов. Раздел 1 начинается с адреса 10000 сразу за ОС и имеет длину 18000 байт. Раздел 2-3 – по 10000 байт каждый. Раздел 4 – 8000 байт.

В простой схеме распределения с разделением фиксированного размера каждое входящее задание загружается в наименьший подходящий по объему раздел (рис. 2). Если размер раздела превосходит размер задания, то оставшееся внутри раздела память не используется. Система, имея вначале пустыми все 4-е раздела, первым делом загрузит задание 1 в раздел 2. Затем задание 2 будет загружено в единственно достаточно большой для него раздел 1. Задание 3 и 4 загружаются в разделы 3 и 4. После этого все разделы оказываются занятыми, поэтому больше заданий загрузить нельзя.

Рис. 2 Распределение памяти с разделами фиксированного размера

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

По окончании задания 2 в раздел 1 загрузится задание 5.

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

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

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

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

выделять раздел ровно такого объема, который нужен под текущую задачу;

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

Разделы с подвижными границами.

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

Рис. 3 Распределение памяти с подвижными границами

Вначале вся память (кроме той, что отведена ОС) не распределена, т.к. заранее нет определенных разделов. Раздел для задания 1 создается при его загрузке. Предположим, что этот раздел, непосредственно за ОС. Затем заданию 2 отводится раздел, следующий сразу за заданием 1 и т.д. Объем свободной памяти, оставшейся за заданием 5, для загрузки очередного задания уже недостаточен.

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

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

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

Единой проблемой для всех общецелевых способов динамического распределения является фрагментация памяти. Фрагментация имеет место, когда доступная свободная память разбита на несколько не смежных блоков, каждый из которых  слишком мал для использования. Чтобы, например, разместить задание 1, в целом имеется более чем достаточно свободной памяти; однако из-за того, что нет ни одного свободного блока достаточно большого размера, оно не может быть загружено.

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

Рис. 4 Распределение памяти с перемещающимися разделами

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

2. Организация управления виртуальной памятью

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

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

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

Рис. 5 Общий принцип организации виртуальной памяти

С позиции объемов двухэтапной схемы отображения адресов выделяются следующие три ситуации:

1. объем виртуального адресного пространства программы Vv меньшем объема физической памяти Vm. Данная ситуация в настоящее время практически не встречается, но тем не менее это реальное соотношение;

2. Vv = Vm. Встречается очень часто, особенно характерна она была для не дорогих вычислительных комплексов. Для этого случая имеется большое количество методов распределения оперативной памяти.

3. Vv > Vm. Такая ситуация встречается повсеместно во всех современных персональных компьютерах и программах. Для нее имеется несколько методов распределения памяти, отличающихся как сложностью, так и эффективностью.

Страничный способ организации виртуальной памяти.

В системе с размещением страниц по запросу виртуальная память процесса разделена на страницы некоторой фиксированной длинны, которые, как правило, размещаются во внешней памяти. Файл размещения виртуальной памяти называют файлом подкачки или страничным файлом (pagefile.sys). В Unix-системах для этих целей выделяется специальный раздел – swap. Реальная память ЭВМ разделяется на страничные кадры той же длины, что и страницы. Любая страница любого процесса  потенциально может быть загружена в любой строчный кадр реальной памяти. Отображение в строчные кадры описывается таблицей отображения страницы (ТОС); для каждого процесса в системе имеется одна ТОС. ТОС используется аппаратурой для преобразования адресов виртуальной памяти программы в соответствующие адреса реальной памяти. Такой перевод виртуальных адресов в реальные, называется динамическим преобразованием адресов.

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

При обращении к виртуальной странице, не оказавшейся в данный момент в оперативной памяти, возникает прерывание и управление передается диспетчеру памяти, который должен найти свободное место. Обычно предоставляется первая же свободная страница. Если свободной станицы нет, то диспетчер памяти по одной из дисциплин замещения (LRU – последний из недавно использованных; LFU – используемый реже всех остальных; FIFO – первый пришедший первым и выбывает; random – случайный выбор) определит страницу, подлежащую расформированию или сохранению во внешней памяти. На ее место он разместит ту новую виртуальную страницу, к которой было обращение из задачи, но ее не оказалось в оперативной памяти.

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

Предположим, что обращение к слову в центральной памяти занимает 1 мкс, а считывание страницы из внешней памяти – в среднем 10 мс (10.000мкс). Предположим также, что в среднем для всех заданий в системе только 1 из 100 обращений к виртуальной памяти вызывает страничное прерывание. Даже при такой очевидно малой  величине страничных прерываний система хорошо работать не будет. На каждое 100 обращений (требующих 100 мкс) система потратит 10.000 мкс на считывание страниц из внешней памяти. Т.е., вычислительная система тратит приблизительно 99% своего времени на свопинг страниц и только 1% на полезную работу. Этот полный разлад в работе называется  пробуксовкой. Очевидно, что пробуксовка –  это очень плохое явление. Чтобы его не допускать необходимо увеличить объем оперативной памяти (сейчас это стало самым простым решением), уменьшить количество параллельно выполняемых задач либо попробовать использовать более эффективные дисциплины замещения.

В абсолютном большинстве современных ОС используется дисциплина замещения LRU (Last Recently Used – дольше других неиспользуемый) как самая эффективная (OS/2, Linux). В операционной системе Windows NT, разработчики, желая сделать систему максимально независимой от аппаратных возможностей процессора, пошли на отказ от этой дисциплины и применили правило FIFO. А для того, чтобы сгладить неэффективность этой стратегии управления виртуальной памятью, была введена буферизация тех страниц, которые должны быть записаны в файл подкачки на диск или просто расформированы. Принцип буферизации прост. Прежде чем замещаемая страница будет перемещена во внешнюю память или просто расформирована, она помечается как кандидат на выгрузку. Если в следующий раз произойдет обращение к странице, находящейся в таком буфере, то страница никуда не выгружается и уходит в конец списка FIFO. В противном случае страница действительно выгружается, а на ее места в буфер попадает следующий кандидат.

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

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

Существуют и два существенных обстоятельства, оцениваемые как недостатки такого способа распределения памяти:

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

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

Сегментный способ организации виртуальной памяти.

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

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

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

Если бит присутствия в дескрипторе указывает, что сейчас этот сегмент находится не в оперативной памяти, а во внешней, то поля адреса и длины используются для указания адреса сегмента в координатах внешней памяти. При этом возникает прерывание, и управление передается через диспетчер памяти программе загрузки сегмента. Пока происходит поиск сегмента во внешней памяти и загрузка его в оперативную, диспетчер памяти определяет подходящее для сегмента место. Возможно, что свободного места нет, и тогда принимается решение о выгрузке какого-нибудь сегмента и о его перемещении во внешнюю память. При поиске свободного места используется одна из вышеперечисленных дисциплин (FIFO, LRU, LFU, random).

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

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

Сегментно-страничный способ организации виртуальной памяти.

Как и в сегментном способе распределения памяти, программа разбивается на логические законченные части – сегмента – и виртуальный адрес содержит указание на номер соответствующего сегмента. Вторая составляющая виртуального адреса сегмента – смещение относительно начала сегмента – может состоять из двух полей: виртуальной страницы и индекса. Таким образом, получается, что виртуальный адрес состоит из трех компонентов: сегмент, страница, индекс. Этот способ вносит еще большую задержку доступа к памяти. В следствие чего, несмотря на поддержку в процессорах семейства i80x86, в современных ПК и ОС практически не используется.

3. Распределение оперативной памяти в MS-DOS

MS-DOS – это однопрограммная операционная система. В ней  можно организовать запуск резидентных задач, но в целом она предназначена только для выполнения одного вычислительного процесса. Поэтому распределение памяти в ней построено по простой схеме (рис. 6).

В состав операционной систем MS-DOS входят следующие основные компоненты:

модуль расширения BIOS – файл io.sys;

основной базовый модуль обработки прерываний DOS – файл msdos.sys. Этот файл реализует работу файловой системы DOS;

командный процессор (интерпретатор команд) – файл command.com;

утилиты и драйверы, расширяющие возможности системы;

программа загрузки MS-DOS – загрузочная запись (boot record).

1Кб

512б

35-60 Кб

580 Кб

18 Кб

160Кб

96 Кб

64 Кб

Рис. 6 Распределение оперативной памяти в ОС MS DOS

Распределение памяти в ОС MS-DOS начинается с первых 640 Кбайт. Однако полный объем памяти, используемый системой для работы, может быть расширен до 1 Мбайта с помощью драйвера himem.sys. Для этого необходимо в файл конфигурации операционной системы config.sys добавить строку: device=_путь_\himem.sys. Для разрешения размещения части кода ядра DOS и заданий пользователя в области памяти свыше 640 Кб необходимо в config.sys добавить строку: dos=high,umb. Для загрузки драйверов и резидентных прогарам в верхнюю память компьютера используется драйвер верхней памяти emm386.exe. А для указания конкретных программ,  которые должны размещаться в этой области перед заданием пути к их размещению необходимо дописать devicehigh и lh в файле autoexec.bat. Для контроля за правильность загрузки оперативной памяти в MS DOS используется программа mem.ехе. Просмотреть загрузку оперативной памяти можно также из окна файлового менеджера (например, vc.com) нажав сочетание клавиш: Alt+F5.

4. Распределение оперативной памяти в Windows NT

В операционных системах Windows NT тоже используется плоская модель памяти. Заметим, что Windows NT 4.0 Server практически не отличается от Windows NT 4.0 Workstation; разница лишь в наличии у сервера некоторых дополнительных служб, дополнительных утилит для управления доменом и несколько иных значений в настройках системного реестра. Однако схема распределения возможного виртуального адресного пространства в системах Windows NT разительно отличается от модели памяти Windows 95/98. Прежде всего, в отличие от Windows 95/98 в гораздо большей степени используется ряд серьезных аппаратных средств защиты, имеющихся в микропроцессорах, а также применено принципиально другое логическое распределение адресного пространства (рис. 7).

Прикладные программы обращаются к DLL, которые перенаправляют обращение к системе

Этот системный код находится в своем собственном адресном пространстве и недоступен вызывающим его процессам

Рис. 7 Распределение памяти в ОС Windows NT

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

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

Прикладным программам выделяется 2 Гбайт локального (собственного) линейного (неструктурированного) адресного пространства от границы 640 Кбайт до 2 Гбайт (первые 640 Кбайт полностью недоступны). Прикладные программы изолированы друг от друга, хотя могут общаться через буфер обмена (clipboard), механизмы DDE (механизм динамического обмена данными) и OLE (механизм связи и внедрения объектов).

В верхней части каждой 2-гигабайтной области прикладной программы размещен код системных DLL кольца 3, который выполняет перенаправление вызовов в совершенно изолированное адресное пространство, где содержится уже собственно системный код. Этот системный код, выступающий как сервер-процесс (server process), проверяет значения параметров, исполняет запрошенную функцию и пересылает результаты назад в адресное пространство прикладной программы. Хотя сервер-процесс сам по себе остается процессом прикладного уровня, он полностью защищен от вызывающей его прикладной программы и изолирован от нее.

Между отметками 2 и 4 Гбайт расположены низкоуровневые системные компоненты Windows NT кольца 0, в том числе ядро, планировщик потоков и диспетчер виртуальной памяти. Системные страницы в этой области наделены привилегиями супервизора, которые задаются физическими схемами кольцевой защиты процессора. Это делает низкоуровневый системный код невидимым и недоступным для записи для программ прикладного уровня, но приводит к падению производительности во время переходов между кольцами.

Для 16-разрядных прикладных Windows-программ ОС Windows NT реализует сеансы Windows on Windows (WOW). В отличие от Windows 95/98 ОС Windows NT дает возможность выполнять 16-разрядные программы Windows индивидуально в собственных пространствах памяти или совместно в разделяемом адресном пространстве. Почти во всех случаях 16-и 32-разрядные прикладные программы Windows могут свободно взаимодействовать, используя OLE, независимо от того, выполняются они в отдельной или общей памяти. Собственные прикладные программы и сеансы WOW выполняются в режиме вытесняющей многозадачности, основанной на управлении отдельными потоками. Множественные 16-разрядные прикладные программы Windows в одном сеансе WOW выполняются в соответствии с кооперативной моделью многозадачности. Windows NT может также выполнять в многозадачном режиме несколько сеансов DOS. Поскольку Windows NT имеет полностью 32-разрядную архитектуру, не существует теоретических ограничений на ресурсы GDI (интерфейс графических устройств) и USER.

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

Процессами выделения памяти, ее резервирования, освобождения и подкачки управляет диспетчер виртуальной памяти Windows NT (Windows NT virtual memory manager, VMM). В своей работе этот компонент реализует сложную стратегию учета требований к коду и данным процесса для минимизации доступа к диску, поскольку реализация виртуальной памяти часто приводит к большому количеству дисковых операций.

Каждая виртуальная страница памяти, отображаемая на физическую страницу, переносится в так называемый страничный фрейм (page frame). Прежде чем код или данные можно будет переместить с диска в память, диспетчер виртуальной памяти (модуль VMM) должен найти или создать свободный страничный фрейм или фрейм, заполненный нулями. Заметим, что заполнение страниц нулями представляет собой одно из требований стандарта на системы безопасности уровня С2 , принятого правительством США. Страничные фреймы должны заполняться нулями для того, чтобы исключить возможность использования их предыдущего содержимого другими процессами. Чтобы фрейм можно было освободить, необходимо скопировать на диск изменения в его странице данных, и только после этого фрейм можно будет повторно использовать. Программы, как правило, не меняют страницы кода. Страницы кода, в которые программы не внесли изменений, можно удалить.

Диспетчер виртуальной памяти может быстро и относительно легко удовлетворить программные прерывания типа «ошибка страницы» (page fault). Что касается аппаратных прерываний типа «ошибка страницы», то они приводят к подкачке (paging), которая снижает производительность системы. Мы уже говорили о том, что в Windows NT, к большому сожалению, выбрана дисциплина FIFO для замещения страниц, а не более эффективные дисциплины LRU и LFU.

Когда процесс использует код или данные, находящиеся в физической памяти, система резервирует место для этой страницы в файле подкачки Pagefile.sys на диске. Это делается с расчетом на тот случай, что данные потребуется выгрузить на диск. Файл Pagefile.sys представляет собой зарезервированный блок дискового пространства, который используется для выгрузки страниц, помеченных как «грязные», при необходимости освобождения физической памяти. Заметим, что этот файл может быть как непрерывным, так и фрагментированным; он может быть расположен на системном диске либо на любом другом и даже на нескольких дисках. Размер этого страничного файла ограничивает объем данных, которые могут храниться во внешней памяти при использовании механизмов виртуальной памяти.

Вся виртуальная память в Windows NT подразделяется на классы: зарезервированную (reserved), выделенную (committed) и доступную (available).

Зарезервированная память представляет собой набор непрерывных адресов, которые диспетчер виртуальной памяти (VMM) выделяет для процесса, но не учитывает в общей квоте памяти процесса до тех пор, пока она не будет фактически использована. Когда процессу требуется выполнить запись в память, ему выделяется нужный объем из зарезервированной памяти. Если процессу потребуется больший объем памяти, то дополнительная память может быть одновременно зарезервирована и использована, если в системе имеется доступная память

Память выделена, если диспетчер VMM резервирует для нее место в файле Pagefile.sys на тот случай, когда потребуется выгрузить содержимое памяти на диск. Объем выделенной памяти процесса характеризует фактически потребляемый им объем памяти. Выделенная память ограничивается размером файла подкачки. Предельный объем выделенной памяти в системе (commit limit) определяется тем, какой объем памяти можно выделить процессам без увеличения размеров файла подкачки. Если в системе имеется достаточный объем дискового пространства, то файл подкачки может быть увеличен и тем самым будет расширен предельный объем выделенной памяти.

Вся память, которая не является ни выделенной, ни зарезервированной, является доступной. К доступной относится свободная память, обнуленная память (освобожденная и заполненная нулями), а также память, находящаяся в списке ожидания (standby list), которая была удалена из рабочего набора процесса, но может быть затребована вновь.




1. Реферат- Характерные особенности речей французских юристов
2. Контрольная работа заочное отделение ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ Выбрать индивидуальное задание по в
3. шахматки включающий в обязательном порядке те Дела которые предназначены для хранения документов испол
4. крепостнической формации в недрах которой шел процесс формирования капиталистического уклада
5. Кат. Бытия её мировозкое и методологич
6. Чувственные масла и смазки улучшающие контакт
7. видимому львами
8. Золотой ключик Республики Татарстан День матери конспект
9. тема и ее структура в РФ Выполнила Студентка 1 группы 1 курса учётноэкономического факультета Ефимо
10. Сигналдарды цифрлы~ ~~деуді~ негіздері
11. тематическое распределение стоимости объекта ОС подлежащей амортизации в течение срока его полезного испол
12. ЭМА без применения электролиза, кондуктометрия прямая и косвенная (кондуктометрическое титрование)
13. і. Прийшовши до влади Скоропадський задекларував свій маніфест.
14. Акклиматизация ~это- процесс приспособления к климатическим факторам; 2
15. Тема 5. Субъекты международного частного права План 5
16. инновация Инновации и инновационная деятельность традиционно представляются как направление научноте
17. История России XX век
18. Лабораторная работа 5 ЦИКЛЫ Содержание работы- Понятие цикла Цикл со счетчиком FOR
19. тематиз Основные подходы к исследованию международных конфликтов
20.  Понятие и принципы гражданского права