Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
20-26.docx
Скачиваний:
2
Добавлен:
17.09.2019
Размер:
31.69 Кб
Скачать

Прерывание (hardware interrupt) событие, генерируемое внешним (по отношению к процессору) устройством. Посредством аппаратных прерываний аппаратура либо информирует центральный процессор о том, что возникло какое‑либо событие, требующее немедленной реакции (например, пользователь нажал клавишу), либо сообщает о завершении асинхронной операции ввода‑вывода (например, закончено чтение данных с диска в основную память). Важный тип аппаратных прерываний прерывания таймера, которые генерируются периодически через фиксированный промежуток времени. Прерывания таймера используются операционной системой при планировании процессов. Каждый тип аппаратных прерываний имеет собственный номер, однозначно определяющий источник прерывания. Аппаратное прерывание это асинхронное событие, то есть оно возникает вне зависимости от того, какой код исполняется процессором в данный момент. Обработка аппаратного прерывания не должна учитывать, какой процесс является текущим.

Защита памяти (Memory protection) — способ управления правами доступа к отдельным регионам памяти. Используется большинством многозадачных операционных систем. Основной целью защиты памяти является запрет доступа процессу к той памяти, которая не выделена для этого процесса.

Защита отдельных ячеек памяти организуется в ЭВМ, предназначенных для работы в системах управления, где необходимо обеспечить возможность отладки новых программ без нарушения функционирования находящихся в памяти рабочих программ, управляющих технологическим процессом. Это может быть достигнуто выделением в каждой ячейке памяти специального "разряда защиты". Установка этого разряда в "1" запрещает производить запись в данную ячейку, что обеспечивает сохранение рабочих программ. Недостаток такого подхода - большая избыточность в кодировании информации из-за излишне мелкого уровня защищаемого объекта (ячейка).

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

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

Модификация этого метода заключается в том, что один регистр используется для указания адреса начала защищаемой области, а другой содержит длину этой области.

Метод граничных регистров, обладая несомненной простотой реализации, имеет и определенные недостатки. Основным из них является то, что этот метод поддерживает работу лишь с непрерывными областями памяти.

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

Память в логическом отношении делится на одинаковые блоки, например, страницы. Каждому блоку памяти ставится в соответствие код, называемый ключом защиты памяти, а каждой программе, принимающей участие в мультипрограммной обработке, присваивается код ключа программы. Доступ программы к данному блоку памяти для чтения и записи разрешен, если ключи совпадают (то есть данный блок памяти относится к данной программе) или один из них имеет код 0 (код 0 присваивается программам операционной системы и блокам памяти, к которым имеют доступ все программы: общие данные, совместно используемые подпрограммы и т. п.). Коды ключей защиты блоков памяти и ключей программ устанавливаются операционной системой.

Защита по привилегиям фиксирует более тонкие ошибки, связанные, в основном, с разграничением прав доступа к той или иной информации.

В какой-то степени защиту по привилегиям можно сравнить с классическим методом ключей защиты памяти. Различным объектам (программам, сегментам памяти, запросам на обращение к памяти и к внешним устройствам), которые должны быть распознаны процессором, присваивается идентификатор, называемый уровнем привилегий. Процессор постоянно контролирует, имеет ли текущая программа достаточные привилегии, чтобы

  • выполнять некоторые команды,

  • выполнять команды ввода-вывода на том или ином внешнем устройстве,

  • обращаться к данным других программ,

  • вызывать другие программы.

На аппаратном уровне в процессоре различаются 4 уровня привилегий. Наиболее привилегированными являются программы на уровне 0.

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

Как правило, распределение программ по кольцам защиты имеет следующий вид:

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

уровень 1 - основная часть программ ОС (утилиты);

уровень 2 - служебные программы ОС (драйверы, СУБД, специализированные подсистемы программирования и др.);

уровень 3 - прикладные программы пользователя.

