Здравствуйте уважаемые читатели (давайте наконец перейдем на «вы» :). Рассылка вернулась из зимней спячки. Как ни странно, процессоры 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 к власти пришли более разборчивые и творческие личности, здесь нарушитель в зависимости от степени нарушения может отделаться «легким испугом» либо небольшим заключением в местах не столь отдаленных (подождет, когда ему будет «можно»). Этим NT более подходит под определение современной ОС. Однако несмотря на обстановку в мире, статьи, предусматривающие высшую меру наказания остались в силе (и останутся навсегда, потому что иначе, если давать всем приложениям «пожизненно» рано или
поздно процессору придется все свое время отдавать на их содержание, кормление, выводы на прогулки и т.п. и на добропорядочные программы просто не останется полезного времени).
Подводя итог вышеизложенного (наблюдательный читатель отметит, что по существу было сказано два предложения, однако не всякая мишура лишена смысла...) можно сказать, что процессор – очень напоминает то, что юристы понимают под термином «государство»: суверенная, универсальная организация политической власти, призванная обеспечить нормальную жизнедеятельность людей, имеющая свою территорию, аппарат принуждения и взимающая налоги, необходимые для осуществления внутренних и внешних функций (запоминать не нужно). Процессор полностью подходит под это определение (разве что только налоги не взимает :). Как и в любом государстве в процессоре своя вертикаль власти, и самой важной составляющей все же является служба безопасности.
Очень важно понять: государство (читай – процессор) НЕ принимает решения самостоятельно, он просто констатирует уже свершившиеся факты, ПРОЦЕССОР НЕ МОЖЕТ убить программу (насильно завершить ее выполнение) - все решения принимают люди, населяющие данное государство (читай - программная реализация). Мозг власти (Госдума) – это не что иное, как обработчик исключения #GP и смежных с ним ведомств и подведомств (обработчики других исключений). Все зависит только от их реализации.
Вообще другой вывод (не менее важный) напрашивается сам собой - все сложные системы похожи друг на друга как близнецы.
На этом всё. Надеюсь, за неделю вы перечитаете предыдущие выпуски рассылки и мы сможем продолжить наше увлекательное интерактивное обучение (обещаюсь следующий выпуск избавить от потока воды).
По возможности - обязательно посетите wasm.ru, найдете много нового и полезного.
здесь можно скачать архив рассылки.
wasm.ru – сайт, посвященный программированию на асме под win (и не только), самая крупная коллекция статей в рунете, все самое новое и нужное (Aquila, почему не положили мой исходник RLE?).
rusfaq.ru - задай любой вопрос по асму (и жди ответа).
|
©
Broken Sword, 2003 - Рассылка
©
Igoryk, 2003 - Дизайн (где делась твоя рассылка?)
|