- •Введение
- •1. Основные понятия системного программного обеспечения
- •1.1. Понятия прикладного и системного программного обеспечения
- •1.2. Состав системного программного обеспечения
- •2. Состав и архитектура операционных систем
- •2.1. Состав операционных систем
- •2.2. Архитектура ос
- •3. Процессы и потоки
- •3.1. Концепция процессов и потоков
- •3.2. Многозадачность. Формы программной работы
- •3.3. Подсистема управления процессами и потоками
- •3.4. Роль процессов, потоков и волокон в многозадачности
- •3.5. Создание процессов
- •3.6. Потоки и их модели
- •3.7. Планирование и синхронизация процессов и потоков
- •3.7.1. Виды планирования
- •3.7.2. Алгоритмы планирования потоков
- •3.7.3. Алгоритмы приоритетного планирования
- •3.7.4. Взаимоисключения
- •3.7.5. Семафоры
- •3.7.6. Тупики
- •4. Управление памятью
- •4.1. Функции ос по управлению памятью
- •4.2. Классификация методов распределения памяти
- •4.3. Распределение памяти без использования внешней памяти
- •4.4. Методы структуризации виртуальной памяти
- •4.4.1. Страничная организация виртуальной памяти
- •4.4.2. Сегментная организация виртуальной памяти
- •4.4.3. Странично-сегментная организация памяти
- •5. Файловые системы
- •5.1. Цели и задачи файловой системы
- •5.2. Организация файлов и доступ к ним
- •5.3. Логическая организация файла
- •5.4. Каталоговые системы
- •5.5. Основные возможности файловой системы ntfs
- •5.6. Структура тома с файловой системой ntfs
- •5.7. Возможности ntfs по ограничению доступа к файлам и каталогам
- •6. Управление вводом-выводом
- •6.1. Физическая организация устройств ввода-вывода
- •6.2. Организация программного обеспечения ввода-вывода
- •6.3. Обработка прерываний
- •6.4. Драйверы устройств
- •6.5. Независимый от устройств слой ос
- •6.6. Пользовательский слой программного обеспечения
- •7. Построение операционных систем
- •7.1. Принципы построения операционных систем
- •7.1.1. Принцип модульности
- •7.1.2. Принцип функциональной избирательности
- •7.1.3. Принцип генерируемости ос
- •7.1.4. Принцип функциональной избыточности
- •7.1.5. Принцип виртуализации
- •7.1.6. Принцип независимости программ от внешних устройств
- •7.1.7. Принцип совместимости
- •7.1.8. Принцип открытой и наращиваемой ос
- •7.1.9. Принцип мобильности
- •7.1.10. Принцип обеспечения безопасности вычислений
- •7.2. Построение интерфейсов операционных систем
- •7.3. Интерфейс прикладного программирования
- •7.3.1. Реализация функций api на уровне ос
- •7.3.2. Реализация функций api на уровне системы программирования
- •7.3.3. Реализация функций api с помощью внешних библиотек
- •7.4. Классификация системных вызовов
- •7.5. Интерфейс пользователя
- •7.6. Пользовательский интерфейс приложений
- •7.7. Архитектура, управляемая событиями
- •8. Семейство операционных систем unix
- •8.1. Основные понятия системы unix
- •8.1.1. Виртуальная машина
- •8.1.2. Пользователь
- •8.1.3. Интерфейс пользователя
- •8.1.4. Привилегированный пользователь
- •8.1.5. Команды
- •8.1.6. Процессы
- •8.1.7. Выполнение процессов
- •8.1.8. Структура файловой системы
- •8.2. Операционная система Linux
- •9.1.2. Определение компилятора. Отличие компилятора от транслятора
- •9.1.3. Определение интерпретатора. Разница между интерпретаторами и трансляторами
- •9.1.4. Этапы трансляции. Общая схема работы транслятора
- •9.1.5. Понятие прохода. Многопроходные и однопроходные компиляторы
- •9.2. Таблицы идентификаторов. Организация таблиц идентификаторов
- •9.2.1. Назначение таблиц идентификаторов
- •9.2.2. Принципы организации таблиц идентификаторов
- •9.2.3. Простейшие методы построения таблиц идентификаторов
- •9.2.4. Построение таблиц идентификаторов по методу бинарного дерева
- •9.2.8. Комбинированные способы построения таблиц идентификаторов
- •9.3. Лексические анализаторы
- •9.3.1. Назначение лексического анализатора
- •9.3.2. Принципы построения лексических анализаторов
- •9.3.3. Определение границ лексем
- •9.3.4. Выполнение действий, связанных с лексемами
- •9.4. Формальные языки и грамматики
- •9.4.1. Первичные понятия
- •9.4.2. Примеры, иллюстрирующие первичные понятия
- •9.4.3. Типы формальных языков и грамматик
- •9.4.3.1. Грамматики типа 0
- •9.4.3.2. Грамматики типа 1
- •9.4.3.3. Грамматики типа 2
- •9.4.3.4. Грамматики типа 3
- •9.4.3.5. Вывод в кс-грамматиках и правила построения дерева вывода
- •9.4.3.6. Синтаксический разбор
- •9.4.3.7. Левый и правый выводы
- •9.4.3.8. Неоднозначные и эквивалентные грамматики
- •9.4.4. Способы задания схем грамматик
- •9.4.4.1. Форма Наура-Бэкуса
- •9.4.4.2. Итерационная форма
- •9.4.4.3. Синтаксические диаграммы
- •9.4.5. Построение грамматик и грамматики, описывающие основные конструкции языков программирования
- •9.4.5.1. Рекомендации по построению грамматик
- •9.4.5.2. Описание списков
- •9.4.5.3. Пример построения грамматик
- •9.4.5.4. Грамматики, описывающие целые числа без знака и идентификаторы
- •9.4.5.5. Грамматики для арифметических выражений
- •9.4.5.6. Грамматика для описаний
- •9.4.5.7. Грамматика, задающая последовательность операторов присваивания
- •9.4.5.8. Грамматики, описывающие условные операторы и операторы цикла
- •9.4.5.9. Бесскобочные выражения
- •9.4.5.10. Префиксная польская запись
- •9.4.5.11. Вычисление префиксных польских записей
- •9.4.5.12. Постфиксная польская запись
- •9.4.5.13. Вычисление постфиксных записей
- •9.5. Конечные автоматы и регулярные грамматики
- •9.6. Макроязыки и макрогенерация
- •9.6.1. Определения макрокоманд и макрогенерации
- •9.6.2. Примеры макрокоманд
- •9.6.3. Макроязыки и препроцессоры
- •Заключение
- •Библиографический список
- •Оглавление
- •394026 Воронеж, Московский просп., 14
4.4. Методы структуризации виртуальной памяти
Большинство систем виртуальной памяти используют технику, называемую страничной организацией памяти. Любой процесс, реализуемый в компьютере, может обратиться к множеству адресов в памяти. Адреса могут формироваться с использованием индексации, базовых регистров, сегментных регистров и другими путями. Это программно формируемые адреса, называемые виртуальными адресами, формируют виртуальное адресное пространство.
Все имеющееся в настоящее время множество реализаций виртуальной памяти различается в основном способом структуризации виртуального адресного пространства.
В настоящее время выделяют три метода реализации виртуальной памяти:
1) страничная виртуальная память организует перемещение данных между основной памятью и диском страницами – частями виртуального адресного пространства фиксированного и сравнительно небольшого размера;
2) сегментная виртуальная память предусматривает перемещение данных сегментами - частями виртуального адресного пространства произвольного размера, полученными с учетом смыслового значения данных;
3) сегментно-страничная виртуальная память использует двухуровневое деление: виртуальное адресное пространство делится на сегменты, а затем сегменты делятся на страницы. Единицей перемещения данных является страница.
Для временного хранения сегментов и страниц на диске отводится специальная область либо специальный файл (страничный файл или файл подкачки - paging file). Текущий размер страничного файла является важным параметром, оказывающим влияние на возможности операционной системы: чем больше страничный файл, тем больше приложений может одновременно выполнять ОС (при фиксированном размере оперативной памяти). Однако необходимо понимать, что увеличение числа одновременно работающих приложений за счет увеличения размера страничного файла замедляет их работу, так как значительная часть времени при этом тратится на перемещение данных на диск и обратно.
4.4.1. Страничная организация виртуальной памяти
При страничной организации виртуальное адресное пространство каждого процесса делится на части одинакового, фиксированного для данной системы размера, называемые виртуальными страницами (Virtual pages). В общем случае размер виртуального адресного пространства не кратен размеру страницы, поэтому последняя страница дополняется фиксированной областью.
Вся оперативная память машины также делится на части такого же размера, называемые физическими страницами (или блоками, или кадрами). Размер страницы выбирается равным степени двойки: 1024, 2408, 4096 байт и т. д. Это позволяет упростить механизм преобразования адресов.
При создании процесса ОС загружает в операционную память несколько его виртуальных страниц (начальные страницы кодового сегмента и сегмента данных). Копия виртуального адресного пространства процесса находится на диске. Смежные виртуальные страницы не обязательно находятся в смежных физических страницах. Для каждого процесса ОС создает таблицу страниц – информационную структуру, создающую записи обо всех виртуальных страницах процесса (рис. 19).
Запись таблицы (дескриптор страницы) включает следующую информацию:
– номер физической страницы (N ф.с.), в которую загружена данная виртуальная страница;
– признак присутствия P, устанавливаемый в единицу, если данная страница находится в оперативной памяти;
– признак модификации страницы D, который устанавливается в единицу всякий раз, когда производится запись по адресу, относящемуся к данной странице;
– признак обращения А к странице, называемый также битом доступа, который устанавливается в единицу при каждом обращении по адресу, относящемуся к данной странице;
– другие управляющие биты, служащие, например, для целей защиты или совместного использования памяти на уровне страниц.
Рис. 19. Страничная организация виртуальной памяти
Перечисленные признаки в большинстве моделей процессов устанавливаются аппаратно схемами процессора при выполнении операций с памятью. Информация из таблицы страниц используется для решения вопроса о необходимости перемещения той или иной страницы между памятью и диском, а также для преобразования виртуального адреса в физический. Сами таблицы страниц, так же как и описываемые ими страницы размещаются в оперативной памяти.
В некоторых схемах виртуальной памяти при большом числе записей в таблицах страниц они частично хранятся не в реальной, а в виртуальной памяти. Это означает, что сами таблицы страниц становятся объектами страничной организации. Но при работе процесса как минимум часть его таблицы страниц должна располагаться в основной памяти в том числе запись о странице, выполняющейся в настоящий момент.
Виртуальный адрес при страничном распределении может быть представлен в виде пары (Р, Sv), где Р - номер виртуальной страницы процесса (нумерация страниц начинается с 0), a Sv - смещение в пределах виртуальной страницы (рис. 20). Физический адрес также может быть представлен в виде пары (N, Sf), где N - номер физической страницы, a Sf - смещение в пределах физической страницы. Задача подсистемы виртуальной памяти состоит в отображении пары значений (Р, Sv) в пару (N, Sf).
Рис. 20. Схема преобразования адреса в виртуальной памяти
Чтобы понять механизм реализации этого отображения, следует остановиться на двух базисных свойствах страничной организации. Как уже отмечалось, объем страниц как виртуальной, так и физической выбирается равным степени двойки - 2К (k = 8 и болеe) Отсюда следует, что смещение Sv и St- может быть получено отделением k младших разделов в двоичной записи виртуального и соответственно физического адреса страниц. При этом оставшиеся старшие разделы адреса представляют собой двоичную запись номеров виртуальной и соответственно физической страницы. Дополнив эти номера к нулям, можно получить начальный адрес виртуальной и физической страниц.
Второе свойство – линейность адресного пространства виртуальной и физической страницы – приводит к тому, что Sf = Sv. Отсюда следует простая схема преобразования виртуального адреса в физический.
При обращении к памяти по некоторому виртуальному адресу (Р, Sv) аппаратные схемы процессора выполняют следующие действия.
1. Из специального регистра процессора извлекается начальный адрес AT таблицы страниц активного процесса. С помощью сумматора S по значениям AT, Р, L (длина отдельной записи в таблице страниц) определяется адрес нужной записи в таблице страниц:
А = AT + (Р * L).
2. Считывается номер соответствующей физической страницы - N.
3. К номеру физической страницы присоединяется смещение Sv.
В итоге полученный физический адрес оперативной памяти представляется парой значений (N, Sf).
Рассмотрим пример, поясняющий основные характеристики организации страниц виртуальной памяти.
Пусть компьютер имеет оперативную память объемом Еоп = 256 Мбайт, размер страницы выбран равным Естр= 4 Кбайт.
В этом случае количество физических страниц равно
Nf = Еоп / Естр = 256*2020 / 4*210 = 64,000 страниц.
Для отображения физического адреса произвольного байта оперативной памяти потребуется К = log2 (256*2020) - 28 двоичных разрядов.
Число разрядов для отображения смещения в странице М = log2 4 Кбайт = log2 4096 = 12.
Если процессор имеет 32-разрядную структуру, то на номер виртуальной страниия отводится 32 - 12 = 20 двоичных разрядов.
Таким образом, число виртуальных стран -равно NB = 220 (примерно 1 млн. виртуальных страниц).
В настоящее время известно несколько методов повышения эффективности функционирования страничной виртуальной памяти. К ним относятся следующие методы.
1. Более сложная структуризация виртуального адресного пространства, например двухуровневая (типичная для 32-битовой адресации).
2. Использование специального высокоскоростного кэша для хранения части записей таблицы страниц, который обычно называют буфером быстрого преобразования адреса, или буфером поиска трансляции (translation lookaside buffer - TLB).
3. Выбор оптимального размера страницы виртуальной памяти.
4. Эффективное управление страничным обменом.