Компьютер операционный программный файловый 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Компьютер операционный программный файловый



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

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

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

Наиболее распространенным видом файлов, внутренняя структура которых обеспечивается файловыми системами различных ОС, являются файлы с последовательной структурой. Такого рода файлы можно рассматривать как набор составных элементов, называемых логическими записями (или блоками), длина которых может быть как фиксированной, так и переменной, и доступ к которым - последовательный, т.е. для обработки (считывания или записи) i -й записи должна быть обработана предыдущая (i-1)-я запись.

В ряде файловых систем предусматривается использование более сложных логических структур файлов, чем последовательная. Например, записи в файле могут образовывать древовидные структуры, может использоваться индексно-последовательная организация файлов (с упорядочением записей по значению некоторых полей) или, так называемая, библиотечная структура файлов, использующая уровень учетной информации (каталога), облегчающей поиск и доступ к отдельным компонентам файлов. На физическом уровне блоки файла (обычно размером 256 или 512 байт) могут размещаться в памяти непрерывной областью или храниться несмежно. Первый способ хранения файлов, реализованный, например, в ОС РАФОС, приводит к затруднениям при изменении размеров файлов (т.е. к необходимости перезаписи файлов, если их длина увеличивается, или хранения «дыр», если длина уменьшается).

Наиболее развитый механизм несмежного распределения блоков файлов реализован в операционной системе UNIX, в которой размеры файлов могут динамически изменяться в пределах 1 Гб. Каждый файл в системе имеет дескриптор, в составе которого хранится список, содержащий 13 номеров блоков на диске и используемый для адресации к тем блокам, которые входят в состав файла. Первые десять элементов списка непосредственно указывают на десять блоков, в которых размещаются данные файла. В одиннадцатом элементе списка указан номер блока, хранящий список из 128 номеров блоков данных, которые принадлежат файлу (это первый уровень косвенной адресации). Двенадцатый элемент ссылается на блок, который содержит список из 128 номеров блоков первого уровня косвенной адресации (это второй уровень косвенной адресации). С помощью тринадцатого элемента указывается ссылка на блок, содержащий список из 128 номеров блоков второго уровня косвенной адресации.

Роль учетного механизма, позволяющего обслуживать десятки и сотни файлов, в файловой системе очень важна. Общим приемом является сведение учетной информации о расположении файлов на магнитном диске в одно место - его каталог (директорий). Каталог представляет собой список элементов, каждый из которых описывает характеристики конкретного файла, используемые для организации доступа к этому файлу - имя файла, его тип, местоположение на диске и длину файла. В простых операционных системах (например ОС РАФОС) местоположение единственного каталога на магнитном диске (дискете) и его размер фиксированы. В более сложных системах каталог может находиться в любом месте диска, но на него должна иметься ссылка в, так называемой, метке тома, находящейся в фиксированном месте и формируемой при инициализации диска. Более того, каталогов может быть большое число и они могут быть логически связаны в какие-либо информационные структуры. Так, наиболее развитая многоуровневая файловая система UNIX поддерживает иерархическую (древовидную) систему каталогов (рис. 2). Каждый пользователь может работать в составе этой структуры со своей системой каталогов (со своим поддеревом). Полное имя файла в данной структуре задает путь переходов между каталогами в логической структуре каталогов.

Рис. 2. - Иерархическая система каталогов

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

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

В различных ОС существуют определенные ограничения на длину имени и расширения имени файла. Так, в MS-DOS длина имени файла не должна превышать восьми символов, а расширение - трех. В ОС UNIX ограничения значительно менее жесткие.

Имена директорией, начиная от корневого, образующие путь к файлу, отделяемые при записи друг от друга косой чертой (\ в DOS, / в UNIX), также как и обозначение диска, относятся к идентификатору файла. Например, в MS-DOS: d:\lang\pascal\work\example.pas

