скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

скачать рефератыУчебное пособие: Аппаратура, программное обеспечение и микропрограммы

2.3.7 Быстрые компиляторы без оптимизации и оптимизирующие компиляторы

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

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

2.3.8 Интерпретаторы

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

2.3.9 Абсолютные и перемещающие загрузчики

Программы для выполнения должны размещаться в основной памяти. Распределение команд и элементов данных по конкретным ячейкам основной памяти является исключительно важной задачей. Решение этой задачи иногда осуществляет сам пользователь, иногда транслятор, иногда системная программа, называемая загрузчиком, а иногда — операционная система. Сопоставление команд и элементов данных с конкретными ячейками памяти называется привязкой к памяти. При программировании на машинном языке привязка к памяти производится в момент кодирования. Уже давно наблюдается тенденция откладывать привязку программы к памяти на как можно более поздний срок, и в современных системах виртуальной памяти привязка осуществляется динамически в процессе выполнения программы. Отсрочка привязки программы к памяти обеспечивает увеличение гибкости как для пользователя, так и для системы, однако это связано с существенным повышением сложности трансляторов, загрузчиков, аппаратных средств и операционных систем.

Загрузчик это системная программа, которая размещает команды и данные программы в ячейках основной памяти. Абсолютный загрузчик размещает эти элементы именно в те ячейки, адреса которых указаны в программе на машинном языке. Перемещающий загрузчик может загружать программу в различные места основной памяти в зависимости, например, от наличия свободного участка основной памяти в момент загрузки (называемое временем загрузки).

2.3.10 Связывающие загрузчики и редакторы связей

В первых вычислительных машинах программист писал на машинном языке программу, которая содержала все команды, необходимые для решения конкретной задачи. Даже сложные и в определенном смысле опасные процедуры управления вводом-выводом в каждой программе на машинном языке приходилось кодировать вручную.

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

Связывающий загрузчик во время загрузки объединяет необходимые программы и загружает их непосредственно в основную память. Редактор связей также осуществляет подобное объединение программ, однако он создает загрузочный модуль, который записывается во внешнюю память для будущего использования. Редактор связей играет особенно важную роль для производственных систем; когда программу необходимо выполнять, ее загрузочный модуль, сформированный при помощи редактора связей, может быть загружен немедленно — без накладных затрат времени (часто весьма больших) на повторное объединение отдельных частей программы.

2.4 Микропрограммы

Принято считать, что автором концепции микропрограммирования является профессор Морис Уилкс. В своей статье в 1951 г. (Wi 51) он предложил принципы, которые легли в основу современных методов микропрограммирования. Однако начало реального внедрения микропрограммирования связано с появлением System/360 в середине 60-х годов. В течение 60-х годов изготовители компьютеров применяли микропрограммирование для реализации наборов команд машинного языка (Ни 70).

В конце 60-х — начале 70-х годов появилось динамическое микропрограммирование, предусматривающее возможность легкой загрузки новых микропрограммных модулей в управляющую память, служащую для выполнения микропрограмм. Благодаря этому стало возможным динамично и часто менять наборы команд вычислительной машины. И сейчас уже никого не удивит, если в мультипрограммных системах новых поколений будут предусматриваться возможности предоставления различных наборов команд различным пользователям, с тем чтобы в процессе переключения процессора с программы на программу можно было также осуществлять переход с одного набора машинных команд на другой, необходимый следующему пользователю.

Микропрограммирование вводит дополнительный уровень средств программирования, нижележащий по отношению к машинному языку компьютера, и тем самым оно позволяет определять конкретные команды машинного языка. Подобные возможности являются неотъемлемой частью архитектуры современных компьютеров и имеют громадное значение с точки зрения обеспечения высоких скоростных характеристик и защиты операционных систем.

