- •Мультиметр
- •Генератор слов
- •Логический анализатор
- •Логический преобразователь
- •Осциллограф.
- •Разработка схем цифровых устройств
- •5.1. Вывод элементов схем на рабочую поверхность
- •Монтаж схем
- •Синхронные символьно-ориентированные и бит-ориентированные протоколы
- •Передача с установлением соединения и без установления соединения
- •Максимальная производительность сети Ethernet
- •Форматы кадров технологии Ethernet
- •Глобальные связи на основе сетей с коммутацией каналов
- •Типы адресов стека tcp/ip
- •Источники и типы записей в таблице маршрутизации:
- •Фрагментация ip-пакетов
- •5.9. Приклад обробки пеpеpивань в захищеному режимi
- •5.9.1. Опис програми p_int
- •Времянезависимые способы защиты от копирования Инженерные дорожки
- •Нестандартная длина сектора
- •Способы защиты, опирающиеся на временные параметры
- •Проверка чередования секторов на дорожке
- •Монолитные системы
- •Многоуровневые системы
- •Модель клиент-сервер и микроядра
- •Технические характеристики системной платы
- •Пятие цветовой гармонии :
- •Транзакции и целостность баз данных
- •Журнализация изменений бд
5.9. Приклад обробки пеpеpивань в захищеному режимi
5.9.1. Опис програми p_int
Як приклад обробки пеpеpивань в захищеному режимi в програмi P_INT розробленi процедури обробки виключень, зовнiшнiх апаратних пеpеpивань i програмних пеpеpивань, що працюють в захищеному режимi. При цьому програма P_INT виконує наступнi функцiї:
визначає значення типу встановленого на комп'ютерi мiкpопpоцесоpа, яке використовується при переведеннi МП в захищений режим i поверненні його в реальний режим, а також при формуваннi дескрипторiв шлюзiв;
формує таблицю GDT, що мiстить дескpиптоpи сегментiв коду, стека, даних, які мають тi ж адреси i розмiри, що i в реальному режимi, а також сегмента вiдеопам'ятi;
формує i заносить в регiстр GDTR базову адресу i гpаницю отриманої глобальної дескpиптоpної таблицi;
формує структури даних, необхiднi для повернення в реальний режим iз захищеного пiсля скидання МП;
забороняє маскуємі та немаскуємі переривання;
формує таблицю IDT, що мiстить дескpиптоpи шлюзiв виключень 0-8, Ah-Dh, 10h-11h, зовнiшнiх апаратних пеpеpивань i програмного пеpеpивання з номером 30h;
формує i заносить в регiстр IDTR базову адресу i гpаницю таблиці IDTR;
формує атрибути таблиці IDTR для роботи в реальному режимі;
здiйснює перепрограмування контpолеpа пеpеpивань з метою змiни номерiв пеpеpивань вiд зовнішніх пристроїв;
зберiгає в пам'ятi сегментнi регiстри i регiстр показчика стека;
здiйснює переведення МП в захищений режим;
в захищеному режимi здiйснює обробку виключень, зовнiшнiх апаратних пеpеpивань i програмних пеpеpивань;
в залежностi вiд типу мiкpопpоцесоpа виконує повернення в реальний режим або шляхом скидання МП (для 80286), або за допомогою команди MOV (для i486 i вище);
перевіряє коректність повернення МП з захищеного режиму за командою MOV;
дозволяє маскуємі та немаскуємі переривання;
розмасковує контролери переривань;
у випадку виникнення при роботi програми виключення виводить його номер на екран.
Розглянемо бiльш докладно роботу програми P_INT в захищеному режимi.
Пiсля переведення МП в захищений режим, завантаження сегментних регiстрiв вiдповiдними селекторами GDT i виведення на екран повiдомлення "Обробка пеpеpивань в захищеному режимi" програма P_INT органiзує очiкування зовнiшнiх апаратних пеpеpивань шляхом опитування значення змiнної-семафора semaf. Початкове значення змiнної semaf дорiвнює 0, i доки значення семафора не стане рiвним 1 буде тривати цикл очiкування (i обробки) пеpеpивань. Семафор встановлюється обpобником пеpеpивання вiд клавiатури пiсля натиснення клавiшi "ESC".
Обробка зовнiшнiх апаратних пеpеpивань виконується обpобниками timer, keyb, irq2_7 i irq8_15.
Обpобник пеpеpивання вiд клавiатури keyb здiйснює читання скан-коду клавiшi з порту 60h, виведення значення скан-коду натиснення клавiшi на екран i встановлення семафора semaf пiсля натиснення клавiшi "ESC" (скан-код натиснення цiєї клавiшi рiвний 1).
Обpобники iнших зовнiшнiх апаратних пеpеpивань є заглушками i виконують лише необхiдне для роботи системи скидання контролерiв пеpеpивань командами
mov al,$20
out $20,al { Скидання 1-го контpолеpа пеpеpивань }
mov al,$20
out $a0,al { Скидання 2-го контpолеpа пеpеpивань }
Оскiльки в захищеному режимi не можна використовувати функцiї DOS, для виведення iнформацiї на екран розроблений обpобник програмного пеpеpивання з номером 30h. Пеpеpивання 30h має чотири функцiї:
функцiя 1 встановлює маркер в задану точку екрана;
функцiя 2 виводить символ на екран;
функцiя 3 виводить значення байта у виглядi 2-х 16-рiчних символiв на екран;
функцiя 4 виводить на екран рядок символiв.
Функцiї 1 i 4 пеpеpивання 30h використовувались в програмi при виведеннi в задане мiсце екрана рядка "Обробка пеpеpивань в захищеному режимi", а функцiя 3 - при виведеннi обpобником пеpеpивання вiд клавiатури значень скан-кодiв клавіш.
Обpобники виключень exc_00 - exc_18, всiх зовнiшнiх пеpеpивань, а також програмного пеpеpивання 30h використовуються, окрiм програми P_INT , також в програмi P_MULTI i тому описанi в модулi PROT.
Програма P_INT здiйснює обробку всiх виключень МП за допомогою обpобникiв exc_00-exc_10, exc_0B i exc_12-exc_18. Всi обpобники виключень (окрiм обpобника виключення exc_0B) заносять в глобальну змiнну excep значення, рiвне номеру виниклого виключення, i здiйснюють повернення в реальний режим. Значення змiнної excep допомагає при налагоджуваннi визначити причину несанкціонованого завершення програми.
Обpобник виключення 11 ("Вiдсутнiсть сегмента в пам'ятi") в програмi P_INT iменується exc_0B i вiдрiзняється вiд обpобника-заглушки exc_11, описаного в модулi PROT.
Обpобник exc_0B iмiтує режим свопiнга (swapping): при формуваннi дескриптора сегмента даних бiт P байта доступу встановлюється рiвним 0, тобто iмiтується вiдсутнiсть даного сегмента в пам'ятi. Коли виконується команда звернення до цього сегмента, виникає виключення 11 i обpобник цього виключення по прочитаному в стекi коду помилки визначає номер дескриптора в GDT того сегмента, якого немає в пам'ятi, тобто сегмента даних, i присвоює бiту P дескриптора цього сегмента значення 1 ("Сегмент в пам'ятi"). Оскiльки пiсля обробки цього виключення управлiння передається знову до команди звернення до сегмента даних, то вiдбувається нормальне звернення до цього сегмента.
Таким чином це виключення виявилося непомітним (прозорим) для команди, що зверталася до сегмента. При своппiнгi вiдсутнiй в пам'ятi сегмент завантажується з магнiтного диска в пам'ять теж непомітно для програми користувача.
Програма P_INT має особливостi реалiзацiї повернення мiкpопpоцесоpа в реальний режим за командою MOV (cpu_type > 2) у порiвняннi з програмою P_MODE (див. роздiл 4). Програма P_INT при поверненнi в реальний режим виконує всi пункти, означенi в пiдроздiлi 5.6, окрiм пункту "б" (сегмент коду вже має розмiр 64 кбайти):
забороняє апаратнi пеpеpивання;
завантажує сегментнi регiстри DS, SS i ES необхiдним селектором;
завантажує в регiстр IDTR базову адресу (0) i гpаницю (3FFh) таблицi векторiв, які необхiднi в реальному режимi;
очищає бiт PE регістра CR0;
виконує мiжсегментний перехiд на мiтку, з якої починається робота в реальному режимi.
2. 34 ЗАХИСТ ПАМ’ЯТІ. РІВНІ ПРИВІЛЕЇВ. ОСОБЛИВОСТІ ЗАХИСТУ СЕГМЕНТІВ ДАНИХ, СТЕКУ, КОДУ ТА ПРИСТРОЇВ ВВЕДЕННЯ/ВИВЕДЕННЯ.
Под защитой памяти понимается система правил, которые на аппаратном уровне регламентируют доступ к данным и командам в памяти в зависимости от их уровня защищенности и уровня привилегированности.
В микропроцессоре реализовано 4 уровня привилегий:
-0 - высший;
-1;
-2;
-3 - низший.
Защита памяти имеет дело с такими понятиями:
DPL (Descriptor Privilege Level) – уровень привилегированности сегмента. Находится в байте доступа дескриптора сегмента (биты 5-6).
RPL (Request Privilege Level) – запрашиваемый уровень привилегий. Находится в сегментном регистре (биты 0-1).
CPL (Current Privilege Level) – текущий уровень привилегий. Хранится в поле RPL регистра сегмента кода (CS).
Правила зашиты памяти:
1. Доступ к сегментам данных:
max (CPL, DPL) <= DPL.
Если принять CPL=RPL, то CPL <= DPL.
Т.е. уровень привилегий текущей задачи должен быть не ниже уровня привилегий необходимого сегмента данных.
2. Доступ к сегментам стека:
CPL=RPL=DPL.
Т.е. можно обращаться только к стеку с таким же уровнем привилегий, как и у текущей задачи.
3. Доступ к сегментам кода:
Для доступа к сегментам кода используются межсегментные команды JMP, CALL, RET.
а). Всегда одна программа может вызвать другую, если они находятся в одном кольце защиты.
б). Никогда программа с более высоким уровнем привилегий не может вызвать программу с более низким уровнем привилегий. Только в многозадачном режиме программа любого уровня может вызвать программу любого другого уровня.
в). Кроме двух описанных ниже случаев, программа с более низким уровнем привилегий не может вызвать программу с более высоким уровнем привилегий:
- вызов подчиненных программ (т.е. программ, которые имеют бит С=1 в байте доступа). Поле CPL не меняется.
- вызов программ через шлюз вызова. Допускается доступ не ко всей программе, а только к определенной разрешенной точке программы. Эта точка называется шлюзом. При этом программа будет работать на более высоком уровне привилегий.
Правила доступа для шлюзов:
Max (CPL, RPL) <= DPL шлюза.
Но CPL >= DPL вызываемой программы.
2.35. АПАРАТНІ ЗАСОБИ ПІДТРИМКИ БАГАТОЗАДАЧНОЇ РОБОТИ МІКРОПРОЦЕСОРА. СТРУКТУРА АБЛИЦІ СТАНУ ЗАДАЧ. АЛГОРИТМИ ТА МЕХАНІЗМИ ПЕРЕКЛЮЧЕННЯ ЗАДАЧ.
Многозадачность имеет следующие аппаратные средства поддержки:
1. Каждая задача должна иметь свой сегмент состояния TSS (Task State Segment):
|
31 16 |
15 0 |
|
|
0 |
Селектор возврата |
|
|
ESP0 |
||
|
|
SS0 |
|
|
ESP1 |
||
|
|
SS1 |
|
|
ESP2 |
||
|
|
SS2 |
|
|
CR3 |
||
|
|
EIP |
|
|
EFLAGS |
||
|
EAX |
||
|
ECX |
||
|
EDX |
||
|
EBX |
||
|
ESP |
||
|
EBP |
||
|
ESI |
||
|
EDI |
||
|
0 |
ES |
|
|
0 |
CS |
|
|
0 |
SS |
|
|
0 |
DS |
|
|
0 |
FS |
|
|
0 |
GS |
|
|
0 |
Селектор LDT |
|
|
Относительный адрес БКВВ |
0 |
T |
|
Информация ОС |
||
|
Базовая карта ввода/вывода (БКВВ) |
||
Минимальный размер TSS – 104 байта.
Последние две строки – необязательная информация.
Бит Т – бит трассировки.
Селектор возврата содержит селектор той задачи, которая вызвала данную по команде CALL.
Содержимое регистров МП, которое хранится в TSS данной задачи, называется контекстом задачи.
2. Каждый TSS должен иметь свой дескриптор.
Формат байта доступа дескриптора TSS:
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
P |
DPL |
0 |
1 |
0 |
B |
1 |
|
Если задача была вызвана, то B(Busy)=1. Если B=1, то задачу вызвать нельзя. Поэтому рекурсивный вызов задач невозможен.
3. Регистр задач TR (Task Register): в нем хранится селектор TSS текущей задачи.
Механизм переключения задач:
Переключение задач осуществляется межсегментными командами JMP, CALL, IRET.
JMP <селектор> <смещение>
CALL <селектор> <смещение>
1. Микропроцессор (МП) из регистра TR определяет адрес TSS текущей задачи и переписывает в TSS содержимое регистров текущей задачи (контекст задачи).
2. Для команд JMP и CALL МП берет селектор из команды, а для команды IRET – селектор из поля возврата TSS. Селектор загружается в регистр TR => текущей становится новая задача.
3. По селектору МП находит в памяти TSS новой задачи. Из TSS МП загружает регистры новым содержимым. Это называется переключением контекста задачи.
4. Поле <смещение> не используется.
5. В новой задаче устанавливается бит B(Busy)=1. Если была команда JMP или IRET, то бит В предыдущей задачи сбрасывается. При CALL – не сбрасывается (т.к. задача не может вызвать саму себя). Рекурсия запрещена, т.к. каждая задача имеет только один TSS. При рекурсии мы потеряем старое содержимое TSS. Но внутри задачи рекурсия разрешена.
6. В регистре CR0 есть бит TS (Task Switched). При любом переключении задач бит TS устанавливается в 1. Если при этом встретится программа сопроцессора, то вызывается исключение №7 (FPU недоступен). Бит TS аппаратно не сбрасывается. Поэтому каждая задача должна сама сбрасывать бит TS.
7. При выполнении команды CALL устанавливается бит NT (Nesting Task) в поле регистра флагов TSS. Если NT=1, то команда IRET выполняет действия, описанные выше. Если NT=0, то IRET выполняется обычным образом.
2.36.АЛГОРИТМИ ТА МЕХАНІЗМИ ПЕРЕКЛЮЧЕННЯ ЗАДАЧ
Механизм переключения задач:
Переключение задач осуществляется межсегментными командами JMP, CALL, IRET.
JMP <селектор> <смещение>
CALL <селектор> <смещение>
1. Микропроцессор (МП) из регистра TR определяет адрес TSS текущей задачи и переписывает в TSS содержимое регистров текущей задачи (контекст задачи).
2. Для команд JMP и CALL МП берет селектор из команды, а для команды IRET – селектор из поля возврата TSS. Селектор загружается в регистр TR => текущей становится новая задача.
3. По селектору МП находит в памяти TSS новой задачи. Из TSS МП загружает регистры новым содержимым. Это называется переключением контекста задачи.
4. Поле <смещение> не используется.
5. В новой задаче устанавливается бит B(Busy)=1. Если была команда JMP или IRET, то бит В предыдущей задачи сбрасывается. При CALL – не сбрасывается (т.к. задача не может вызвать саму себя). Рекурсия запрещена, т.к. каждая задача имеет только один TSS. При рекурсии мы потеряем старое содержимое TSS. Но внутри задачи рекурсия разрешена.
6. В регистре CR0 есть бит TS (Task Switched). При любом переключении задач бит TS устанавливается в 1. Если при этом встретится программа сопроцессора, то вызывается исключение №7 (FPU недоступен). Бит TS аппаратно не сбрасывается. Поэтому каждая задача должна сама сбрасывать бит TS.
7. При выполнении команды CALL устанавливается бит NT (Nesting Task) в поле регистра флагов TSS. Если NT=1, то команда IRET выполняет действия, описанные выше. Если NT=0, то IRET выполняется обычным образом.
2.37. СТОРІНКОВА ОРГАНІЗАЦІЯ ПАМ’ЯТІ. РОЗРОБКА ПОКАЖЧИКІВ ТАБЛИЦЬ ТА СТОРІНОК ФОРМУВАННЯ ФІЗИЧНОЇ АДРЕСИ ДЛЯ 4К-, 2М- І 4М-БАЙТНИХ СТОРІНОК.
В защищенном режиме сегменты могут иметь размер до 4 Гб, что может превышать размер физической памяти. Поэтому в режиме Р-32 кроме сегментной организации реализована страничная организация памяти. Эти две структуры работают независимо. Один сегмент состоит из нескольких страниц (как правило). Границы сегментов и страниц могут не совпадать. Логические адреса всех задач образуют виртуальную память, которая может достигать 64 Тб. Реально процессор работает с физической памятью. Загрузка виртуальных блоков в физическую память по мере необходимости называется свопингом, или подкачкой. Эти действия выполняются на уровне страниц. Страницы имеют фиксированный размер – 4Кб, 2Мб, 4Мб, который позволяет эффективно выполнять свопинг.
Страничная организация разрешается старшим разрядом регистра CR0 – PG (Paging). При этом полученный после сегментного преобразования 32-разрядный линейный адрес преобразуется в 32-разрядный физический адрес. Процесс преобразования еще называют трансляцией адреса. Алгоритм трансляции адреса (для 4Кб страниц):
В исходном линейном адресе младшие 12 разрядов действительно являются адресом внутри страницы и никогда не меняются при преобразованиях. Старшая часть линейного адреса разбита на две части по 10 разрядов. Одна из них является индексом в каталоге (максимум – 1024 элементов), другая – индексом в таблице страниц (максимум – 1024 элементов). С каждым элементом каталога связана своя таблица страниц, а каждый элемент таблицы страниц хранит физический адрес одной страницы в памяти. В регистре CR3 хранится начальный адрес каталога страниц.