Есть файл с именем example и расширением pas, указывающем на то, что это текст программы на Паскале, полный путь к которому:

d: - диск d;

\lang\pascal\work - это структура вложенных директорией, в самом внутреннем из которых находится необходимый файл example.pas.

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

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

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

* владельца (самого себя);

*представителей той же группы пользователей, что и владелец (понятие группы полезно при совместной работе над какими-либо проектами);

* всех остальных пользователей системы.

Каждый файл (каталог) имеет три вида разрешения на доступ:

* чтение (г - read) - можно просматривать содержимое файла (каталога);

* запись (w - write) - можно менять содержимое файла (создавать или удалять файлы в каталоге);

* выполнение (х - execute) - можно использовать файл как команду UNIX.

Комбинация видов доступа к файлу записывается последовательностью 9 символов:

Отсутствие права доступа обозначается минусом. Например: rwxr-x--x - файл может быть просмотрен, изменен и запущен на выполнение владельцем, просмотрен и выполнен членами группы, к которой относится владелец, и выполнен всеми остальными пользователями системы.

10. 4.5 Защита в процедурах прерываний.

 

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

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

· Обработчик исключения или прерывания должен быть помещен в конформный кодовый сегмент. Этот способ может использоваться для обработчиков некоторых конкретных исключений (например, деления на ноль). Такие обработчики должны использовать только данные, доступные через стек. Если обработчику требуются данные из сегмента данных, этот сегмент данных должен иметь уровень привилегированности 3, то есть он должен быть незащищенным.

· Обработчик может быть помещен в кодовый сегмент с уровнем привилегированности 0. Такой обработчик будет выполняться всегда, независимо от CPL программы.

4.7 Условия возникновения исключений.

 

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

 

Сбои - Сохраненное содержимое регистров CS и EIP указывает на команду, сгенерировавшую сбой.

Ловушки - Сохраненное содержимое регистров CS и EIP, записанное в момент срабатывания ловушки, указывает на команду, которая должна быть выполнена после команды, сгенерировавшей ловушку. Если ловушка обнаружена в команде передачи управления, сохраненное содержимое регистров CS и EIP отражает эту передачу управления. Например, если ловушка сработала в команде JMP, то сохраненное значение регистров CS и EIP указывает на адрес назначения перехода команды JMP, а не на команду в следующем адресе после команды JMP.

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

 

Исключение 0 - Ошибка деления

 

Сбой типа "ошибки деления" встречается в командах DIV или IDIV, при делителе равном 0.

 

Исключение 1 - Отладочные исключения

 

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

 

· Сбой в контрольной точке адреса команды;

· Ловушка в контрольной точке адреса данных;

· Ловушка шага выполнения;

· Ловушка контрольной точки переключения задачи.

 

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

 

Исключение 3 - Контрольная точка

 

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

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

 

Исключение 4 - Переполнение

 

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

 

Исключение 5 - Контроль диапазона

 

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

 

Исключение 6 - Неверный код операции

 

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

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

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

Неопределенные коды операций:

-----------------------------------------------------------------

Однобайтовые

-----------------------------------------------------------------

D6

F1

-----------------------------------------------------------------

Двухбайтовые

-----------------------------------------------------------------

0F 07

0F 10

0F 11

0F 12

0F 13

 

F6 XX

F7 XX

 

C0 XX

C1 XX

D0 XX

D1 XX

D2 XX

D3 XX

-----------------------------------------------------------------

Выше приведенные инструкции зарезервированы «на будущее». Эти коды операций прерывания 6 не генерируют.

 

Исключение 7 - Устройство недоступно

 

Сбой типа "устройство недоступно" генерируется при одном из двух следующих условий:

 

· Процессор выполняет команду ESC при установленном бите EM регистра CR0;

· Процессор выполняет команду WAIT или ESC при установленном бите TS регистра CR0.

 

