Смекни!
smekni.com

Разработка операционных систем (стр. 6 из 9)

изошло совпадение кода.

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

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

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

1. только чтение

2. и чтение и запись

3. только выполнение

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

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

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

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

3.4.1. Базовый метод сегментной организации памяти.

Обычно сегменты формируются компилятором, а на этапе загрузки им присваиваются идентифицирующие номера. Таким образом, логический адрес при сегментной организации памяти состоит из двух частей: S и d, где S — номер сегмента, а d — смещение в пределах сегмента.

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


Количество строк таблицы сегментов равно количеству сегментов программы: S, limit, base. Limit — размер сегмента, base — начальный адрес сегмента в памяти.

Номер сегмента S используется в качестве индекса для таблицы сегментов. С помощью таблицы сегментов определяется его начальный адрес base в основной памяти. Значение limit используется для защиты памяти. Смещение d должно удовлетворять неравенству 0<d<limit. В случае выхода смещения за границы сегмента работа программы прерывается. Физический адрес определяется как сумма начального адреса base и смещения d. В том случае, если таблица сегментов имеет значительные размеры, она располагается в основной памяти, а её начальный адрес и длина хранятся в специальных регистрах STBR (segment table base register), STLR (segment table length register). Для ускорения трансформации логического адреса в физический операция суммирования часто заменяется операцией конкатенации (для этого необходимо, чтобы начальные адреса сегментов были кратны некоторому числу 2n).Таблица сегментов (или её часть) располагается в ассоциативной памяти.

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

3.4.2. Разделение сегмента между НЕСКОЛЬКИМИ процессами.

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

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

таблица сегментов процесса 1

основная память

limit

base

0.

25286

43062

43062

1.

4425

68348

68348

редактор

2.

данные

72773

1

таблица сегментов процесса 2

90003

limit

base

данные

0.

25286

43062

98553

2

1.

8550

90003

2.

3.4.3. Фрагментация.

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

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

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

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

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

4.1. Страничирование по запросу (demand paging).

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

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

1. программа может выполняться CPU, когда часть страниц находится в основной памяти, а часть — во внешней.

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

логическая

таблица

физическая

вторичная

память

страниц

память

память

0.

A.

0.

4

v

0

1.

B.

1.

i

1

A.

2.

C.

2.

6

v

2

B.

3.

D.

3.

i

3

C.

4.

E.

4.

i

4

A

D.

5.

F.

5.

8

v

5

E.

6.

G.

6.

i

6

C

F.

7.

H.

7.

i

7

8

F

15

Для учёта распределения страниц между внешней и основной памятью каждая строка таблицы страниц дополняется битом местонахождения страницы. Valid/invalid bit.

В том случае, если процессор пытается использовать страницу, помеченную значением invalid, возникает событие, называемое страничная недостаточность (paging fault).

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