Конкретная операционная система не обязательно должна поддерживать все четыре уровня привилегий. Так, ОС UNIX работает с двумя кольцами защиты: супервизор (уровень 0) и пользователь (уровни 1,2,3). Операционная система OS/2 поддерживает три уровня: код ОС работает в кольце 0, специальные процедуры для обращения к устройствам ввода-вывода действуют в кольце 1, а прикладные программы выполняются в кольце 3.

Режим супервизора — привилегированный режим работы процессора, как правило используемый для выполнения ядра операционной системы.

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

Регистровые Окна

Пусть имеется K физических регистров. В каждый момент времени программа "видит" не все K регистров сразу, а L виртуальных регистров, L<K. При этом, каждому виртуальному регистру соответствует физический регистр. Множество физических регистров, которое в данный момент соответствует набору виртуальных регистров, называется регистровым окном. Это соответствие можно программно менять (не произвольно, а некоторым специальным образом), т.е. регистровое окно можно "сдвигать". Виртуальные регистры (и, следовательно, физические регистры, находящиеся в данный момент в регистровом окне) разбиты на три категории: регистры для входных параметров (пусть их L1), регистры для локальных переменных (пусть их L2), регистры для выходных параметров (пусть их L3).

Регистров для входных параметров столько же, сколько и для выходных параметров (L1=L3). Имеются два специальных регистра: CWP – current window pointer (указатель на текущее окно) и SWP – saved window pointer (указатель на сохраненное окно). Здесь имеется ввиду не указатель в обычном смысле (на ячейку памяти), а некоторое значение, означающее положение регистрового окна среди физических регистров.

Пусть физические регистры образуют массив, элементы которого – структуры, состоящие из регистров для входных параметров и регистров для локальных переменных, а в окне сначала идут регистры для входных параметров, затем регистры для локальных переменных и потом регистры для выходных параметров. Таким образом, окно целиком содержит один элемент массива и часть (регистры для выходных параметров) следующего (если окно на последнем элементе, то регистрами для выходных параметров будут регистры для входных параметров первого элемента). Тогда "указателем на окно" может быть, например, индекс в этом массиве, соответствующий тому элементу, с которого "начинается" окно. Мы, естественно, считаем, что K делится на L1+L2. Пусть K/(L1+L2)=N, т.е. в массиве физических регистров может храниться N окон.

В CWP хранится указатель на текущее окно. В SWP хранится указатель на первое из используемых программой окон, которое еще не откачано в ОП (подробнее см. ниже).

  • При вызове функции параметры записываются в регистры для выходных параметров. Затем CWP сдвикается циклически на 1 вперед, проверяется, совпадает ли он с SWP. Если да, то происходит прерывание, окно, на которое указывает SWP, откачивается в ОП и SWP также сдвикается циклически на 1 вперед. Текущим окном становится то, на которое указывает CWP, при этом получается, что входные параметры записаны.

При выходе из функции CWP сдвикается циклически на 1 назад, проверяется, равен ли ((CWP+1)mod N) SWP. Если да, то происходит прерывание, окно, на которое указывает SWP, восстанавливается из ОП и SWP также сдвикается циклически на 1 назад.

Управление памятью

разделы

Самым простым способом управления оперативной памятью является её предварительное (обычно на этапе генерации или в момент загрузки системы) разбиение на несколько разделов фиксированной величины. Поступающие процессы помещаются в тот или иной раздел. При этом происходит условное разбиение физического адресного пространства. Связывание логических и физических адресов процесса происходит на этапе его загрузки в конкретный раздел, иногда – этапе компиляции.

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

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

Очевидный недостаток этой схемы – число одновременно выполняемых процессов ограничено числом разделов.

Другим существенным недостатком является то, что предлагаемая схема сильно страдает от внутренней фрагментации – потери части памяти, выделенной процессу, но не используемой им. Фрагментация возникает потому, что процесс не полностью занимает выделенный ему раздел или по тому, что некоторые разделы слишком малы для выполняемых пользовательских программ

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]