- •Понятие процесс, представление процесса, управление процессом
- •Создание процесса
- •Связь между процессами
- •Критические ресурсы. Конфликты между процессами и методы их решения.
- •Выделение памяти динамическими разделами
- •Виртуальная память и способы ее реализации
- •Механизм страничной виртуальной памяти
- •Сегментная организация виртуальной памяти
- •Свопинг
- •Файловая система
- •Управление процессами windows
Механизм страничной виртуальной памяти
Пространство виртуальной памяти делится на блоки фиксированного размера, которые называются «страницы»
Страница 0 (4кб) |
Страница 1 (4 кб) |
Страница 2 (4 кб) |
Страница 3 (4 кб) |
… |
Физическая память делится на блоки того же размера, однако в ней можно выделить область, используемую ОС и область, предназначенную для хранения программ пользователя.
Общее назначение предложенного разбиения виртуально-адресного пространства и физического пространства памяти вместе с дисковым пространством это осуществить отображение страниц виртуальной памяти на страницы реальной оперативной памяти и дисковое пространство, иными словами часть страниц виртуальной памяти, то есть содержимое этих страниц отображается на страницы реальной оперативной памяти, другая же часть страниц виртуальной памяти отображается на дисковое пространство. Для поддержания такого отображения ОС поддерживает таблицу соответствия, в которой каждой страниц е виртуальной памяти стравится в соответствие страница оперативной памяти или образ (содержимое) виртуальной страницы на диске.
Сегментная организация виртуальной памяти
При сегментной организации виртуальное адресное пространство разделяется на области, в общем случае, разного размера. Назначение таких областей так же разное. Можно выделить следующие типы областей:
Кодовый сегмент (его содержимым является последовательность машинных команд, представляющих машинный код)
Сегмент с данными (область хранит значение переменных, которые определяются в программе и используются ею на весь период ее выполнения)
Сегмент для временных данных (предназначен для хранения значений переменных, которые создаются и используются на отдельных этапах вычислений)
Свойства и возможности сегментов разных типов.
Кодовый сегмент.
Хранится на диске, и он может быть отображен в оперативную память на период времени активности соответствующего процесса. Когда процесс перестает быть активным, такая область оперативной памяти объявляется свободной.
Сегмент данных
При размещении сегмента данных в оперативной памяти, он может менять свое состояние при выполнении процесса. Поэтому, перед освобождением соответствующей физической оперативной памяти, которая выделялась соответствующему сегменту данных, необходимо проверить, не изменилось ли его состояние и если оно менялось, то образ этого сегмента данных необходимо скопировать на диск, перед тем как объявить область памяти свободной.
Сегмент для временных данных
Ему может быть выделена любая подходящая область оперативной памяти
Принципы отображения сегментов виртуального адресного пространства на области оперативной памяти и диска аналогичны ранее рассмотренным механизмам отображения для страничной виртуальной памяти. Дополнительно требуется хранить размер каждого сегмента и его тип в таблице отображения для данного процесса.
Принцип организации позволяет создавать сегмент общий для 2х и более процессов.
(ЗДЕСЬ ДОЛЖЕН БЫТЬ РИСУНОК)
Примером такого отображения представлений одного и того же программного кода или данных в разных адресных виртуальных пространствах является библиотека динамической компоновки
В винде *.dll
Примерно 80% процентов кода в винде составляют файлы *.dll.
Содержимым такой библиотеки может быть программный код или данные.
Схема подключения *.dll отличается от подключения статической библиотеки. Отличие в том, что программа компоновщик собирает файлы статических библиотек, соединяя код основной программы с кодом статических библиотек до начала выполнения программы. После завершения соединения кодов получается файл *.exe, который содержит в себе все необходимые составные части и далее этот файл может запускаться нужное количество раз.
В случае *.dll, компоновщик формирует лишь код основной программы, оставляя связи с возможными библиотеками (стандартными подпрограммами) незавершенными и в таком виде передает программный код на выполнение. В том случае, когда процесс вычисления потребует выполнение кода из библиотеки, ОС отыщет код нужной библиотеки, отобразит этот код в оперативную память и выполнит, необходимы связи кода основной программы с кодом загруженной библиотеки.
Код библиотеки динамической компоновки отображается в единственном экземпляре в оперативке, а ОС отображает образы такой библиотеки из разных виртуальных пространств на этот единственный загруженный код.
