Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АВМиС(лекции).docx
Скачиваний:
13
Добавлен:
25.09.2019
Размер:
2.28 Mб
Скачать

Режимы работы процессора и кольца защиты.

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

К ольцо 1 – вынесены остальные части ОС

Кольцо 2 – драйверы и утилиты ввода/вывода

Кольцо 3 – приложения и действия пользователей

В линуксе 2 кольца 0 и 3. Лекция 3 Структура ядра ОС Linux

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

Интерфейс системных вызовов реализует базовые функции (например: чтение, запись).

Системные вызовы открывают в прикладной программе доступ к системной информации, системе консольного ввода/вывода, к файловой системе, к системе управления памятью и процессами, позволяют организовать обращение к драйверам. Системные вызовы могут выполняться напрямую либо через библиотеку glibc. Преимущество использования библиотеки:

  1. Библиотека выполняет роль защитной прослойки, защищая приложение от возможных ошибок связанных например с тем что в ядре изменился синтаксис системных вызовов. Библиотека предоставляет POSIX совместимый интерфейс

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

Программа выполняя библиотечную функцию находится в пользовательском режиме, библиотечные функции обращаются к системным вызовам. Например библиотечная функция printf() вызывает системный вызов write() которой вывод строку на стандартное устройство вывода. Системные вызовы выступает от имени библиотечных функций, но работают уже в привилегированном режиме. После завершения работы системного вызова, управление опять передаются библиотечным функциям, происходит обратный переход в пространство пользователя. Чтобы исполнить системный вызов процесс заполняет регистры микропроцессора, соответствующими значениями (в регистр eax помещается номер системного вызова, в остальные регистры ebx, ecx, edx, edi, esi, ebp помещаются до 6 параметров этого вызова) и выполняет инструкцию программного прерывания с номером int 80h. Интерфейс системных вызовов может быть архитектурно зависим. Архитектурно зависимая часть реализация интерфейсов находится в подкаталоге linux/arch, а архитектурно не зависимая в каталоге linux/kerned (тут походу ошибка).

Архитектурно независимый код ядра состоит из нескольких модулей.

Управление процессами в подкаталоге ./linux/proc – это управление отдельными виртуализированными объектами. В пространстве ядра эти процессы называют потоками, а в пространстве пользователя – процессы.

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

Управление памятью. Исходные коды находятся в библиотеке ./linux/mm. Для повышения эффективности память реализуется в виде страниц. В linux имеются средства для управления имеющейся памятью и аппаратными механизмами для установления соответсвия между физической и виртуальной памятью. Для хранения информации по странице физической памяти, ее физический адрес, принадлежность, режим использования и другое используется специальная структура page размером 40 байт. При наличии большого числа пользователей, для решения задачи ее исчерпания реализуется механизм подкачки (страницы удаляются из оперативной памяти и переносятся на жесткий диск).

Виртуальная файловая система. ./linux/fs представляет собой абстракцию интерфейса к многочисленным файловым системам (которых более 50).

ПРопущено

Архитектурно зависимый код. Находится в каталоге /arch. К архитектурно зависимой части также относятся и драйверы устройств

Ла ла ла системный вызов, на си будет выглядеть handle=open(‘file.txt”, O_RDWR).

На ассемблере:

Mov eax, 5

Mov ebx, filename

Mov eax, 02

Int 80h

Взаимодействие с аппаратурой из пространства пользователя возможно 2-мя способами: с использованием прерываний (системных вызовов); через порты ввода/вывода. Предпочтительным является 2-ой.

Доступ к устройствам через порты в/в может относительно безопасно выполнятся на 2-ух уровнях абстракции:

  1. Файл виртуального устройства |dex| port отображает пространство портов и при наличии необходимых прав доступа позволяет пользовательскому процессу выполнять чтение или запись в порты средствами файлового ввода/вывода (open, close, read, write).

  2. Доступ к портам на уровне модуля ядра выполняется классическими ассемблеровыми инструкциями int и out.

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