Главная – Архитектура микропроцессоров

КомпьютерПресс №5 1991. И. Липкин.

Архитектура микропроцессоров

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

Архитектура микропроцессоров

Совершенно секретно, перед прочтением сжечь!
А. и Б. Стругацкие

Аналогии, аналогии...

Наверное, я не ошибусь, если скажу, что каждый из нас хотя бы раз в жизни слышал из уст "ответственных" работников фразу: "Это вам знать не полагается!" - и немудрено, ведь тайны окружают человека на протяжении всей жизни. Посудите сами - сначала родители, блюдя нравственность своего чада, плетут ему байки про аиста и капусту, затем, уже в школе, на него заводится совершенно секретное личное дело, а потом он попадает во взрослый мир, где таинственные и легендарные тени КГБ, МВД и ВПК грозно реют над несчастным любознательным индивидуумом до конца его дней. Но вот парадокс: соблюдение своих секретов и разгадывание чужих - эта чрезвычайно сложная и очень дорогая игра для серьезных дяденек - приносит, в основном, сугубо отрицательный результат. Мало того, что на обмундирование и прокорм всей этой оравы уходит масса средств, так оказывается и тайны-то отечественные остаются таковыми только для местных жителей, а разгадка чужих требует не нашей технологии и не наших знаний.

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

Берегите ОС

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

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

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

Равняйсь на Бюрократию или "Тайна второго кольца"

Западные изобретатели - народ практичный и изобретать велосипед не в их привычках - куда дешевле воспользоваться чужим опытом. Так вот, подобную схему приоритетов они взяли не с потолка, а "передрали" прямо с системы защиты документов, которой по сию пору пользуется правительство США. Там определено четыре класса секретности для бумаг, проходящих через руки государственных чиновников: совершенно секретный, секретный, конфиденциальный и неклассифицируемый (рис.1). Но это еще "цветочки" - все население Штатов тоже разбито на четыре класса, которые называются "уровнями благонадежности": совершенно секретный, секретный, конфиденциальный и неблагонадежный. При такой постановке дела совершенно ясно, что забулдыга из Куинз вряд ли получит доступ к стратегическим планам Пентагона. (Вот интересно, сколько уровней благонадежности предусмотрел для советских граждан КГБ и в какую группу он включил сотрудников "КомпьютерПресс"?)

Классификация секретности документов в США
Рис.1. Классификация секретности документов в США

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

Уровни привилегий i286
Рис.2. Уровни привилегий i286

Остается пока неясным, каким образом процессор распознает уровень привилегии того или иного сегмента. Здесь нам придется ненадолго вернуться к той главе, где мы знакомились с вычислением виртуального адреса и вспомнить, что назначение сорока битов из 64-х разрядов дескриптора так и осталось для нас загадкой. Оказывается, разряды с 40-го по 47-й любого дескриптора занимает так называемый байт доступа, пятый и шестой биты которого несут информацию о номере кольца защиты (рис. 3). Комбинация этих двух разрядов как раз и является уровнем привилегий дескриптора DPL). Если производится запись сегмента в ОЗУ, DPL играет роль определителя класса секретности данных, а в том случае, когда сегмент содержит выполняемый код, уровень привилегий превращается в показатель благонадежности программы.

Байт доступа
Рис.3. Байт доступа

Откуда же берется содержимое DPL? Давайте вспомним структуру селектора (рис. 4). Из шестнадцати его разрядов старшие тринадцать, как вы помните, отводятся под индекс, один служит индикатором таблицы, а вот два младших бита представляют собой запрашиваемый уровень привилегий (RPL). В процессоре предусмотрен специальный механизм поддержки текущего уровня привилегий (CPL), который соответствует степени "благонадежности" (DPL) выполняемой процедуры.

Формат селектора
Рис.4. Формат селектора

Для плебеев - отдельный вход

Дальше, вроде бы, все просто: если CPL текущей программы меньше или равен DPL сегмента памяти, то доступ разрешен (вспомним, что нулевой уровень - самый высокий), а если налицо противоположная ситуация, то есть CPL>DPL, доступ запрещен, не так ли? Вы не заметили в этом утверждении ничего странного? Тогда каким же образом прикладной программе достучаться до операционной системы и добиться от нее необходимой поддержки, ведь ее CPL по крайней мере на двойку больше, чем DPL сегментов ОС?

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

Вызов через шлюз
Рис.5. Вызов через шлюз
Формат шлюза вызова
Рис.6. Формат шлюза вызова

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

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

И. Липкин
КомпьютерПресс 5'91

Продолжение цикла публикаций — архитектура процессора Intel 80486.