Таким образом, прерывание 7 происходит, когда программист хочет, чтобы команда ESC обрабатывалась программно (бит EM установлен), либо когда встречена команда WAIT или ESC, а контекст модуля операций с плавающей точкой отличен от контекста для текущей задачи.

Для процессоров 80286 и 386 бит MP регистра CR0 используется с битом TS для определения того, должна ли команда WAIT генерировать исключение. Для программ, выполняемых на процессоре i486, бит MP должен быть установлен всегда.

 

Исключение 8 - Двойной сбой

 

Обычно когда процессор обнаруживает исключение при попытке вызвать обработчик исключения, происшедшей ранее, эти два исключения могут обрабатываться последовательно. Однако, если процессор не в состоянии этого сделать, он генерирует исключение двойного сбоя. Для того, чтобы определить, когда о двух сбоях следует сообщить как о двойном сбое, процессор делит исключения на три класса: незначительные исключения (1-7,16), значительные исключения (0,10-13) и страничные сбои (14).

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

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

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

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

 

Исключение 9 - (Резервируется Intel. Не использовать!)

 

Прерывание 9, аварийное завершение выхода за границы сегмента сопроцессора, генерируется в системе центрального процессора 386/математического сопроцессора 387, когда процессор 386 обнаруживает нарушение границы страницы или сегмента при пересылке средней части операнда математического сопроцессора 387. Это прерывание процессором i486+ не генерируется; вместо него происходит прерывание 13.

 

Исключение 10 - Неверный TSS

 

Сбой типа "неверный TSS" генерируется при попытке переключения задачи на сегмент с неверным TSS. TSS является неверным в случаях, описанных в таблице ниже. Код ошибки помещается в стек обработчика исключений, что помогает идентифицировать причину сбоя. Бит EXT указывает, что исключение было вызвано условием вне управления программы (например, внешнее прерывание, используя шлюз задачи, попыталось выполнить переключение задачи на неверный TSS).

--------------------------------------------------------------------------------------------------------------------------

Индекс кода ошибки Описание

--------------------------------------------------------------------------------------------------------------------------

Сегмент TSS Граница сегмента TSS меньше 67H

Сегмент LDT Неверная LDT или LDT не присутствует

Сегмент стека Селектор сегмента стека превышает границу таблицы дескрипторов

Сегмент стека Сегмент стека не доступен для записи

Сегмент стека DPL сегмента стека не совместим с CPL

Сегмент стека RPL селектора сегмента стека не совместим с CPL

Сегмент кода Селектор сегмента кода превышает границу таблицы дескрипторов

Сегмент кода Сегмент кода не является выполняемым

Сегмент кода DPL не конформного сегмента кода не равен CPL

Сегмент кода DPL конформного сегмента кода больше CPL

Сегмент данных Селектор сегмента данных превышает границу таблицы дескрипторов

Сегмент данных Сегмент данных не доступен для чтения

--------------------------------------------------------------------------------------------------------------------------

 

Данный сбой может происходить как в контексте исходной задачи, так и в контексте новой задачи. До тех пор, пока процессор полностью не убедится в присутствии нового TSS, исключение происходит в контексте исходной задачи. Как только присутствие нового TSS будет подтверждено, переключение задачи считается завершенным, т.е. регистр TR загружен селектором нового TSS, и если переключение задачи является следствием CALL или прерывания, то поле Компоновки нового TSS будет содержать ссылку на старый TSS. Любые ошибки, обнаруженные процессором после этой точки, обрабатываются в контексте новой задачи.

Чтобы гарантировать доступность TSS для обработки исключения, обработчик исключения типа "неверный TSS" должен вызываться как задача посредством шлюза задачи.

 

Исключение 11 - Сегмент не присутствует

 

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

 

· При попытке загрузить регистры CS, DS, ES, FS или GS; однако, загрузка регистра SS вызывает сбой стека.

