изошло совпадение кода.
Количество строк таблицы сегментов равно количеству сегментов программы: 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).
Страничная недостаточность вызывает прерывание выполнения программы и передачу управления операционной системе. Реакция операционной системы на страничную недостаточность заключается в том, что необходимая страница загружается в основную память.