- •Кафедра программного обеспечения информационных технологий
- •«Операционные системы и системное программирование»
- •40 01 01
- •Содержание
- •Введение
- •Разработка программ в ос unix
- •1.1 Отличительные черты ос unix
- •1.2 Основы архитектуры операционной системы unix
- •1.3 Ядро системы
- •1.4 Пользователи системы, атрибуты пользователя
- •1.5 Системные вызовы и функции стандартных библиотек
- •1.6 Описание программы, переменные окружения
- •1.7 Аргументы и опции программы
- •1.8 Обработка ошибок
- •2 Файлы и файловая система
- •2.1 Файлы
- •2.2 Типы файлов
- •2.2.1 Обычные файлы
- •2.2.2 Каталоги
- •2.2.3 Файлы символичной связи (ссылки)
- •2.2.4 Файлы устройства
- •2.2.5 Именованные каналы
- •2.2.6 Сокеты
- •2.3 Владельцы файлов и права доступа к файлу
- •2.4 Дополнительные атрибуты файла
- •2.5 Файловый ввод/вывод
- •Открытие файла
- •2.6 Мультиплексированный ввод/вывод
- •2.7 Векторный ввод/вывод
- •2.8 Файлы, отображающиеся в памяти
- •2.9 Каталоги, работа с каталогами
- •2.9.1 Создание каталога
- •2.9.2 Удаление каталога
- •2.9.3 Чтение информации из каталога
- •2.9.4 Закрытие каталога
- •2.10 Создание жестких ссылок
- •2.11 Символическая ссылка
- •2.12 Удаление ссылки (или имени файла)
- •2.13 Переименование файла
- •2.14 Файловая система ос unix
- •2.14.1 Организация файловой системы ext2
- •2.15 Файлы устройств
- •3 Процессы
- •3.1 Виды процессов
- •3.2 Создание процесса
- •3.3 Вызовы семейства exec
- •3.4 Функции завершения процесса
- •3.5 Ошибки
- •3.6 Копирование при записи
- •3.7 Системные вызовы ожидания завершения процесса
- •3.8 Системный вызов system
- •3.9 Основные параметры, передаваемые процессу
- •3.10 Сеансы и группы процессов
- •4 Взаимодействие процессов
- •4.1 Сигналы
- •4.1.1 Отправка (генерация) сигнала
- •4.1.2 Наборы сигналов
- •4.1.3 Блокировка сигналов
- •4.2 Неименнованные каналы (трубы)
- •4.2.1 Размер канала и взоимодействие процессов при передаче данных
- •4.3 Именнованные каналы
- •4.4 Дополнительные средства межпроцессного взоимодействия
- •4.5 Механизмы межпроцессорного взаимодействия
- •4.5.1 Очереди сообщений
- •4.5.2 Семафоры Семафоры как теоретическая конструкция
- •4.5.3 Разделяемая память
- •4.5.4 Потоки
- •Int pthread_setschedparam(pthread_t tid, int policy, const struct sched_param *param);
- •Int pthread_getschedparam(pthread_t tid, int policy, struct schedparam *param);
- •5 Операционные системы
- •5.1 Понятие операционной системы
- •5.2 Характеристики современных ос
- •5.2.1 Многопоточность
- •5.2.2 Распределенные ос
- •5.2.3 Концепция ос на основе микроядра
- •5.2.4 Функции микроядра.
- •5.3 Принципы построения ос
- •5.4 Концептуальные основы ос
- •5.4.1 Процессы
- •Модель работы процесса с двумя приостановочными состояниями
- •Варианты решения:
- •Решение задачи взаимного исключения. Алгоритм Деккера.
- •Решение задачи взаимного исключения. Алгоритм Пэтерсона..
- •Синхронизирующие примитивы (семафоры).
- •Задача “производитель-потребитель” Общие семафоры
- •Задача “производитель-потребитель”, буфер неограниченного размера(Спящий парикмахер)
- •Задача “производитель-потребитель”, буфер ограниченного размера
- •5.4.2 Распределение ресурсов. Проблема тупиков
- •Алгоритм банкира
- •Применение алгоритма банкира
- •5.4.3 Монитороподобные средства синхронизации
- •Механизм типа «критическая область»
- •5.4.4 Виртуализация
- •5.4.5 Подсистема управления памятью
- •5.4.6 Виртуальная оперативная память
- •5.5 Аппаратные особенности процессоров Intel-архитектуры, направленных на поддержку многозадачности
- •5.5.1 Сегментация памяти. Ia-32
- •5.5.2 Распределение памяти в реальном режиме
- •5.5.3 Организация защиты в процессоре
- •5.5.4 Поддержка многозадачности в процессорах архитектуры ia-32
5.5.3 Организация защиты в процессоре
Процессор поддерживает 4 механизма защиты:
Защита по размеру сегмента – предотвращает выход за пределы сегмента;
Привилегированные команды – есть группа команд, которые могут выполнять только на нулевом уровне привилегий. Команды, связанные с обращением к системным регистрам. Есть группа IOPL команд: команды работают с портами ввода/вывода и команды установки флага прерывания. Они выполняются только когда уровень привилегий больший или равен IOPL;
Защита по привилегиям – есть понятие CPL – текущий уровень привилегий процессора (Current Privilege Level). Это уровень, на котором работает процесс в данный момент. Значение в младших битах регистра CS. При обращении к данным или другим системным объектам сравнивает значение текущего уровня привилегий с уровнем привилегий дескриптора (DPL). По результату сравнивания процессор выполняет/не выполняет действие. Более того, при обращении к памяти max(CPL,RPL)<=DPL;
Проверка на возможность выполнения действий – процессор проверяет возможность действий. Например, программа выполняет запись в сегмент данных, а сегмент только для чтения. Или попытка выполнить команду по отношению к невыполняемому сегменту.
Важным механизмом защиты является то, что передача управления возможна только на текущем уровне привилегий (команды FAR CALL и FAR IMP).
Но системные программы должны передавать пользователю программные права на управление. Существует 2 механизма передачи управления на более высокий уровень привилегий:
подчиненные сегменты;
шлюзы вызова.
Подчиненные сегменты
Сегмент кода определяется как подчиненный, если бит c в байте прав доступа дескриптора сегмента установлен в 1. при обращении к таким сегментам обычное правило защиты CPL = DPL не действует, действует тока правило, что CPL >= DPL, е.у. можно передавать управление на более высокий или текущий уровень привилегий. При передаче управления на подчиненный сегмент два младших бита регистра CS не изменяются. Таким образом, выполнение программы будет производится на том же уровне, на котором выполнялась вызывающая программа. Такой способ передачи управления используется при обращении к функциям операционной системы, которая не требует изменить состояние системы и не требует работы с внешними устройствами. Передача управления через подчиненные сегменты может осуществляться только во внутренние, более защищенные уровни привилегий.
Шлюзы вызова
Шлюзы вызова позволяют реализовать фактическое изменение уровня привилегий.
Шлюз вызова определяет точку входа программе.
Дескриптор шлюза вызова определяет полный указатель (селектор + смещение) точки входа в процедуру назначения, которой передается управление. Дескриптор шлюза вызова – это своеобразный интерфейсный слой между сегментами кода, находящимися на различных уровнях привилегий.
Шлюзы вызова определяют разрешенные точки входа в более привилегированный код и являются единственным средством смены уровня привилегии.
Дескрипторы шлюзов вызова не определяют никакого адресного пространства, поэтому у них нет полей базы и предела. По своей сути это даже не дескрипторы, но их размещают либо в глобальной дескрипторной таблице, либо, при необходимости, в локальных дескрипторных таблицах. Селекторы для выбора дескрипторов шлюзов вызова необходимо загружать только в сегментный регистр CS и ни в какие другие сегментные регистры.
Адресовать шлюз вызова можно только в команде межсегментного вызова far call, использование far jmp запрещено. Сама команда call должна адресовать шлюз вызова, а не сегмент кода назначения.
Реализованный в Intel процессорах косвенный вызов привилегированных процедур имеет несколько преимуществ:
1. Привилегированный код сильно защищен, и вызывающие его программы не могут его разрушить. При этом предполагается, что сам код такой процедуры тщательно отлажен и не содержит ошибок.
2. Шлюзы вызова делают привилегированные процедуры невидимыми для программ на внешних уровнях привилегий.
3. Так как вызывающая программа прямо адресует только шлюз, реализуемые процедурой функции можно изменить или переместить их в адресном пространстве, не затрагивая интерфейс со шлюзом.
Правила защиты при использовании шлюза вызова
1. ;
2. ;
3. .Это правило предотвращает передачу на более низкий уровень привилегий;
4. .