Микропрограммы размещаются в специальной управляющей памяти очень высокого быстродействия. Они состоят из индивидуальных микрокоманд, которые гораздо более элементарны по своей природе и более рассредоточены по функциям, чем обычные команды машинного языка. В компьютерах, где набор команд машинного языка реализуется при помощи микропрограммирования, каждой команде машинного языка соответствует целая и, .быть может, большая микропрограмма,/Тем самым сразу же становится очевидным, что микропрограммирование окажется эффективным только в том случае, если управляющая память будет обладать гораздо большим быстродействием; чем основная.

2.4.1 Горизонтальный и вертикальный микрокод

Команды микрокода можно разделить на горизонтальные и вертикальные. Выполнение вертикальных микрокоманд очень похоже на выполнение обычных команд машинного языка. Типичная вертикальная микрокоманда задает пересылку одного или нескольких элементов данных между регистрами.

Горизонтальный микрокод действует совсем по-другому. Каждая его команда содержит гораздо большее число бит, поскольку может задавать параллельную операцию пересылки данных для многих или даже всех регистров данных устройства управления. Горизонтальные микрокоманды являются более мощными, чем вертикальные, однако может оказаться, что соответствующие микропрограммы гораздо сложнее кодировать и отлаживать.

2.4.2 Выбор функций для микропрограммной реализации

Для разработчика очень важно правильно решить, какие именно функции вычислительной машины реализовать при помощи микрокода. Микрокод предоставляет реальную возможность повысить быстродействие вычислительной машины. Реализуя часто используемые последовательности команд микропрограммно, а не обычным программным способом, разработчики добиваются существенного повышения показателей быстродействия. Читателям, которые будут знакомиться с функциями операционных систем по мере проработки настоящей книги, рекомендуется тщательно анализировать, для реализации каких из этих функций может быть эффективно использован микрокод.

2.4.3 Эмуляция

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

2.4.4 Микродиагностика

Микропрограммы значительно теснее связаны с аппаратурой, чем программы, написанные на машинном языке. Благодаря этому появляется возможность в гораздо более широких масштабах осуществлять контроль и исправление ошибок, причем выполнять эти операции с большей степенью детализации. В некоторые машины вводятся средства микродиагностики, «переплетающиеся» с командами программ на машинном языке. Это позволяет избежать многих потенциальных проблем и повысить надежность работы машины.

2.4.5 Специализированные компьютеры

Поскольку разработка, производство и организация сбыта вычислительной машины обходится дорого, фирмы-изготовители сосредотачивают свои усилия обычно на выпуске машин общего назначения. Громадные капитальные вложения, без которых невозможно создание новой машины, требуют больших объемов сбыта, поскольку только в этом случае можно будет возместить затраты и получить необходимые прибыли. Поэтому промышленные фирмы обычно стараются не изготавливать специализированных, единственных в своем роде машин; этим занимаются университеты, в которых подобные машины создаются главным образом для выполнения научных исследований.

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

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

2.4.6 Микропрограммная поддержка

Фирмы-изготовители зачастую по отдельному заказу поставляют факультативные микрокодовые средства, обеспечивающие повышение производительности вычислительных машин. Фирме IBM удалось довольно успешно сделать это для своих компьютеров семейства System/370 в рамках операционной системы VM (см. гл. 22). Как будет показано при описании этой операционной системы в гл. 22, она реализует концепцию многих виртуальных машин благодаря эффективному использованию механизма прерываний. Для этого ряд наиболее часто используемых программ обработки прерываний реализуется микрокодом; такая микропрограммная поддержка позволяет достигнуть существенного повышения скоростных характеристик.

2.4.7 Микропрограммирование и операционные системы

К числу наиболее часто выполняемых последовательностей команд в большинстве вычислительных машин относятся определенные части операционной системы. Например, в системе с диалоговой обработкой транзакций имеется механизм диспетчирования, обеспечивающий выбор очередной единицы работы, которую должен будет выполнять процессор; поскольку подобный механизм диспетчирования может действовать сотни раз в секунду, он должен работать очень эффективно, и одним из способов сделать его более высокоскоростным и эффективным является именно микрокодовая реализация.

