Введение в операционные системы. ОС с точки зрения пользователя. Конфигурация компьютера. Многоуровневые очереди, страница 8

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

Это нам дает то, что отдельные участки памяти могут быть разделены между процессами.

Сегментная организация памяти

Программист при страничной организации памяти не вмешивается в процесс и его организует операционная система.

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

Лекция 10

(продолжение)

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

           адрес начала сегмента  размер сегмента

 


Когда CPU обращается к памяти, у него есть свое собственное логическое пространство, состоящее из адреса и размера сегмента. Адрес сегмента, того, который в данный момент свободен, берется из таблицы сегментов. Таблица состоит из двух "половинок". У свободного сегмента есть виртуальный адрес и размер. Если адрес оказывается больше, то фиксируется "Ошибка". Если нет, то выделяется тот "кусок" физической памяти, который соответствует этому сегменту, при этом выделяется адрес сегмента.

Также у нас есть значение этого сегмента, т.е. сколько занимает места. Смещение идет внутри сегмента.

Адрес и размер таковы, что у нас нет пересечений участков памяти.

базовый адрес

 
Удобство: каждый процесс может содержать любое количество сегментов: под выполняемый код, данные, стэки, очереди, буфера. Тогда строится таблица сегментов, в которой главное – это выделяемый адрес сегмента. Но заранее невозможно сказать, сколько надо для задачи выделить сегментов, т.к. неизвестен их размер. Поэтому механизм реализации состоит в следующем: на уровне реализации ("железном") выделяется так называемый STBR (Segment Table Base Register), который содержит базовый адрес сегмента, а уже остальные адреса находятся в оперативной памяти и на них ссылается этот базовый адрес.

 


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

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

Достоинство сегментного выделения памяти: каждый сегмент может получать тип выделяемой памяти. Статус: 1) выполняемого кода 2) только для чтения 3) для чтения и записи. Это позволяет нам в оперативной памяти организовать копии выполняемых процессов в одном экземпляре.

Области данных (сегменты), используемые разными процессами.

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

размер1=размер i, адрес1=адрес i

 
 


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

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

 


Доходим до n - го процесса, которому не хватает памяти для выполнения. Следовательно, ОС должна выполнить какие – либо действия, чтобы это событие получило соответствующую реакцию. В результате надо посмотреть, какой из процессов можно "выкинуть" – ожидающий, остановленный, выполняемый.  Если задача одна, то придуман следующий механизм: это адресуемое пространство продолжается на каком - либо физическом устройстве, например, на жестком диске. При этом эта задача опять разбивается на страницы, причем они могут быть "правильные" – valid (т.е. загруженные в оперативную память), или invalid (незагруженные в ОП, а лежащие во внешней памяти). Эту внешнюю память называют SWAP-файл.

Механизм работы  SWAP-файла

 


Некоторые рекомендуют делать этот SWAP-файл размером 1.2-1.3 от оперативной памяти. Этот файл только увеличивается.

Speed позволяет дефрагментировать SWAP-файл и класть его куда угодно.

Лекция 11

 


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

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

Замещение страниц

Эффект замещения страниц происходит тогда, когда вся физическая память, т.е. ОЗУ – занята. Тогда возникает ситуация страничной недостаточности, которая разрешается следующим образом: проверяется наличие бита (valid/invalid), если valid, то страница доступна и идет обращение к физической памяти через базовый адрес. Если оказалось, что данная память не может быть загружена, тогда выбирается "жертва", которая выгружается на диск в SWAP-file.

Пример: надо грузить F, выбирается страница-жертва, которая должна быть выгружена в виртуальную память.

2-ой вариант, когда выгружен сегмент В. Если в таблице страниц задачи стоит invalid,  то он не доступен, по информации о том, что он лежит в SWAP-файле, invalid превращается в valid, т.е. он становиться доступным.