Элементами каталога являются PDE, а элементами таблицы страниц – PTE. Элементы PDE и PTE имеют одинаковую структуру:
0: P (Present) – флаг присутствия. Показывает, имеется ли в данный момент данная страница в ОЗУ.
1: R/W
2: User/System
Биты 2 и 1 задают права доступа к странице:
|
Бит 2 |
Бит 1 |
Доступ |
|
|
User |
System |
||
|
0 |
0 |
- |
R |
|
0 |
1 |
- |
R/W |
|
1 |
0 |
R |
R/W |
|
1 |
1 |
R/W |
R/W |
3: PWT (Page Level Write Through) – кэширование на уровне страниц. PWT=0 – Write Through, PWT=1 – Write Back/
4: PCD (Page Level Cache Disable) – запрет кэширования страниц.
5: A (Access - )флаг доступа. Показывает, было ли обращение к данной странице.
6: D (Dirty - )флаг мусора. Равен 1, если в соответствующую страницу/таблицу была запись информации, т.е. при записи страницы ее надо скопировать на диск.
7: PS (Page Size) (только для таблиц). PS=0 – 4Kb, PS=1 – 4Mb/2Mb/
8: G (Global) (только для станиц). G=1 – страница глобальная.
9-11: резерв для ОС.
12-31: Указатель на таблицу страниц (для PDE), либо на страницу (для PTE).
Для 4Мб страниц поле смещения в линейном адресе занимает 22 младших разряда, а 10 старших разрядов – индекс в каталоге таблиц. Таблицы страниц отсутствуют.
3.1. ЗАСОБИ ЗАХИСТУ НОСІЇВ ІНФОРМАЦІЇ. ЗАПИСУВАННЯ ЗА МЕЖАМИ ПОЛЯ ФОРМАТУВАННЯ. ЗМІНА ДОВЖИНИ СЕКТОРА. ЧЕРГУВАННЯ СЕКТОРІВ.
Обеспечить некопируемость информация с дискеты — значит добиться того, чтобы при переносе на другую дискету параметры представления данных на копии существенно изменились по сравнению с оригиналом.
Некопируемой меткой назовем совокупность информационных признаков магнитного носителя, существенно изменяющейся при его копировании.
Существуют два основных способа формирования таких меток:
-
нанесением магнитной метки;
-
нанесением физической метки.
Особенность первого случая состоит в том, что метка наносится оборудованием того же типа, которым и читается. Однако, чаще всего копирование происходит не на той ПЭВМ, на которой метка была проставлена. Поэтому, процесс копирования может внести в параметры представления информации на дискете особенности дисковода или дисководов, на которых производилось копирование, а также особенности того или иного способа копирования.
С другой стороны, возможно так создать метку, чтобы она не могла быть корректно считана и/или записана. Например, форматировать большое число секторов малой длины, а записывать информацию в виде длинных секторов и т. д.
Итак, при нанесении магнитной метки можно выделить следующие приемы:
-
Вынос метки за пределы стандартного поля копирования;
-
Нестандартная разметка дорожки (дорожек) дискеты;
-
Привязка к временным параметрам чтения/записи;
-
Комбинированные методы (сочетание первых трех).
Для этого можно применить также прерывание INT 13h, изменив соответствующим образом таблицу базы гибкого диска. Ссылка на таблицу базы диска находится по адресу: (0000:0078h)
Стандартное содержание таблицы базы диска для дискет 1.44 Мбайт:
|
Смещение: |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
|
Содержание: |
DF |
02 |
25 |
02 |
12 |
1В |
FF |
54 |
F6 |
01 |
08 |
Из параметров базы диска наиболее интересны следующие:
-
размер сектора (0 —128 байт, 1 — 256 байт, 2 — 512 байт, 3 — 1024 байта);
-
номер последнего сектора на дорожке;
-
межсекторный интервал для операций чтения и записи;
-
межсекторный интервал для операции форматирования.
