- •Глава 1 Обзор компьютерных систем
- •1.1. Основные элементы
- •1.2. Регистры процессора
- •Управляющие регистры и регистры состояния
- •1.3. Исполнение команд
- •Выборка и исполнение команды
- •Функции ввода-вывода
- •Множественные прерывания
- •Многозадачность
- •1.5. Иерархия запоминающих устройств
- •1.6. Кэш
- •Обоснование
- •Принципы работы кэша
- •Внутреннее устройство кэша
- •1.7. Технологии ввода-вывода
- •Программируемый ввод-вывод
- •Ввод-вывод с использованием прерываний
- •Прямой доступ к памяти
- •1.8. Рекомендуемая литература
- •1.9. Задачи
- •Приложение а. Характеристики производительности двухуровневой памяти
- •Функционирование двухуровневой памяти
- •Производительность
- •Приложение б. Управление процедурами
- •Реализация стека
- •Вызов процедуры и возврат из нее
- •Реентерабельные процедуры
1.3. Исполнение команд
Программа, которую выполняет процессор, состоит из набора хранящихся в памяти команд. В простейшем виде обработка команд проходит в две стадии: процессор считывает (выбирает) из памяти, а затем запускает очередную команду. Исполнение программы сводится к повторению процесса выборки команды и ее исполнения. Для выполнения одной команды может потребоваться несколько операций; их число определяется природой самой команды.
Набор действий, требующихся для реализации одной команды, называется ее циклом. На рис. 1.2 показан процесс обработки команд процессором в такой упрощенной схеме, включающей два этапа. Эти этапы называются циклом выборки и циклом исполнения. Прекращение работы программы происходит при выключении машины, в случае возникновения какой-либо фатальной (неисправимой) ошибки, или если в программе имеется команда останова.
Выборка и исполнение команды
В начале каждого цикла процессор выбирает из памяти команду. Обычно адрес ячейки, из которой нужно извлечь очередную команду, хранится в программном счетчике (PC), Если не указано иное, после извлечения каждой команды процессор увеличивает значение программного счетчика на единицу. Таким образом, команды выполняются в порядке возрастания номеров ячеек памяти, в которых они хранятся. Рассмотрим, например, упрощенный компьютер, в котором каждая команда занимает одно 16-битовое слово памяти. Предположим, что значение программного счетчика установлено равным 300. Это значит, что следующая команда, которую должен извлечь процессор, находится в 300-й ячейке. При успешном завершении цикла команды процессор перейдет к извлечению команд из ячеек 301, 302, 303 и т.д. Однако, как мы вскоре узнаем, эта последовательность может быть изменена.
Извлеченные команды загружаются в регистр команд (IR). Команда состоит из последовательности битов, указывающих процессору, какие именно действия он должен выполнить. Процессор интерпретирует команду и выполняет требуемые действия. Все действия можно разбить на четыре категории.
• Процессор — память. Данные передаются из процессора в память или обратно.
• Процессор — устройства ввода-вывода. Данные из процессора поступают на периферийное устройство через устройство ввода-вывода. Возможен и обратный процесс.
• Обработка данных. Процессор выполняет с данными различные арифметические или логические операции.
• Управление. Команда может задавать изменение последовательности выполнения команд. Например, если процессор извлекает из ячейки 149 команду, которая указывает, что следующей по очереди должна быть исполнена команда из ячейки 182, то процессор устанавливает значение программного счетчика равным 182. Таким образом, в следующем цикле выборки команда извлекается не из ячейки 150, а из ячейки 182.
Для выполнения команды может потребоваться последовательность, состоящая из комбинации вышеперечисленных действий.
Рассмотрим, например, гипотетическую машину, характеристики которой приведены на рис. 1.3. В процессоре имеется один регистр данных, который называется аккумулятором (accumulator — АС). Команды и данные имеют длину 16 бит. В такой ситуации память удобно организовать в виде 16-битовых ячеек, в каждой из которых помещается одно слово. Формат команды предусматривает выделение 4 бит для кода операции. Таким образом, всего может быть 2 == 16 различных кодов операций (их можно представить одной шестнадцатеричной2 цифрой), а адресовать можно до 21'1 = 4096 (4 К) слов памяти (которые можно представить трехзначным шестнадцатеричным числом).
Рис. 1.4, на котором показаны определенные ячейки памяти и регистры процессора, иллюстрирует исполнение фрагмента программы. В этом фрагменте слово, хранящееся в памяти по адресу 940. складывается со словом, хранящимся в памяти по адресу 941, а результат сложения заносится в ячейку 941. Для выполнения этого действия потребуются три команды, каждая из которых включает свой цикл выборки и цикл исполнения.
1. Адрес первой команды, хранящейся в программном счетчике, — 300. Эта команда (она представлена шестнадцатеричным числом 1940) загружается в регистр команд (IR), а показание программного счетчика увеличивается на 1. Следует отметить, что в этом процессе участвуют регистры адреса и буфера памяти, однако для упрощения они игнорируются.
2. Первые 4 бит (первая шестнадцатеричная цифра) регистра команд указывают на то, что нужно загрузить значение в аккумулятор. Остальные 12 бит (три шестнадцатеричные цифры) указывают адрес 940.
3. Из ячейки 301 извлекается следующая команда (5941), после чего значение программного счетчика увеличивается на 1.
4. К содержимому аккумулятора прибавляется содержимое ячейки 941, и результат снова заносится в аккумулятор.
5. Из ячейки 302 извлекается следующая команда (5941), затем значение программного счетчика увеличивается на 1.
6. Содержимое аккумулятора заносится в ячейку 941.
Этот пример показывает, что для сложения содержимого ячеек 940 и 941 необходимы три цикла команды. При более сложном наборе команд циклов понадобилось бы меньше. Современные процессоры выполняют команды, в состав которых может входить несколько адресов. При этом во время цикла исполнения некоторых команд иногда выполняется несколько обращений к памяти. Вместо обращений к памяти в команды может быть задана операция ввода-вывода.