15_Архитектурные особенности современных ЭВМ (975812), страница 4
Текст из файла (страница 4)
посылаетарбитру по специальным линиям шины сигнал о желании начать обмен данными. Если шина занята,1В некоторых книгах, посвящённых архитектуре ЭВМ, такую шину часто называют также внешней шиной. Это название призвано подчеркнуть, что в архитектуре таких компьютеров, наряду с этой внешней шиной,существуют и другие (внутренние) шины.9то устройство не получает сигнала о доступности шины и вынуждено ждать её освобождения, а еслишина свободна, то устройство производит операцию захвата шины в своё монопольное использование. Это означает, что для остальных устройств арбитр шины теперь будет выдавать признак занятости.После захвата шины ведущее устройство определяет, готово ли ведомое устройство для обменаданными.
Для этого ведущее устройство посылает ведомому устройству специальный сигнал и ждётответа, или же читает из порта ведомого устройства его флаг готовности. Определив готовностьведомого устройства, ведущее устройство начинает обмен данными. Каждая порция данных (в простейшем случае это один байт или одно слово) снабжается номером порта устройства-получателя.Окончив обмен данными, ведущее устройство производит освобождение шины. На этом операция обмена данными между двумя устройствами по общей шине считается завершённой. Разумеется, арбитр следит, чтобы ни одно из устройств не захватывало шину на длительное время (например,устройство может сломаться, и оно поэтому "забудет" освободить шину, выведя весь компьютер изстроя). Все описанные выше операции с общей шиной (запрос, захват и т.д.) производятся по строгимправилам, эти правила обычно называются протоколом работы с общей шиной.
Обычно все действия, связанные с обменом по шине одной порцией данных, называются циклом [работы] шины (говорят о циклах чтения и записи в память, цикле передачи сигнала прерывания и т.д.).Такова в простейшем изложении схема обмена данными по общей шине. Рассмотрим теперь, каквидит общую шину нашего компьютера программист на Ассемблере. Как уже было сказано, у каждого периферийного устройства обязательно есть один или несколько портов с номерами, закреплёнными за этим устройством. Программист может обмениваться с портами байтами или словами (в зависимости от вида порта).
Для записи значения в некоторый порт используется машинная командаout op1,op2Здесь операнд op1 определяет номер нужного порта и может иметь формат i8 (если номер портанебольшой и известен заранее) или быть регистром dx (если номер больше 255 или становится известным только в процессе счёта программы). Второй операнд op2 должен задаваться регистром al(если производится запись в порт байта) или ax (если производится запись в порт слова). При выполнении такой команды значение регистра (байт или слово) посылается по общей шине в соответствующий порт.Для чтения данных в регистр из порта служит командаin op1,op2Здесь уже второй операнд op2 определяет номер нужного порта и может иметь, как и в предыдущей команде, формат i8 или быть регистром dx.
Первый операнд op1 должен задаваться регистром al (если производится чтение из порта байта) или ax (если производится чтение слова). При выполнении этой команды значение (байт или слово) читается из заданного порта и по общей шине поступает в центральный процессор на указанный регистр. Далее мы рассмотрим небольшой пример сиспользованием этих команд.Итак, на нашем компьютере есть только очень простые команды для обмена байтом или словоммежду регистром центрального процессора и портом внешнего устройства.
Вспомним, что на изученной ранее учебной ЭВМ УМ-3 в нашем распоряжении были очень удобные для программиста команды ввода/вывода массивов целых или вещественных чисел. Почему же в архитектуре нашегокомпьютера команды ввода/вывода такие примитивные и неудобные для программиста? Ответ наэтот вопрос легко понять, если вспомнить, что общая шина связывает между собой очень разные устройства, для которых было необходимо найти общий и приемлемый для всех их формат передаваемых данных. Ясно, что таким форматом может быть только один байт или одно слово – те минимальные порции данных, с которыми оперирует наш центральный процессор. Вот и приходится, например, для ввода целого числа с помощью команд in и out выполнять достаточно сложную программу.Уяснить для себя способ взаимодействия программы на Ассемблере и "внешнего мира" с помощью общей шины можно на таком образном примере.
Программа ведёт своё "существование" вовнутренней части ЭВМ (в оперативной памяти и центральном процессоре), и не может покидать этойсвоей "резиденции". Для связи с "внешним миром" у нашей программы имеется только одна возможность – это порты, которые можно рассматривать как своеобразные "почтовые ящики" на внутреннейстороне двери "резиденции" программы. В некоторые из этих ящиков-портов выполняемая програм-10ма может бросать свои короткие "телеграммы" для внешних устройств, из других ящиков можно доставать "телеграммы", приходящие от внешних устройств (длина каждой "телеграммы" в младшихмоделях нашего семейства только один или два байта). Понятно, что для того, чтобы получить достаточно большой объём данных (например, строку текста с клавиатуры), программа должна обменятьсяс устройством большим числом таких "телеграмм".
Можно сказать, что у программы довольно скучная жизнь в её "резиденции", никаких тебе газет и журналов, и тем более радио и телевидения, дляобщения с "внешним миром" одна только скупая телеграфная связь ☺.Теперь нам будет полезно рассмотреть общую архитектуру связи центрального процессора и периферийных устройств с точки зрения пользователей разного уровня. Рассмотрим, как обстоит делона внешнем, концептуальном, внутреннем и инженерном уровне видения архитектуры ЭВМ.•Уровень конечного пользователя. Пользователь-непрограммист бухгалтер Иванов твёрдоуверен, что в его компьютере есть команда "Распечатать ведомость на зарплату", так какименно это происходит каждый раз, когда он нажимает на кнопку меню "Печать ведомости".
Он также знает, что в его распоряжении имеются также такие удобные команды егокомпьютера, как "Подведение баланса", "Проводка счёта" и другие, непонятные неосведомлённым лицам операции. Можно считать, что Петров работает на некоторой виртуальноймашине, снабжённой такими очень удобными для него командами, с помощью которыхбухгалтерская программа и общается с "внешним миром". Ввод данных при этом производится в терминах профессиональной деятельности пользователя-непрограммиста, например, путём заполнения всевозможных форм и бланков.•Уровень прикладного программиста.
Программист Петров, который и написал бухгалтерскую программу на языке Паскаль, только улыбнётся наивности бухгалтера Иванова. Уж онто точно знает, что даже для того, чтобы вывести только один, например, символ 'A', надонаписать оператор стандартной процедуры Write('A') . Для Петрова общение его программы с "внешним миром" заключается в использовании стандартных процедур ввода/вывода, доступных в его языке программирования высокого уровня.
Правда, Петровуизвестно, что на самом деле его программа сначала переводится (транслируется) с Паскаляна машинный язык, а лишь потом выполняется на компьютере. Поэтому, зная, что язык ассемблера очень близок к машинному языку, он из любопытства поинтересовался у программиста на Ассемблере Сидорова, что тот напишет в своей программе, чтобы вывестисимвол 'A'. Сидоров, немного подумав, ответил, что обычно для этой цели он пишет предложение Ассемблера outch 'A' .
Разница между этими двумя способами вывода символа в Паскале и в Ассемблере показалась Петрову несущественной. Например, он читал отом, что, скажем, в языке С для этой же цели надо вызвать библиотечную функцию1printf("%c",'A'); .•Уровень операционной системы. Сидоров, однако, знает, что предложение outch 'A'является на самом деле не командой машины, а макрокомандой, на её место Макропроцессор подставит на этапе компиляции макрорасширение, например, такого видаmov dl,'A'mov ah,02hint 21h•1Вот этот, как говорят, системный вызов и будет, с точки зрения Сидорова, выводить символ 'A' на стандартное устройство вывода, которое может быть, в частности, как экраном, так и печатающим устройством или текстовым файлом.
Таким образом, общение с"внешним миром" представляется для Сидорова множеством системных вызовов в его программе на Ассемблере с использованием команды языка машины с кодом операции int.Обработка системных вызовов производится операционной системой, поэтому этот уровеньлогично назвать именно так.Уровень языка машины. Системный программист Антонов (раньше иногда говорили системный аналитик), однако, снисходительно пояснит Сидорову, что его системный вызовЭто очень яркий пример того, как макросредства повышают уровень языка Ассемблера: макрокомандавывода символа в языке низкого уровня оказывается для Петрова по внешнему виду (если отвлечься от деталейсинтаксиса), очень похожа на соответствующие средства языков высокого уровня.11– это просто переход по команде int 21h на служебную процедуру-обработчика прерывания с шестнадцатеричным номером 21h.