Процессор INTEL в защищённом режиме #11 — Архив WASM.RU

Все статьи

Процессор INTEL в защищённом режиме #11 — Архив WASM.RU

Вступление

Здравствуйте уважаемые читатели (перейдем на "вы" :). Рассылка вернулась из зимней спячки. Как ни странно, процессоры Intel с архитектурой IA-32 до сих пор не ушли со сцены и продолжают лидировать в хит-парадах (и, по крайней мере, еще года 2 картина не изменится), поэтому рассылка не потеряла свою актуальность и можно продолжать изучение защищенного режима дальше.

Даже после того, как Itanium-ы полностью вытеснят со сцены IA-32 (хотя Itanium больше похож на проходную модель и скорее всего не займет процессорную нишу надолго) актуальность рассылки не пропадет: дело в том, что базовые понятия, которые вы накопите при изучении защ. режима IA-32, будут использованы при построении новых моделей процессоров еще очень долго. Уже сейчас, при разработке новых ОС используются знания и наработки 20-ти летней давности, то же самое ожидает и процессоры.

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

Защита

Данный выпуск я бы назвал самым идейным и важным из всего цикла, т.к. он повествует о самой сердцевине защищенного режима и любой современной ОС - о самом механизме защиты. Более того - в аннотации к рассылке можно увидеть слова из небезызвестной книги Зубкова С.В.: "...управление защищенным режимом в современных процессорах Intel - это самый сложный раздел программирования". От себя хочу добавить, что в этом разделе программирования глава "Механизм защиты" является самой сложной (хотя на самом деле все очень просто, сами убедитесь в этом).

Самый (опять это слово :), оно еще не раз встретится в данном выпуске, тема обязывает) главный вопрос, от которого и нужно плясать - так что же от чего все таки нужно защищать?

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

Как можно убедиться на практике, связать аппаратные механизмы защиты с программными разработчикам из Microsoft (по крайней мере до Win2000) удавалось крайне плохо: в 99% "синих окон смерти" повинны дыры и недоработки именно в реализации защитных механизмов. Отчасти это вызвано кривыми руками разработчиков ОС, отчасти - кривой реализацией аппаратной защиты (да да! Почему то все любят спорить о глючности той или иной ОС, и никто никогда не скажет: "да этот процессор глючный, в нем много дыр и недоработок". Просто следует иметь ввиду, что аппаратная часть обычно не лишена недостатков программной. Это интересная тема, ее можно развить и дальше, однако в конце концов можно прийти к выводу, что защита в IA-32 реализована настолько слабо и непродуманно (или что ее как-то не очень удобно "связать" с программной частью), что нет никакого смысла вообще о ней говорить. Это не так (во всяком случае, пока я набираю этот текст в Word-е, комп ни разу не завис).

Не нам об этом судить, но придет время, когда все современные методы и аппаратные механизмы вызовут лишь улыбку у гения инженеров будущего…

Итак, давайте не будем о грустном и, наконец, перейдем к делу (уже давно пора). В процессорах с архитектурой IA-32 защитные механизмы реализованы как на сегментном, так и на страничном уровнях (т.е. после включения страничной адресации нам предоставляются некоторые дополнительные возможности защиты, которые, вообще говоря, без страничной адресации не имеет смысла применять). Процессор различает четыре уровня сегментной защиты (3-0) и два - страничной (здесь номеров нет, но условно их два). Чем уровень ниже (численно), тем сегмент круче. Так, весь код ядра ОС, дрова устройств и другие распальцованные сущности помещают в сегменты с НУЛЕВЫМ (самый крутой) уровнем привилегий. Если перенести картину в нашу реальность, то в таких сегментах можно смело размещать код депутатов Госдумы, работников СБУ и всех, кто как говориться "когда идет по улице задевает всё пальцами". Простым смертным сюда вход строго воспрещен (только по пропускам, выданным вышеперечисленными ребятами, хотя "имея связи" в таблице дескрипторов прерываний (все как в жизни) сюда может запросто проникнуть любой директор колхоза "Красные маки" с 3 уровня привилегий (кстати, это не дыра, просто по другому было невозможно реализовать...), но об этом в следующем выпуске).

Механизм защиты обеспечивает проверку КАЖДОГО (!) обращения к памяти (естественно, до цикла чтения/записи). Любое нарушение границ и других законов, предписанных УК IA-32 (все статьи внимательно рассмотрим) - генерация исключения (что может привести к любым последствиям - вплоть до высшей меры наказания - расстрела приложения-нарушителя). Пожизненного заключения УК не предусматривает, т.к. процессор полностью свободен от морально-нравственных и т.п. сомнительных ценностей (последнее можно запросто вырезать цензурой).

Следует отметить, что все проверки производятся ПАРАЛЛЕЛЬНО с процедурой преобразования адресов, поэтому задержка на проверку отсутствует. Условно УК IA-32 можно разделить на 6 разделов:

  • Проверка границ
  • Проверка типов
  • Проверка уровней привилегий
  • Ограничения на адресацию
  • Ограничения на использование инструкций
  • Ограничения на точки входа в процедуры (?)

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

Как уже говорилось ранее, нарушение любой статьи из любого раздела УК IA32 влечет генерацию прерывания и в зависимости от степени нарушения - соответствующие последствия для провинившегося. В ОС типа Win 9x любого нарушителя ждала одна и та же участь - расстрел на месте (поэтому Win 9x больше подходит под определение ОС 30-х годов прошлого века). В Win NT к власти пришли более разборчивые и творческие личности, здесь нарушитель в зависимости от степени нарушения может отделаться "легким испугом" J либо небольшим заключением в местах не столь отдаленных (подождет, когда ему будет "можно"). Этим NT более подходит под определение современной гуманной ОС.

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

Очень важно понять: государство (читай - процессор) НЕ принимает решения самостоятельно, он просто констатирует уже свершившиеся факты, ПРОЦЕССОР НЕ МОЖЕТ убить программу (насильно завершить ее выполнение) - все решения принимают люди, населяющие данное государство (читай - программная реализация). Мозг власти (Госдума) - это не что иное, как обработчик исключения #GP и смежных с ним ведомств и подведомств (обработчики других исключений типа fault). Все зависит только от их реализации.

Вообще другой вывод (не менее важный) напрашивается сам собой - все сложные системы похожи друг на друга как близнецы.

На этом всё. Надеюсь, за неделю вы перечитаете предыдущие выпуски рассылки и мы сможем продолжить наше увлекательное интерактивное обучение

По возможности - обязательно посетите wasm.ru, найдете много нового и полезного.

http://subscribe.ru/archive/comp.soft.prog.intelpm/ - здесь можно скачать архив рассылки.

www.wasm.ru - сайт, посвященный программированию на асме под win (и не только), самая крупная коллекция статей в рунете, все самое новое и нужное (Aquila, положите плз исходник RLE, в нете на асме под Intel его нет нигде 100%).

rusfaq.ru - задай любой вопрос по асму (и жди ответа).

2002-2013 (c) wasm.ru