· При попытке загрузить регистр LDT при помощи команды LLDT, однако, загрузка регистра LDT во время операции переключения задачи вызывает исключение "неверный TSS".

· При попытке использовать дескриптор шлюза, помеченный признаком "сегмент не присутствует".

 

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

Если исключение "сегмент не присутствует" происходит во время переключения задачи, то не все шаги переключения задачи завершаются. При переключении задачи процессор сначала загружает все сегментные регистры, а затем проверяет допустимость их содержимого. При обнаружении исключения "сегмент не присутствует" остальные сегментные регистры не проверяются, и следовательно, не могут быть использованы для ссылок к памяти. Обработчик исключения "сегмент не присутствует" не должен полагаться на возможность использования селекторов сегментов, находящихся в регистрах CS, SS. DS, ES, FS и GS без возникновения еще одного исключения. Обработчик должен проверять все сегментные регистры перед тем, как пытаться возобновить выполнение новой задачи; в противном случае, далее могут произойти сбои общей защиты, причем в условиях, которые сделают диагностирование еще более затруднительным. Для обработки этого случая имеется три способа:

 

1. Обработка сбоя "сегмент не присутствует" в задаче. Обратное переключение на прерванную задачу заставит процессор проверить все регистры при загрузке их из TSS.

2. Использование для всех сегментных регистров команд PUSH и POP. Каждая команда POP заставит процессор проверить новое содержимое сегментного регистра.

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

 

Данное исключение помещает в стек код ошибки. Бит EXT кода ошибки устанавливается в том случае, если внешнее по отношению к программе событие вызвало прерывание, которое затем привело к ссылке на не присутствующий сегмент. Бит IDT устанавливается, если код ошибки выполняет ссылку на элемент IDT (например, команда INT, ссылающаяся на не присутствующий шлюз).

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

 

Исключение 12 - Исключение в стеке

 

Сбой в стеке генерируется в двух следующих случаях:

 

· В результате нарушения границы операцией, ссылающейся к регистру SS. Сюда входят стеко-ориентированные команды, такие как POP, PUSH, ENTER и LEAVE, а также прочие ссылки к памяти, неявно использующие стек (например, MOV AX,[BP+6]). Команда ENTER генерирует данное исключение, когда не хватает памяти для распределения локальных переменных.

· При попытке загрузить регистр SS дескриптором, отмеченным признаком "сегмент не присутствует", и допустимым во всех прочих отношениях. Это может произойти при переключении задачи, при выполнении команды CALL к другому уровню привилегированности, при возврате к другому уровню привилегированности, команде LSS, либо MOV или POP для регистра SS.

 

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

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

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

 

Исключение 13 - Общая защита

 

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

 

· Превышение границы сегмента при использовании сегментов CS, DS, ES, FS или GS.

· Превышение границы сегмента при ссылке к таблице дескрипторов.

· Передача выполнения сегменту, не являющемуся выполняемым (кодовым) сегментом.

· Попытка записи в сегмент данных, доступный только для чтения, или в кодовый сегмент.

· Чтение из кодового сегмента, доступного только для выполнения.

· Загрузка регистра SS селектором сегмента, доступного только для чтения (если только этот селектор не берется из TSS при переключении задачи, так как в этом случае происходит исключение "неверный TSS").

· Загрузка регистра SS, DS, ES, FS или GS селектором системного сегмента.

· Загрузка регистра DS, ES, FS или GS селектором кодового сегмента, доступного только для выполнения.

· Загрузка регистра SS селектором выполняемого сегмента.

· Доступ к памяти при помощи регистров DS, ES, FS или GS, когда в них содержится пустой селектор.

· Переключение на Занятую задачу.

· Нарушение правил привилегированности.

· Превышение длины команды предельного значения 15 байтов (это может случиться только при использовании перед командой избыточных префиксов).

· Загрузка регистра CR0 при установленном бите PG (подкачка страниц разрешена) и очищенном бите PE (защита запрещена).

