Назад
Внешний, «видимый» уровень архитектуры содержит систему команд и
множество адресуемых регистров. Если микропрограммирование не применяется,
то архитектура должна поддерживаться аппаратно в виде электрических цепей,
реализующих ее логику работы. Обычно логическое описание функций аппаратуры
дается в терминах вентилей, триггеров, резисторных сборок и преобразований
элементарных сигналов. Схема, предназначенная для выполнения, например, такой
операции, как LОАD, может состоять из набора цепей, обеспечивающих
фиксированный логический поток информации в процессоре.
Микропрограммирование представляет собой альтернативный описанному
способ поддержки внешней архитектуры. Ее структура и функции определяются
специальным внутренним процессором, имеющим свою систему микрокоманд. Эта
система микрокоманд, как правило, существенно отличается от системы команд
основного процессора. Область памяти
, используемая для выполнения
микропрограмм, как физически, так и логически отделена от программно
адресуемой памяти, о которой упоминалось при рассмотрении внешней
архитектуры. Ни одна из обычных программ не в состоянии обратиться к памяти,
предназначенной для обеспечения функционирования процессора микрокоманд.
С помощью системы микрокоманд можно интерпретировать команды
21
основного процессора. При этом, например, операция LOAD предполагает
выполнение микропрограммы, обеспечивающей требуемое перемещение данных и
загрузку их в один из доступных опытным программам регистров. Большей частью
система микрокоманд значительно проще системы команд основного процессора.
Поэтому каждой традиционной команде соответствует целая микропрограмма,
содержащая иногда довольно много микрокоманд. Так, вполне реальна ситуация,
когда основной
процессор имеет команды обработки 32 битовых полей, а процессор
микрокоманд способен работать только с 8-битовыми словами. Ясно, что загрузка
32 битов при этом требует выполнения микропрограммы определенной сложности.
Число функций внешней архитектуры, обеспечиваемых микропрограммами,
зависит от ряда экономических и технологических факторов. Желание повысить
общую производительность и в то же время снизить расходы
приводит к тому, что
для различных машин устанавливаются разные пропорции между
микропрограммной и чисто аппаратной поддержкой отдельных функций и
предъявляются разные требования к скорости работы и другим характеристикам
процессора микрокоманд. Высокопроизводительные машины часто в меньшей
степени опираются на микропрограммную поддержку, чем машины средней
производительности.
Иногда это приводит почти к парадоксу,
поскольку оказывается, что в малых
машинах значительно большая часть операционной системы поддерживается
микропрограммно.
Принцип выделения в аппаратуре внешнего и внутреннего уровней и
реализации команд с помощью подпрограмм специального процессора с
автономной областью памяти хорошо описывается в терминах
микропрограммирования. Однако термин «микропрограммирование» иногда также
подразумевает использование системы микрокоманд как таковой, независимо от
того, доступны ли они или их часть рядовым пользователям. Из-за этого и
происходит путаница, поскольку одни считают, что микропрограммированиеэто
просто применение команд очень низкого уровня, а другиечто
микропрограммирование предполагает работы со «скрытым» набором команд.
Понятие микропрограммы как программы, состоящей из команд низкого
уровня, наиболее четко выражается термином
вертикальный микрокод. При этом
имеется в виду последовательное (сверху вниз) выполнение команд, достаточно
похожих на обычные. Существует также понятие горизонтального микрокода,
гораздо менее ассоциирующегося с обычными командами. Концепцию
горизонтального микрокода легче уяснить, представив себе вычислительную
машину как набор регистров и связей между ними, формирующих сеть. Слово
микрокода состоит из двоичных
разрядов, причем каждый разряд соответствует
элементу сети, способному получать или передавать единицу информации. Если
разряд содержит 1, то передача информации через элемент разрешена, если 0—
запрещена. Таким образом, перемещение данных внутри машины целиком
описывается словом микрокода. Подобная интерпретация микрокода имеет большее
отношение к логическому проектированию, чем к программированию.
22
Горизонтальный микрокод позволяет достичь высокой степени параллелизма
выполнения различных функций, а следовательно, и увеличения быстродействия
аппаратуры. В некоторых случаях горизонтальный микрокод используется для
поддержки в вертикальном микрокоде системы микрокоманд, с помощью которой в
свою очередь обеспечивается поддержка внешнего уровня архитектуры. Возможна
также непосредственная поддержка внешней архитектуры горизонтальным
микрокодом.
1.2.2.2. Иерархия и
организация памяти.
Кэш-память
Наряду с идеей применения внутреннего процессора для определения
функций процессора более высокого уровня существует идея работы с типами
памяти, различающимися по объему, обладающими разными скоростными
характеристиками и доступными различным активным устройствам системы. Чтобы
полностью осветить вопросы, связанные с иерархической структурой памяти,
потребовалась бы отдельная книга. Поэтому
при обсуждении проблем управления
памятью мы рассмотрим только взаимоотношения между первичными,
непосредственно адресуемыми памятями, и вспомогательными устройствами,
предназначенными для хранения информации, а также познакомимся с основными
понятиями, относящимися скорее к организации памяти нижнего, а не верхнего
уровня.
Под первичной, или основной, памятью понимают набор адресуемых ячеек,
доступных программам, написанным на
машинном языке. В основной памяти
находятся программы и данные, доступ к которым осуществляется с помощью
механизма формирования адресов. Элементарная схема взаимосвязи процессора и
основной памяти изображена на рис. 1.6, а. Независимо от используемой
элементной базы память этого типа непосредственно доступна процессору для
23
записи и чтения информации.
Ситуация, изображенная на рис. 1.6, б, предполагает наличие промежуточной
памяти между процессором и основной памятью. Промежуточная память
значительно быстрее основной, но объем ее невелик. Такая память также доступна
процессору для чтения и записи информации. Но она не обязательно доступна
программам системы. Если бы промежуточная память могла адресоваться всеми
программами то она ничем не отличалась бы от основной. В этом случае процессор
работал бы с данными, находящимися в промежуточной памяти. Кроме того,
необходимо было бы предусмотреть команды пересылки информации между
промежуточной и основной памятями. Следовательно, основная память большого
объема могла бы служить хранилищем информации, причем скоростные
характеристики малой памяти
примерно на полпорядкапорядок превосходили бы
аналогичные характеристики большой. Такой тип программно доступной
промежуточной памяти применяется, например, в первых машинах UNIVAC 1100 и
в машине СDС 6600.
Малая память может также быть полностью «скрытой». В такой ситуации ее
обычно называют кэш-памятью или скрытым буфером. Адресация ячеек кэш-
памяти и управление перемещениями
информации между ею и основной памятью
полностью возлагаются на логику системы. Формируемые процессором адреса
являются адресами основной памяти, но если соответствующие объекты находятся в
кэш-памяти, то сформированные адреса заменяются на адреса ячеек последней.
Если же адресуемые объекты находятся в основной памяти, то они переносятся в
кэш-память. Алгоритмы работы с
кэш-памятью поддерживаются либо аппаратно,
либо на уровне микропрограмм.
Иногда кэш-память доступна лишь частично. Такая организация по-
прежнему предполагает формирование адресов основной памяти, но при этом
вводятся команды управления кэш-памятью, которые позволяют увеличить
вероятность нахождения в нем адресуемых объектов. Существенную роль в
повышении эффективности аппаратуры играют команды частичного
освобождения
кэш-памяти и команды, запрещающие перезапись в нее, что может произойти
естественным путем. Незначительное увеличение времени нахождения
определенных объектов в кэш-памяти позволяет иногда существенно повысить
производительность процессора. Так, если при использовании команд управления
кэш-памятью вероятность нахождения в ней адресуемого объекта возрастает с 90
до 95%, то вполне можно ожидать повышения
производительности процессора на
25%.
Для иллюстрации изложившего рассмотрим систему, в которой основная
память имеет цикл в 500 нс, а цикл кэш-памяти равен 50 нс. Предположим, что и
команды, и их операнды выбираются из памяти соответственно за один цикл.
Допустим, далее, что если команда вместе со своими операндами находится в кэш-
памяти, то
время ее выполнения составляет 100 нс. Следовательно, когда все
адресуемые объекты находятся в кэш-памяти, выполнение 20 команд займет 2000
нс, т. е. произойдет обращение к памяти. Если в 90% случаев адресуемые объекты
24
находятся в кэш-памяти, то это означает, что четыре обращения потребуют
дополнительно по 450 нс процессорного времени. Всего это займет дополнительно
1800 нс. и в результате мы получим, что выполнение 20 команд будет длиться 3800
нс. При 95% случаев нахождения адресуемых данных и кэш-памяти лишь два
обращения потребуют дополнительно но 450 нс. В итоге выполнение 20
команд
займет всего 2900 нс. Таким образом, резкое увеличение производительности
процессора достигнуто в результате 5%-ного увеличения вероятности нахождения
адресуемой информации в кэш-памяти. Конечно, при строгом анализе нужно
учитывать и время, требуемое для выполнения команд управления кэш-памятью.
Очевидно, производительность процессора можно повысить и путем
простого увеличения размеров кэш-памяти. Однако сама
кэш-память стоит
значительно дороже дополнительных механизмов по увеличению эффективности ее
использования.
1.2.2.3. ROS, RОМ, РRОМ и другие типы памяти
Кроме памятей, допускающих запись и считывание информации,
существуют памяти других типов, различающиеся быстродействием и
принципиальными возможностями.
Управляющая память, с которой мы познакомились при рассмотрении
микропрограммной поддержки функций аппаратуры, представляет собой
особым
образом адресуемую память, позволяющую, однако, записывать и считывать
информацию. Но бывает, что память, содержащая микропрограммы, постоянна
(RОМгеаd-оn1у memory), т. е. допускает только чтение информации. Применение
памяти такого типа вполне оправданно, поскольку она обеспечивает большие
емкости при более высоких скоростных характеристиках и меньшей стоимости, чем
память, допускающая перезапись
данных. Предполагается, что внешняя архитектура
достаточно стабильна, поэтому поддерживающие ее микропрограммы просто
«зашиваются» в память, и последующее изменение их не разрешается. Некоторые
микрокоманды могут иметь управляющие параметры. Они помещаются в основную
память для использования процессором микрокоманд или записываются в
специальную память, не являющуюся постоянной.
В принципе существует целый спектр типов
памяти, обладающих
промежуточными характеристиками между характеристиками обычной адресуемой
памяти и памяти типа RОМ. Эти типы памяти различаются возможностями
изменения хранящейся в них информации. Известна память, для записи в которую
требуются специальные команды, так что время от времени ее содержимое можно
изменять, но традиционные команды записи для работы с данной памятью
непригодны. Управляющая память с перезаписью указанного типа была
использована фирмой Вurroughs. при создании машины В 1700. Здесь требовалось
изменять функции процессора в зависимости от применяемого компилятора.
Имеются также запоминающие устройства, содержимое которых может изменяться
только внесистемными средствами, причем исключительно на уровне групп
25
двоичных разрядов. Такое устройство носит название программируемой постоянной
памяти (EPROM — elесtronicallу programmable read-оn1у memory).
Рис. 1.6, в иллюстрирует сложные структуры памяти. Процессор
микрокоманд в данном случае имеет свою управляющую память, специальную
память небольшого объема для хранения операндов микрокоманд и совсем
маленькую собственную кэш-память. Помимо этого рассматриваемый процессор
может работать с основной
памятью и кэш-памятью основного процессора.
Чтобы получить представление о том, насколько сложной может быть
структура памяти реальной вычислительной машины, достаточно предположить,
что в нее входит несколько поддерживающих различные функции аппаратуры
процессоров микрокоманд, каждый из которых имеет несколько специальных типов
памяти, и помимо этого вспомогательные буфера.
Использование памяти различных типов обусловлено
отчасти
экономическими и технологическими причинами, отчасти стремлением обеспечить
целостность системы. Фрагментация памяти по уровням и внутри каждого из них
по типам связана с необходимостью выполнения некоторых операций в заданных
скоростных режимах и учета соотношений между стоимостью памяти и затратами
на управление ею, а также между стоимостями типов памяти с различными
характеристиками. Кроме того, некоторые разработчики полагают, что функции
системы, реализуемые с помощью физически разделенных запоминающих
устройств, значительно менее чувствительны к разнообразным ошибкам и
злоупотреблениям, чем функции, реализуемые в физически однородных
устройствах памяти и охраняемые только стандартными механизмами защиты.
Итак, концепция разделения памяти на физически различные устройства,
изготовляемые с применением различных технологий
, представляет собой развитие,
идеи управления записью и доступом.
1.3. АППАРАТНО-ПРОГРАММНЫЙ ИНТЕРФЕЙС
Для решения проблемы создания интерфейса между аппаратурой и
программным обеспечением необходимо ответить на два важных вопроса:
какая часть функции системы должна быть реализована аппаратно?
в какой степени структура аппаратной части системы налагает ограничения
на программное обеспечение?
В
том случае, когда между аппаратурой и операционной системой не
предполагается наличия промежуточного микропрограммного уровня,
распределение функций зависит от степени развитости аппаратных средств
поддержки операционной системы. Классическими примерами объектов,
вызывающих наибольшие разногласия по поводу распределения функций между
аппаратурой и программным обеспечением, могут служить система прерываний,
механизмы защиты и схема адресации. Мы
уже познакомились с программистской
точкой зрения на систему прерываний. Представляет также интерес аналогичное
рассмотрение механизма защиты и схемы адресации.
26
В целом программисты стремятся получить возможность осуществлять
адресацию и соответственно защиту достаточно маленьких участков памяти с целью
экономии и правильного выделения ресурсов выполняющимся программам. Если,
например, существующий механизм защиты предусматривает присвоение значений
ключей только блокам размерам в 4К байт, то, очевидно, нельзя выделить данной
программе для работы участок памяти, не кратный
4К байт, и вместе с тем
обеспечить нормальную защиту выделенной области. Точно так же схема адресации
может определять минимальный размер адресуемого участка памяти. Системные
программисты всегда стараются принять меры для наиболее экономичного
потребления ресурсов. В частности, им хотелось бы сделать все возможное для того,
чтобы реально свободные участки памяти были
доступны всем, кто в них
нуждается.
С другой стороны, инженеры заинтересованы в использовании. регистров не
слишком больших размеров, в уменьшении количества цепей, обеспечивающих
передачу информации, и т. д. Им приходится учитывать, что стоимость
вычислительной машины повышается с разрастанием ее электрической части.
Поэтому они могут возражать против обеспечения адресации маленьких участков
памяти
, так как это ведет к увеличению размеров регистров. Инженеры могут также
сопротивляться организации аппаратной поддержки сложных функций, поскольку
при наличии такой поддержки значительно снижается традиционная оценка
скорости работы оборудования, исчисляемая, например, в миллионах операций в
секунду.
Все это означает, что недостаточно полное профессиональное представление
разработчиков оборудования и программного обеспечения о
функционировании
системы может привести к попыткам оптимального решения только своих, частных
задач без учета их связей с остальными. Поэтому очень важно выработать общую
точку зрения на систему, что позволит наилучшим образом осуществить
распределение функций между аппаратурой и программным обеспечением.
Создатели системы должны постоянно помнить о том, что она состоит из двух
основных частей, и принимать во внимание как программные, так и аппаратные ее
аспекты.
Если в процессе разработки приходится сталкиваться с
микропрограммированием и организацией иерархии памяти, взаимоотношения
оборудования и программного обеспечения еще более усложняются. Задание части
функций аппаратуры с помощью горизонтального или вертикального микрокода,
работа с большим числом памятей различных типов
и использование процессоров
микрокоманд для поддержки функционирования разнообразных устройстввсе
это требует решения проблем, связанных с распределением функций, определением
интерфейсов различных уровней и в целом приводит к образованию значительно
более сложной системной структуры, чем та, которая существовала ранее, когда
система считалась только из двух основных частей: аппаратуры и программного
обеспечения.
27
1.3.1. Влияние микропрограммирования
Очевидно, что если допустима микропрограммная реализация системы
команд, то допустима и микропрограммная поддержка значительно более сложных
функций. Можно, скажем, построить машину, интерпретирующую такие языки, как
Кобол, АПЛ или ПЛ/1, причем процесс компиляции на этой машине будет или
осуществляться почти тривиально, или вообще отсутствовать а предложения типа
A=B
+С(I) непосредственно выполняться микропрограммным интерпретатором.
Известны многочисленные примеры создания вычислительных машин, подобным
образом реализующих различные языки высокого уровня.
Однако можно не строить такие машины, а полностью или частично
микропрограммно реализовывать операционную среду, используемую
компилятором. Вызовы различных вспомогательных программ, в том числе и
принадлежащих резидентной части операционной системы, вставляемые обычно
компилятором в получающийся в процессе компиляции код, так же как и машинные
команды, микропрограммно реализуемы. Кроме того, если организовать
микропрограммную поддержку некоторых механизмов операционной системы
(запуска процессов и обработки прерываний), то в результате эти функции смогут
выполняться с большей скоростью и без дополнительных затрат памяти. В
настоящее время микропрограммная поддержка
основных функций операционной
системы находит широкое применение. В этой связи следует отметить систему
VМ/370 для машин фирмы IВМ, которая предусматривает микропрограммную
поддержку большого числа своих функций при работе с процессорами, имеющими
достаточный объем управляющей памяти.
Обычно для микропрограммной реализации функций системы требуется
универсальность интерфейсов и наличие связанных с ними четко
определенных
алгоритмов. Например, могут быть созданы «АРL-машины» с микропрограммной
основой, поскольку и сам язык АРL, и способы его реализации хорошо известны.
Вопрос же о возможности построения машин более широкого назначения,
эффективно использующих микрокод для поддержки нескольких языков высокого
уровня и различного рода интерфейсов, вызывает значительные разногласия. В
машине IВМ 5100, позволяющей
осуществлять программирование на языках Бейсик
и АПЛ, тем не менее отсутствует непосредственная микропрограммная
интерпретация конструкций указанных языков на единой основе. Вместо этого
микропрограммно реализованы интерфейсы с компиляторами системы 370 для АРL
и системы S/3 для языка Бейсик.
Сторонников расширения интерфейсов оборудования путем скрытой
микропрограммной реализации большего числа функций системы со временем
становится
все меньше. Если возможно расширить внешнюю архитектуру
средствами микрокодирования, можно также создавать компиляторы,
транслирующие программы с языков высокого уровня непосредственно в
микрокоды. Последователи этого направления утверждают, что их подход увеличит
эффективность выполнения написанных программ. Ведь, например, многие
28
машинные команды в системе 370 вообще не генерируются компиляторами.
Развитие технологии и методологии построения компиляторов позволит создавать
весьма простые системы, обеспечивающие огромные скорости вычислений за счет
непосредственной генерации компилятором микрокодов.
1.3.2. Влияние структуры оборудования
Помимо вопроса о распределении функций между оборудованием,
микропрограммами и программным обеспечением в условиях современной
технологии создания аппаратной
части системы возникает вопрос о структуре и
уровнях программного обеспечения. В многопроцессорных системах, имеющих к
тому же сложную структуру укрепляющей и основной памяти, проблема
29
распределения функций не сводится к выбору способа реализации тех или иных
механизмов. В этом случае структура операционной системы оказывается тесно
связанной со структурой применяемого оборудования. Например, если известно, что
в какой-либо системе все операции ввода-вывода должны выполняться
специальным процессором, и кроме того, информация об очередях заявок на
использование данного
устройств должна храниться в нем самом, то модули,
обслуживающие процессы ввода-вывода и интерфейсы между ними будут
выглядеть совсем не так, как в системах с иной структурой.
Для иллюстрации изложенного обратимся к рис. 1.7. На рис. 1.7, а
изображена схема системы, содержащей один процессор и единую память.
Символом С в блоке COMP обозначены
набор команд и содержимое регистров,
соответствующие работе в режиме управления, а символом С в блоке MEM —
область памяти, используемая только в режиме управления. Участки памяти,
входящие в область P, распределяются между программами, работающими в
режиме задачи (ему соответствует символ P в блоке COMP). В режиме P COMP
можно работать только с частью памяти P MEM, а в режиме С
COMP — и с C MEM,
и с P MEM.
В рассматриваемом случае и программы операционной системы, и их
рабочие области располагаются в защищенной части памяти.
На рис. 1.7, 6 отражена ситуация, когда часть информации, требующейся
операционной системе. хранится на другом запоминающем устройстве, МЕМ2.
Своими характеристиками и даже технологией изготовления МЕМ2 может
отличаться от МЕМ1. Возможно также
полное совпадение параметров этих
запоминающих устройств. Иногда МЕМ2 представляет собой постоянную память,
предназначенную для хранения некоторых программ. При этом в области МЕМ1
размещаются рабочие поля, управляющие таблицы и значения определенных
параметров. Однако, поскольку МЕМ2 — постоянная память, часть программ
операционной системы может располагаться и в МЕМ1. Тогда между программами
из МЕМ1 и
МЕМ2 устанавливаются особые отношения, совершенно отличные от
тех, которые существуют при размещении всех управляющих программ в МЕМ2.
Порядок обращения друг к другу и передачи соответствующих параметров для
программ, находящихся на различных запоминающих устройствах, совсем иной,
чем для программ, располагающихся в единой памяти. Следовательно, при
распределении функций необходимо учитывать наличие двух
запоминающих
устройств, а структура системы, показанной на рис. 1.7, 6, должна отличаться от
структуры системы, показанной на рис. 1.7, а.
На рис. 1.7, в изучаемая схема содержит отдельный процессор для работы в
режиме управления, а на рис. 1.7, гцелый комплекс таких процессоров
(например, процессор управления памятью и ряд процессоров ввода-вывода).
Особенность
схемы рис. 1.7, г состоит в том, что управляющие процессоры не могут
использовать МЕМ1. В четырех описанных выше ситуациях из-за различия в
оборудовании неизбежно будут отличаться механизмы поддержки ввода-вывода,
способы управления памятью и даже виды организации взаимосвязи программ,
30