К числу функций, чаще всего реализуемых при помощи микрокода, относятся следующие:

·           обработка прерываний;

·           управление различными типами структур данных;

·           примитивы синхронизации, координирующие доступ к общим данным и другим ресурсам;

·           операции обработки частей слова, позволяющие эффективно выполнять манипуляции с битами;

·           переключения контекста, т. е. быстрые переключения процессора с программы на программу в многоабонентской системе;

·           последовательности вызова процедур и возврата.

Реализация функций операционных систем при помощи микрокода позволяет повысить эффективность и скоростные характеристики, снизить затраты на разработку программ и обеспечить более надежную защиту систем (см. гл. 17).

Читателям, желающим более подробно познакомиться с применением микропрограммирования в операционных системах, рекомендуется обратиться к работам (Br77), (Bu81) и (So75).

2.4.8 Пример микропрограммирования

В настоящем разделе рассматривается небольшая гипотетическая микропрограммируемая вычислительная машина. Наша цель заключается в том, чтобы попытаться передать определенные нюансы микропрограммирования и, в частности, показать, каким образом оно может использоваться для реализации набора команд машинного языка компьютера. В основу настоящего раздела положен пример, который представили Роше и Адаме в своей отличной статье для изучающих микропрограммирование (Ra80).

Простой гипотетический небольшой компьютер ITSIAC имеет набор команд машинного языка, показанный на рис. 2.1.

Компьютер ITSIAC имеет накапливающий регистр-аккумулятор АКК, который участвует в выполнении всех арифметических операций. Каждая команда машинного языка содержит два поля

Команда Описание
ADD (Сложить) АКК ( АКК + (А)
SUB (Вычесть) АКК ( АКК - (А)
LOAD (Загрузить) АКК ( (А)
STORE (Записать) (А) ( АКК
BRANCH (Переход) Переход на А
COND BRANCH (Условный переход) Если АКК=0, то переход на А

по 8 бит — код операции (КОП) и адрес памяти А. В состав процессора входит арифметико-логическое устройство (АЛУ) для выполнения некоторых арифметических действий. Регистры компьютера ITSIAC и их функции показаны на рис. 2.2.

Регистр Функция
АКК Аккумулятор. Этот накапливающий регистр участвует в выполнении всех арифметических операций. При выполнении каждой арифметической операции один из операндов должен находиться в аккумуляторе, а другой — в основной памяти.
РАКОП Регистр адреса команды основной памяти. Этот регистр указывает ячейку основной памяти, где находится следующая команда машинного языка, подлежащая выполнению.
РАП Регистр адреса памяти. Этот регистр участвует во всех обращениях к основной памяти. Он содержит адрес ячейки памяти, к которой производится обращение для чтения или записи.
РДП Регистр данных памяти. Этот регистр также участвует во всех обращениях к основной памяти. Он содержит данные, которые записываются, или принимает данные, которые считываются из ячейки основной памяти, указанной в РАП.
РР Рабочий регистр. Этот регистр используется для выделения поля адреса (8 бит справа) машинной команды, хранящейся в регистре РДП, чтобы его можно было поместить в РАП (в машине прямая пересылка данных из РДП в РАП невозможна).
РАКУП Регистр адреса команд управляющей памяти. Этот регистр указывает адрес следующей микрокоманды (в управляющей памяти), подлежащей выполнению.
РМК Регистр микрокоманды. Этот регистр содержит текущую выполняемую микрокоманду.

Машина ITSIAC работает следующим образом. Прежде всего в управляющую память загружается микропрограмма. Команда машинного языка декодируется, и управление передается соответствующей подпрограмме микропрограммы для ее интерпретации. Каждая команда микропрограммы занимает одну ячейку управляющей памяти. Регистр адреса команды управляющей памяти РАКУП указывает на следующую выполняемую микрокоманду. Эта микрокоманда выбирается из управляющей памяти и помещается в регистр микрокоманд РМК.

Страницы: 1, 2, 3, 4


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

© 2010.