· Прерывание или исключение через шлюз прерывания или ловушки из виртуального режима 8086 к обработчику с уровнем привилегированности иному, нежели 0.

 

Исключение общей защиты по типу относится к сбою. В ответ на исключение общей защиты процессор помещает в стек обработчика исключений код ошибки. Если исключение вызвано загрузкой дескриптора, то код ошибки содержит селектор для данного дескриптора; в противном случае код ошибки является пустым. Источник для селектора в коде ошибки может представлять собой одно из:

 

1. Операнд команды.

2. Селектор из шлюза, являющегося операндом команды.

3. Селектор из TSS, участвующего в переключении задачи.

 

Исключение 14 - Страничный сбой

 

Страничный сбой происходит, когда подкачка страниц разрешена (бит PG регистра CR0 установлен) и процессор обнаруживает одно из следующих условий во время трансляции линейного адреса в физический:

 

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

· Процедура не имеет достаточного уровня привилегированности для доступа к указанной странице.

 

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

 

· Код ошибки в стеке. Код ошибки для страничного сбоя имеет формат, отличный от формата для других особых ситуаций (см. выше). Код ошибки сообщает обработчику исключения следующие три вещи:

 

1. Произошло ли данное исключение вследствие того, что страница не присутствует, или из-за нарушения прав доступа к странице.

2. Работал ли процессор в момент исключения в режиме пользователя, или в режиме супервизора.

3. Состоял ли доступ к памяти, вызвавший данное исключения, в чтении или в записи.

 

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

 

Страничный сбой при переключении задачи

 

Следующие операции выполняют доступ к памяти при переключении задачи:

 

1. Запись состояния исходной задачи в TSS для этой задачи.

2. Чтение GDT для нахождения дескриптора TSS новой задачи.

3. Чтение TSS новой задачи для проверки типов дескрипторов сегмента из TSS.

4. Может быть выполнено чтение LDT новой задачи для верификации сегментных регистров, хранимых в новом TSS.

 

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

 

Страничный сбой при противоречивом значении указателя стека

 

Следует обращать особое внимание на то, чтобы страничный сбой не приводил к использованию процессором неверного указателя стека (SS:ESP). Программное обеспечение, написанное для 16-битовых процессоров Intel, часто использует для переключения на новый стек пару команд, например,

 

MOV SS, AX

MOV SP, StackTop

 

В случае процессора i486+, поскольку вторая команда обращается к памяти, можно получить в данном случае страничный сбой после того, как был изменен селектор сегментного регистра SS, но перед тем, как соответственно было изменено содержимое регистра SP. В этой точке две части указателя стека SS:SP (разумеется, для 32-разрядных программ это SS:ESP) противоречивы друг с другом. Новый стековый сегмент используется со старым указателем стека.

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

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

 

Исключение 16 - Ошибка операции с плавающей точкой

 

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

 

Исключение 17 - Проверка выравнивания

 

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

 

· Бит AM регистра CR0 должен быть установлен;

· Флаг AC должен быть установлен;

· CPL должен быть равен 3 (уровень пользователя).

 

-----------------------------------------------------------------

Тип данных Адрес должен нацело делиться на

-----------------------------------------------------------------

Слово 2

Двойное слово 4

Короткое вещественное 4

Длинное вещественное 8

Временное вещественное 8

Селектор 2

48-разрядный сегментированный указатель 4

32-разрядный плоский указатель 4

32-разрядный сегментированный указатель 2

48-разрядный "Псевдо-дескриптор" 4

Область хранения FSTENV/FLDENV 4 или 2, в зависимости от

размера операнда

Область хранения FSAVE/FRSTOR 4 или 2, в зависимости от

размера операнда

Битовая строка 4

-----------------------------------------------------------------

 



Поделиться:


Последнее изменение этой страницы: 2017-02-05; просмотров: 151; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.19.56.45 (0.179 с.)