Лекция 2. Процессор. Режимы работы процессора. Пользовательские регистры процессора.
2.1. Процессор. Самый основной элемент компьютера, это, конечно, процессор. Давайте подробней его рассмотрим. Упрощённая структура процессора (рис. 4): Рис. 4. Упрощённая структура процессора Основные элементы процессора: · Регистры – это специальные ячейки памяти, физически расположенные внутри процессора. В отличие от ОЗУ, где для обращения к данным требуется использовать шину адреса, к регистрам процессор может обращаться напрямую. Это существенно ускорят работу с данными. · Арифметико-логическое устройство выполняет арифметические операции, такие как сложение, вычитание, а также логические операции. · Блок
управления определяет последовательность микрокоманд, выполняемых при обработке машинных
кодов (команд). · Тактовый генератор, или 2.2. Режимы работы процессора. Процессор архитектуры x86 может работать в одном из пяти режимов и переключаться между ними очень быстро: 1. Реальный (незащищенный) режим (real address mode) — режим, в котором работал процессор 8086. В современных процессорах этот режим поддерживается в основном для совместимости с древним программным обеспечением (DOS-программами). 2. Защищенный режим (protected mode) — режим, который впервые был реализован в 80286 процессоре. Все современные операционные системы (Windows, Linux и пр.) работают в защищенном режиме. Программы реального режима не могут функционировать в защищенном режиме. 3.
Режим
виртуального процессора 8086 (virtual-8086 mode, V86) — в этот режим можно
перейти только из защищенного режима. Служит для обеспечения
функционирования программ реального
режима, причем дает возможность
одновременной работы нескольких таких программ, что в реальном режиме невозможно. 4. Нереальный режим (unreal mode, он же big real mode) — аналогичен реальному режиму, только позволяет получать доступ ко всей физической памяти, что невозможно в реальном режиме. 5. Режим системного управления System Management Mode (SMM) используется в служебных и отладочных целях. При
загрузке компьютера процессор всегда находится в реальном режиме, в этом
режиме работали первые
операционные системы, например MS-DOS, однако современные операционные системы,
такие как Windows и Linux переводят
процессор в защищенный режим. Вам, наверное, интересно, что защищает процессор в
защищенном режиме? В защищенном режиме процессор защищает выполняемые программы
в памяти от взаимного влияния (умышленно или по ошибке) друг на друга, что
легко может произойти в реальном режиме. 2.3. Регистры процессора (программная модель процессора). Для понимания работы команд ассемблера необходимо четко представлять, как выполняется адресация данных, какие регистры процессора и как могут использоваться при выполнении инструкций. Рассмотрим базовую программную модель процессоров Intel 80386, в которую входят: · 8 регистров общего назначения, служащих для хранения данных и указателей; · регистры сегментов — они хранят 6 селекторов сегментов; · регистр управления и контроля EFLAGS, который позволяет управлять состоянием выполнения программы и состоянием (на уровне приложения) процессора; · регистр-указатель EIP выполняемой следующей инструкции процессора; · система команд (инструкций) процессора; · режимы адресации данных в командах процессора. Начнем с описания базовых регистров процессора Intel 80386. Базовые
регистры процессора Intel 80386 являются основой для разработки программ и
позволяют решать основные задачи по обработке данных. Рис. 5. Базовые регистры процессора Intel 80386 Среди базового набора регистров выделим отдельные группы и рассмотрим их назначение. 2.4. Регистры общего назначения. 32-битные
регистры ЕАХ (аккумулятор), ЕВХ (база), ЕСХ (счетчик), EDX (регистр данных)
могут использоваться без ограничений для любых целей – временного хранения
данных, аргументов или результатов различных операций. Названия регистров
происходят от того, что некоторые команды применяют их специальным образом:
так, аккумулятор часто необходим для хранения результата действий, выполняемых
над двумя операндами, регистр данных в этих случаях получает старшую часть
результата, если он не умещается в аккумулятор, регистр-счетчик работает как
счетчик в циклах и строковых операциях, а регистр-база – при так называемой
адресации по базе. Младшие 16 бит каждого из этих регистров применяются как
самостоятельные регистры с именами АХ, ВХ, СХ, DX. На самом деле в процессорах
8086 – 80286 все регистры были 16-битными и назывались именно так, а 32-битные
ЕАХ – EDX появились с введением 32-битной архитектуры в 80386. Остальные четыре регистра – ESI (индекс источника), EDI (индекс приемника), ЕВР (указатель базы), ESP (указатель стека) – имеют более конкретное назначение и применяются для хранения всевозможных временных переменных. Регистры ESI и EDI необходимы в строковых операциях, ЕВР и ESP – при работе со стеком. Так же как и в случае с регистрами ЕАХ — EDX, младшие половины этих четырех регистров называются SI, DI, BP и SP соответственно, и в процессорах до 80386 только они и присутствовали. 2.5. Сегментные регистры. При
использовании сегментированных моделей памяти для формирования любого адреса нужны
два числа – адрес начала сегмента и смещение искомого байта относительно этого
начала (в бессегментной модели памяти flat адреса начал всех сегментов равны). В
отличие от DS, ES, GS, FS, которые называются регистрами сегментов данных, CS и
SS отвечают за сегменты двух особенных типов – сегмент кода и сегмент стека.
Первый содержит программу, исполняющуюся в данный момент, следовательно, запись
нового селектора в этот регистр приводит к тому, что далее будет исполнена не
следующая по тексту программы команда, а команда из кода, находящегося в другом
сегменте, с тем же смещением. 2.6. Регистр флагов. Еще один важный регистр, использующийся при выполнении большинства команд, — регистр флагов. Как и раньше, его младшие 16 бит, представлявшие собой весь этот регистр до процессора 80386, называются FLAGS. В EFLAGS каждый бит является флагом, то есть устанавливается в 1 при определенных условиях или установка его в 1 изменяет поведение процессора. Все флаги, расположенные в старшем слове регистра, имеют отношение к управлению защищенным режимом, поэтому здесь рассмотрен только регистр FLAGS (см. рис. 6): Рис. 6. Регистр флагов FLAGS. CF – флаг переноса. PF – флаг четности. Устанавливается в 1, если младший байт результата предыдущей команды содержит четное число битов, равных 1, и в 0, если нечетное. Это не то же самое, что делимость на два. Число делится на два без остатка, если его самый младший бит равен нулю, и не делится, когда он равен 1. AF – флаг полупереноса или вспомогательного переноса. Устанавливается в 1, если в результате предыдущей операции произошел перенос (или заем) из третьего бита в четвертый. Этот флаг используется автоматически командами двоично-десятичной коррекции. ZF – флаг нуля. Устанавливается в 1, если результат предыдущей команды – ноль. SF – флаг знака. TF – флаг ловушки. Он был предусмотрен для работы отладчиков, не использующих защищенный режим. Установка его в 1 приводит к тому, что после выполнения каждой программной команды управление временно передается отладчику. IF – флаг прерываний. Сброс этого флага в 0 приводит к тому, что процессор перестает обрабатывать прерывания от внешних устройств. Обычно его сбрасывают на короткое время для выполнения критических участков кода. DF – флаг направления. Он контролирует поведение команд обработки строк: когда он установлен в 1, строки обрабатываются в сторону уменьшения адресов, когда DF=0 – наоборот. OF – флаг переполнения. Он
устанавливается в 1, если результат предыдущей арифметической операции над
числами со знаком выходит за допустимые для них пределы. Например, если при
сложении двух положительных чисел получается число со старшим битом, равным
единице, то есть отрицательное, и наоборот. Флаги IOPL (уровень привилегий ввода-вывода) и NT (вложенная задача) применяются в защищенном режиме. 2.7. Цикл выполнения команды Программа состоит из машинных команд. Программа загружается в оперативную память компьютера. Затем программа начинает выполняться, то есть процессор выполняет машинные команды в той последовательности, в какой они записаны в программе. Для того чтобы процессор знал, какую команду нужно выполнять в определённый момент, существует счётчик команд – специальный регистр, в котором хранится адрес команды, которая должна быть выполнена после выполнения текущей команды. То есть при запуске программы в этом регистре хранится адрес первой команды. В процессорах Intel в качестве счётчика команд (его ещё называют указатель команды) используется регистр EIP (или IP в 16-разрядных программах). Счётчик
команд работает со сверхоперативной памятью, которая находится внутри
процессора. Эта память носит название очередь команд, куда помещается
одна или несколько команд непосредственно перед их выполнением. Цикл выполнения команды – это последовательность действий, которая совершается процессором при выполнении одной машинной команды. При выполнении каждой машинной команды процессор должен выполнить как минимум три действия: выборку, декодирование и выполнение. Если в команде используется операнд, расположенный в оперативной памяти, то процессору придётся выполнить ещё две операции: выборку операнда из памяти и запись результата в память. Ниже описаны эти пять операций.
Суммируем полученные знания и составим цикл выполнения команды:
Это упрощённый цикл выполнения команды. К тому же действия могут отличаться в зависимости от процессора. Однако это даёт общее представление о том, как процессор выполняет одну машинную команду, а значит и программу в целом.
|
Режимы работы центрального процессора
В 1976 году фирма Intel закончила разработку 16-разрядного микропроцессора i8086. Он имел разрядность регистров 16 бит и системной шины адреса 20 бит, за счет чего мог адресовать до 1 Мбайт оперативной памяти.
В 1982 году был создан i80286. Этот микропроцессор представлял собой улучшенный вариант i8086. Он поддерживал уже несколько режимов работы: реальный, когда формирование адреса производилось по правилам i8086, и защищенный, который аппаратно реализовывал многозадачность и управление виртуальной памятью, i80286 имел также большую разрядность шины адреса — 24 разряда против 20 у i8086, и поэтому он мог адресовать до 16 Мбайт оперативной памяти. Первые компьютеры на базе этого микропроцессора появились в 1984 году.
В 1985 году фирма Intel представила первый 32-разрядный микропроцессор i80386, аппаратно совместимый снизу вверх со всеми предыдущими микропроцессорами этой фирмы. Он был гораздо мощнее своих предшественников, имел 32-разрядную архитектуру и мог прямо адресовать до 4 Гбайт оперативной памяти. Микропроцессор i386 стал поддерживать новый режим работы — режим виртуального i8086, который обеспечил не только большую эффективность работу программ, разработанных для i8086, но и позволил осуществлять параллельную работу нескольких таких программ.
В настоящее время микропроцессор с 32-битной Intel-архитектурой может работать в одном из четырех режимов:
- реальный режим
- системный режим
- защищенный режим
- режим виртуального i8086
Реальный режим (Real Mode)
После инициализации (системного сброса) центральный процессор находится в реальном режиме. В реальном режиме центральный процессор работает как очень быстрый i8086 с возможностью использования 32-битных расширений. Механизм адресации, размеры памяти и обработка прерываний (с их последовательными ограничениями) микропроцессор 8086 полностью совпадают с аналогичными функциями других микропроцессоров с 32-битной Intel архитектурой в реальном режиме.
Режим системного управления (System Management Mode).
В новых поколениях микропроцессоров Intel появился режим системного управления. Он предназначен для выполнения некоторых действий с возможностью их полной изоляции от прикладного программного обеспечения и даже от операционной системы. Микропроцессор переходит в этот режим только аппаратно. Никакой программный способ не предусмотрен для перехода в этот режим. Микропроцессор возвращается из режима системного управления в тот режим, при работе в котором был получен соответствующий сигнал по команде RSM. Эта команда работает только в режиме системного управления и в других режимах не распознается, генерируя исключение #6 (недействительный код операции).
Защищенный режим (Protected Mode)
Защищенный режим является основным режимом работы микропроцессора. Ключевые особенности защищенного режима: виртуальное адресное пространство, защита и многозадачность. В защищенном режиме программа оперирует с адресами, которые могут относиться к физически отсутствующим ячейкам памяти, поэтому такое адресное пространство называется виртуальным. Размер виртуального адресного пространства программы может превышать емкость физической памяти и достигать 64Тбайт.
Виртуальный режим i8086 (V86)
В режим V86 процессор может перейти из защищённого режима, если установить в регистре флагов EFLAGS бит виртуального режима (VM-бит, бит 17). Когда процессор находится в виртуальном режиме, его поведение во многом напоминает поведение процессора i8086. В частности, для адресации памяти используется схема <сегмент:смещение>, размер сегмента составляет 64 килобайта, а размер адресуемой в этом режиме памяти — 1 мегабайт. Виртуальный режим предназначен для работы программ, ориентированных на процессор i8086 (или i8088). Но виртуальный режим – это не реальный режим процессора i8086, имеются существенные отличия. Процессор фактически продолжает использовать схему преобразования адресов памяти и средства мультизадачности защищённого режима.
В виртуальном режиме используется трансляция страниц памяти. Это позволяет в мультизадачной операционной системе создавать несколько задач, работающих в виртуальном режиме. Каждая из этих задач может иметь собственное адресное пространство, каждое размером в 1 мегабайт.
Все задачи виртуального режима обычно выполняются в третьем, наименее привилегированном кольце защиты. Когда в такой задаче возникает прерывание, процессор автоматически переключается из виртуального режима в защищённый. Поэтому все прерывания отображаются в операционную систему, работающую в защищённом режиме.
Обработчики прерываний защищённого режима могут моделировать функции соответствующих прерываний реального режима, что необходимо для правильной работы программ, ориентированных на реальный режим операционной системы MS-DOS.
Назад
Назад: Язык ассемблера
Добро пожаловать в Real Digital
- Микропроцессоры
- Тема: Режимы работы процессора
15782
Режимы процессора
Многие процессоры одновременно запускают более одного процесса. В многопроцессорной (или многопользовательской) системе каждый процесс получает контроль над процессором и его памятью, портами и устройствами ввода-вывода в течение ограниченного «отрезка» времени. По истечении отведенного ему отрезка времени каждый процесс должен отказаться от управления и праздно ждать, пока его запланированный отрезок времени не вернется снова. Контролирующее «системное» программное обеспечение (часто называемое операционной системой или ОС) планирует время для различных задач. Иногда каждый процесс получает одинаковое количество времени, а иногда процессы с более высоким приоритетом получают более длинные или более частые временные интервалы.
Поскольку процессор и его ресурсы могут совместно использоваться несколькими активными процессами, ни один процесс не может поставить под угрозу другие процессы. Это означает, что некоторые системные ресурсы должны быть защищены, чтобы процессы не могли мешать друг другу. Например, бездействующие процессы, ожидающие своего следующего кванта времени, могут оставить данные в памяти, поэтому уже выделенная память должна быть закрыта для других процессов. Некоторые процессы могут управлять каналами связи, которые нельзя легко сбросить и перезапустить за один квант времени, поэтому эти каналы не должны использоваться другим процессом, пока первый процесс не закончит с ними работу. Ни один пользовательский процесс не должен иметь возможности сбрасывать процессор или переводить его в невосприимчивое состояние, и ни один процесс не должен иметь возможность изменять системные настройки (например, векторы исключений), которые могут повлиять на другие процессы.
Чтобы помочь справиться с такими ситуациями, большинство процессоров имеют разные режимы работы, которые обеспечивают разные уровни «привилегированного» доступа к областям памяти, системным настройкам, периферийным устройствам и другим ресурсам. Как правило, режим с самым низким приоритетом — это «пользовательский» режим, который используется обычными приложениями/программами пользователя. Процессам, работающим в пользовательском режиме, можно запретить доступ к определенным областям памяти, определенным регистрам и определенным периферийным устройствам. Этот ограниченный доступ необходим для создания стабильной общей среды обработки.
Самым привилегированным режимом обычно является «системный» режим, который позволяет программе свободно обращаться ко всем ресурсам без ограничений. Этот режим обычно используется экономно и только при необходимости. Обычно в системном режиме разрешено работать только «системному» программному обеспечению, и даже в этом случае оно работает только в случае крайней необходимости. Системное программное обеспечение обычно управляет пользовательскими приложениями и выделяет общие ресурсы, такие как память или порты данных. Системное программное обеспечение может работать в основном в пользовательском режиме и переключаться в системный режим только тогда, когда это необходимо для доступа к защищенному регистру или переназначения определенных ресурсов.
ARM имеет несколько режимов работы, которые используются для различных целей:
- Пользовательский режим — это основной режим, в котором работают прикладные программы.
Пользовательский режим является единственным непривилегированным режимом и имеет ограниченный доступ к системным ресурсам. Как правило, процессор проводит более 99% своего времени в пользовательском режиме.
- Системный режим обеспечивает неограниченный доступ ко всем системным ресурсам. В режим супервизора можно войти только определенными управляемыми способами (обсуждаемыми ниже), и обычно он включается только тогда, когда это необходимо для управления определенным ресурсом.
- Режим супервизора также обеспечивает неограниченный доступ ко всем системным ресурсам. Режим супервизора включается при сбросе или включении питания, или когда программное обеспечение выполняет команду вызова супервизора (SVC). Режим супервизора аналогичен системному режиму, но предлагает доступ к еще нескольким регистрам.
- Режим прерывания вводится, если программа пытается получить доступ к несуществующей ячейке памяти. Режим отмены также предлагает доступ к нескольким закрытым регистрам, недоступным для других режимов.
- Неопределенный режим вводится для любых исключений, связанных с инструкциями, включая любую попытку выполнить нереализованную инструкцию.
- Режим IRQ вводится в ответ на обычный запрос прерывания от внешнего устройства.
- Режим FIQ вводится в ответ на запрос быстрого прерывания от внешнего устройства. Он используется для более быстрого обслуживания более срочных запросов.
- Режим монитора доступен в некоторых реализациях для переключения между безопасным и незащищенным состояниями, а также для отладки.
- Режим гипервизора доступен в некоторых реализациях для управления определенными расширениями виртуализации.
Процессор выходит из состояния сброса в режиме супервизора с неограниченным доступом к процессору и всем его ресурсам. В типичном сценарии после выполнения различных задач инициализации процессор переключается в режим непривилегированного пользователя для обычных/рутинных операций. Пользовательский режим предлагает защиту ресурсов для обычных пользовательских программ, поэтому ошибки, плохо написанный код или вредоносный код не могут повредить другим процессам.
Режимы системы и супервизора позволяют системному программному обеспечению манипулировать регистрами состояния, быстрее реагировать на определенные исключения и справляться с непредвиденными условиями. Режимы IRQ и FIQ существуют для оптимизации реакции процессора на прерывания. Системный режим и режим IRQ используются регулярно (но временно) для доступа к определенным защищенным ресурсам, и эти режимы будут использоваться при инициализации и обработке прерываний. Другие режимы — это специальные режимы, которые редко используются в обычных операциях и далее здесь не описываются.
Режим работы определяется младшими пятью битами в CPSR (биты 4:0), как показано на рисунке со страницы B1-1139 AARM.
Рисунок 1. Режимы процессора (Справочное руководство по архитектуре Arm, стр. B1-1139) ARM поддерживает несколько отдельных/дублирующих регистров, которые доступны только тогда, когда процессор работает в определенном режиме. Как показано в таблице ниже, пользовательский и системный режимы используют одни и те же регистры. Другие режимы имеют свои собственные локальные/частные SP, LR и PSR, а режим FIQ также имеет отдельные регистры R8-R12. Эти дублирующиеся регистры (включая дублирующие GPR в режиме FIQ) делают переключение режима и контекста более быстрым и эффективным, а также уменьшают объем работы, необходимой для правильного переключения контекста при смене режимов.
с R0 по R12 не дублируются ни в одном режиме, кроме FIQ. При входе в один из этих режимов, отличных от FIQ, возможно, в результате выполнения подпрограммы обработки исключений/прерываний, содержимое регистров должно быть сохранено в стеке, а затем восстановлено. В режиме FIQ есть отдельные регистры R8-R12, доступ к которым возможен только в режиме FIQ, поэтому эти регистры не нужно сохранять и восстанавливать (это позволяет быстрее обслуживать «быстрые прерывания»). Обратите внимание, что программное обеспечение, работающее в любом режиме, «видит» регистры, указанные в столбце Application View таблицы выше. Контроллер определяет, к какому регистру осуществляется доступ, комбинируя режим с адресом регистра. Так, например, программное обеспечение в режиме IRQ будет обращаться к SP как «R13» или «SP», точно так же, как программное обеспечение, работающее в пользовательском режиме, и SP в режиме IRQ будет использоваться автоматически (запись «SP_irq» в таблице только чтобы определить, что существует отдельный регистр).
APSR — это доступный только для чтения псевдоним CPSR. Иногда программному обеспечению необходимо записать данные в CSPR (например, чтобы изменить режим работы или включить прерывания). Поскольку CPSR нельзя изменить в пользовательском режиме, программное обеспечение должно перейти в режим супервизора, чтобы получить доступ для записи (в режим супервизора можно войти, выполнив инструкцию SVC или в определенных исключениях). В режиме супервизора для доступа к CPSR можно использовать две специальные инструкции перемещения (MRS и MSR). «MRS Rd, CPSR» будет считывать содержимое CPSR в Rd, а «MSR CPSR_n, Rd» может записывать новые значения в CPSR. Для целей записи CPSR разбивается на четыре байта, которые используют спецификаторы _f, _s, _x и _c для обозначения битов CPSR 31:24, 23:16, 15:8 и 7:0 соответственно (спецификаторы используются в место _n в инструкции, показанной выше). Это помогает предотвратить непреднамеренную перезапись битов в этом чувствительном регистре. Чтобы записать только младшие восемь бит CPSR, можно использовать инструкцию MSR CPSR_c. Для записи всех битов можно использовать MSR CPSR_fsxc.
Пользовательский режим и режим ядра — драйверы Windows
Обратная связь Редактировать
Твиттер LinkedIn Фейсбук Эл. адрес
- Статья
- 2 минуты на чтение
Процессор компьютера под управлением Windows имеет два разных режима: пользовательский режим и режим ядра .
Процессор переключается между двумя режимами в зависимости от того, какой тип кода выполняется на процессоре. Приложения работают в пользовательском режиме, а основные компоненты операционной системы работают в режиме ядра. Хотя многие драйверы работают в режиме ядра, некоторые драйверы могут работать в пользовательском режиме.
Пользовательский режим
Когда вы запускаете приложение пользовательского режима, Windows создает процесс для приложения. Процесс предоставляет приложению частное виртуальное адресное пространство и частное ручка стола . Поскольку виртуальное адресное пространство приложения является частным, одно приложение не может изменять данные, принадлежащие другому приложению. Каждое приложение работает изолированно, и если приложение дает сбой, сбой ограничивается этим одним приложением. Другие приложения и операционная система не подвержены сбою.
Виртуальное адресное пространство приложения пользовательского режима не только является частным, но и ограничено.