- •1.Состав системного программного обеспечения.
- •1.1.Операционная система (ос) как посредник между уровнем пользователя и аппаратурой эвм.
- •1.2.Функции операционной системы
- •1.3.Классификация операционных систем
- •2.Структура операционной системы
- •2.1.Ядро и вспомогательные модули ос. Ядро в привилегированном режиме
- •2.2.Многослойная структура ос
- •2.3.Аппаратная зависимость и переносимость ос
- •2.4.Типовые средства аппаратной поддержки ос
- •3.Организация вычислительных процессов.
- •3.1.Понятия вычислительного процесса и ресурса.
- •3.2.Понятие системы программирования.
- •3.3. Системы интерактивной отладки
- •3.4.Принципы трансляции программ
- •3.5.Особенности построения интерпретаторов
- •3.6.Лексический и синтаксический анализ и генерация кода.
- •3.7.Загрузчик.
- •3.8.Жизненный цикл программы.
- •3.9.Система исполнения программы (run-time system).
- •4.Процессы и потоки
- •4.1.Понятия «процесс» и «поток»
- •4.2.Создание процессов и потоков
- •4.3.Планирование и диспетчеризация потоков
- •4.4.Состояния потока
- •4.5.Вытесняющие и невытесняющие алгоритмы планирования
- •4.6.Алгоритмы планирования, основанные на квантовании
- •4.7.Алгоритмы планирования, основанные на приоритетах
- •4.8.Смешанные алгоритмы планирования
- •4.9.Мультипрограммирование на основе прерываний
- •4.10.Назначение и типы прерываний
- •4.11.Механизм прерываний
- •4.12.Диспетчеризация и приоритезация прерываний в ос
- •4.13.Синхронизация процессов и потоков. Цели и средства синхронизации
- •4.14.Необходимость синхронизации и гонки
- •4.15.Критическая секция. Блокирующие переменные. Семафоры. Тупики
- •4.16.Средства коммуникации процессов
- •5.Управление памятью
- •5.1.Функции ос по управлению памятью
- •5.2.Типы адресов
- •5.3.Алгоритмы распределения памяти
- •5.4.Механизмы реализации виртуальной памяти
- •5.5.Страничное распределение
- •5.6.Сегментное распределение
- •5.7.Сегментно-страничное распределение
- •5.8.Кэширование данных. Иерархия запоминающих устройств
- •5.10.Проблема согласования данных
- •5.11.Способы отображения основной памяти на кэш
- •6.Управление устройствами ввода-вывода и файлами
- •6.1.Задачи ос по управлению файлами и устройствами
- •6.2.Многослойная модель подсистемы ввода-вывода
- •6.3. Менеджер ввода-вывода
- •6.4.Многоуровневые драйверы
- •6.5.Специальные файлы
- •6.6.Цели и задачи файловой системы
- •6.7.Типы файлов. Иерархическая структура файловой системы
- •6.8.Имена файлов. Атрибуты файлов. Логическая организация файла
- •6.9.Физическая организация и адресация файла
- •6.10.Файловые операции. Способы организации файловых операций.
- •6.11.Стандартные файлы ввода и вывода, перенаправление вывода
- •6.12.Контроль доступа к файлам. Механизм контроля доступа и защиты от сбоев
5.6.Сегментное распределение
При страничной организации виртуальное адресное пространство процесса делится на равные части механически, без учета смыслового значения данных. В одной странице могут оказаться и коды команд, и инициализируемые переменные, и массив исходных данных программы. Такой подход не позволяет обеспечить дифференцированный доступ к разным частям программы, а это свойство могло бы быть очень полезным во многих случаях. Например, можно было бы запретить обращаться с операциями записи в сегмент программы, содержащий коды команд, разрешив эту операцию для сегментов данных.
Кроме того, разбиение виртуального адресного пространства на «осмысленные» части делает принципиально возможным совместное использование фрагментов программ разными процессами. Пусть, например, двум процессам требуется одна и та же подпрограмма, которая к тому же обладает свойством реентерабельности. Реентерабельность (reentrantable, reenterability) свойство повторной входимости кода, которое позволяет одновременно использовать его несколькими процессами. При выполнении реентерабельного кода процессы не изменяют его, поэтому в память достаточно загрузить только одну копию кода.
Тогда коды этой подпрограммы могут быть оформлены в виде отдельного сегмента и включены в виртуальные адресные пространства обоих процессов. При отображении в физическую память сегменты, содержащие коды подпрограммы из обоих виртуальных пространств, проецируются на одну и ту же область физической памяти. Таким образом, оба процесса получат доступ к одной и той же копии подпрограммы.
Итак, виртуальное адресное пространство процесса делится на части сегменты, размер которых определяется с учетом смыслового значения содержащейся в них информации. Отдельный сегмент может представлять собой подпрограмму, массив данных и т. п. Деление виртуального адресного пространства на сегменты осуществляется компилятором на основе указаний программиста или по умолчанию, в соответствии с принятыми в системе соглашениями. Максимальный размер сегмента определяется разрядностью виртуального адреса, например при 32-разрядной организации процессора он равен 4 Гбайт.
При загрузке процесса в оперативную память помещается только часть его сегментов, полная копия виртуального адресного пространства находится в дисковой памяти. Для каждого загружаемого сегмента операционная система подыскивает непрерывный участок свободной памяти достаточного размера. Смежные в виртуальной памяти сегменты одного процесса могут занимать в оперативной памяти несмежные участки. Если во время выполнения процесса происходит обращение по виртуальному адресу, относящемуся к сегменту, который в данный момент отсутствует в памяти, то происходит прерывание. ОС приостанавливает активный процесс, запускает на выполнение следующий процесс из очереди, а параллельно организует загрузку нужного сегмента с диска. При отсутствии в памяти места, необходимого для загрузки сегмента, операционная система выбирает сегмент на выгрузку, при этом она использует критерии, аналогичные рассмотренным выше критериям выбора страниц при страничном способе управления памятью.
На этапе создания процесса во время загрузки его образа в оперативную память система создает таблицу сегментов процесса (аналогичную таблице страниц), в которой для каждого сегмента указываются:
физический адрес сегмента в оперативной памяти;
размер сегмента;
правила доступа к сегменту;
признаки модификации, присутствия и обращения к данному сегменту, а также некоторая другая информация.
Если виртуальные адресные пространства нескольких процессов включают один и тот же сегмент, то в таблицах сегментов этих процессов делаются ссылки на один и тот же участок оперативной памяти, в который данный сегмент загружается в единственном экземпляре.
Как видно, сегментное распределение памяти имеет очень много общего со страничным распределением.
Механизмы преобразования адресов этих двух способов управления памятью тоже весьма схожи, однако в них имеются и существенные отличия, которые являются следствием того, что сегменты в отличие от страниц имеют произвольный размер. Виртуальный адрес при сегментной организации памяти может быть представлен парой (g, s), где g номер сегмента, a s смещение в сегменте. Физический адрес получается путем сложения адреса сегмента, который определяется по номеру сегмента g из таблицы сегментов и смещения s.
Недостатком сегментного распределения является избыточность. При сегментной организации единицей перемещения между памятью и диском является сегмент, имеющий в общем случае объем больший, чем страница. Однако во многих случаях для работы программы вовсе не требуется загружать весь сегмент целиком, достаточно было бы одной или двух страниц. Аналогично при отсутствии свободного места в памяти не стоит выгружать целый сегмент, когда можно обойтись выгрузкой нескольких страниц.
Но главный недостаток сегментного распределения это фрагментация, которая возникает из-за непредсказуемости размеров сегментов. В процессе работы системы в памяти образуются небольшие участки свободной памяти, в которые не может быть загружен ни один сегмент. Суммарный объем, занимаемый фрагментами, может составить существенную часть общей памяти системы, приводя к ее неэффективному использо-ванию.
Система с сегментной организацией функционирует аналогично системе со страничной организацией: при каждом обращении к оперативной памяти выполняется преобразование виртуального адреса в физический, время от времени происходят прерывания, связанные с отсутствием нужных сегментов в памяти, при необходимости освобождения памяти некоторые сегменты выгружаются.
Одним из существенных отличий сегментной организации памяти от страничной является возможность задания дифференцированных прав доступа процесса к его сегментам. Например, один сегмент данных, содержащий исходную информацию для приложения, может иметь права доступа «только чтение», а сегмент данных, представляющий результаты, «чтение и запись». Это свойство дает принципиальное преимущество сегментной модели памяти над страничной.
