Методы ускорения переключения контекста
Лекция 5.
Методы ускорения переключения контекста процессора
Современные операционные системы и системы программирования широко используют переключение контекста процессора (содержимого регистров и отдельных управляющих триггеров) при отработке входа в прерывание и выхода из него, входа и выхода из подпрограммы и в случае организации мультипрограммной работы. Время переключения контекста должно быть по возможности минимальным, так как затраты на переключение - это плата за организацию совместного протекания совокупности взаимодействующих вычислительных процессов.
Уменьшение времени переключения контекста процессора может быть достигнуто за счет, во-первых, сокращения количества регистров, содержимое которых сохраняется в памяти, во-вторых, аппаратной поддержки сохранения регистров и, в-третьих, введения специальных соглашений, регламентирующих использование регистров в программах, что позволяет перейти от полного сохранения контекста к частичному.
Уменьшение количества сохраняемых регистров ведет к снижению производительности и, вообще говоря, находится в противоречии со стремлением увеличения производительности за счет использования быстрой регистровой памяти и параллельного функционирования устройств процессора, каждое из которых содержит собственные регистры. Однако, этот прием применяется в ряде архитектур, например в транспьютерах компании INMOS и Java-процессорах. Это архитектуры, основанные на операциях со стеком. К числу сохраняемых регистров относятся указатели на текущую позицию стека, на используемую область памяти и т.д. Число таких указателей ограничено, например, в транспьютере их 8, что позволило переключать контекст за 2 микросекунды при тактовой частоте 10 МГц.
Аппаратная поддержка сохранения регистров может реализовываться по разному. С одной стороны, это может быть ускоренный аппаратный перенос содержимого регистров в память. С другой - возможно предоставление каждой вновь активизируемой программе своего множества регистров.
Например, в архитектуре SPARC микропроцессоров компании SUN используется 200 регистров, образующих 8 групп (окон) по 32 регистра с общими для двух соседних окон восемью регистрами. Перекрытие регистровых окон выполнено так, что регистры с номерами 24-31 предыдущего окна служат одновременно регистрами с номерами 0-7 последующего окна. Это, по мнению разработчиков, увеличивает эффективность передачи параметров подпрограммам.
Использование регистров обработки быстрых прерываний. Ряд функций, связанных с обработкой прерываний, выполняются специализированными программами, которые могут использовать ограниченное число регистров. Поэтому в ряде процессоров вводятся специальные регистры, используемые при обработке так называемых быстрых прерываний. Это, например, прерывание по приему очередного символа сообщения, переносящее символ в память. Действия по началу приема, требующие запуска механизма распределения памяти, и завершению приема всего сообщения требуют, как правило, обычного прерывания, сохраняющего все регистры процессора. Но так как чаще происходит прием очередного символа, то быстрые прерывания дают существенное увеличение производительности.
Стандартизация архитектур микропроцессоров
На протяжении всей истории развития вычислительной техники предпринимались попытки (прежде всего со стороны разработчиков программных средств) стандартизировать архитектуру процессоров, что существенно расширило бы область применения создаваемого программного обеспечения. Осознав безуспешность попыток добиться совместимости на уровне системы машинных команд, разработчики пытались стандартизовать язык ассемблера, языки высокого уровня, языки интерфейса прикладных программ с операционными системами.
Стимулом к этому была и остается постоянно растущая сложность как самих процессоров, так и создаваемых с их использованием программных систем.
Создание сложных новых систем требует, помимо всего прочего, наличия двух обязательных этапов: адекватного описания системы и исчерпывающего тестирования на соответствие этому описанию. Тестирование должно быть доказательным. Не прибегая к примерам из области создания больших прикладных систем, укажем на широко известные ошибки в микропроцессорах известных компаний и на наличие не декларированных возможностей микропроцессоров и операционных систем.
Рекомендуемые материалы
Отсутствие стандартизации не позволяет создавать новые системы путем конструирования из существующих, прошедших апробацию в разнообразных условиях применения большим количеством независимых пользователей.
Попытка комплексного решения проблемы стандартизации - формулирование концепции Открытых систем. Открытые системы представляют совокупность интерфейсов, протоколов и форматов данных, базирующихся на общедоступных, общепринятых стандартах, обеспечивающих переносимость (мобильность) программного обеспечения, взаимодействие между системами, масштабируемость.
Переносимость - свойство, выражающееся в возможности исполнения программы в исходных кодах на различных аппаратных платформах в среде различных операционных систем.
Взаимодействие систем - свойство, выражающееся в способности систем обмениваться информацией с автоматическим восприятием форматов и семантики данных.
Масштабируемость - свойство, выражающееся в возможности исполнения программы на различных ресурсах (объем памяти, число и производительность процессоров) с пропорциональным изменению ресурсов значением показателей эффективности. Важно понимать, что ресурсы могут не только возрастать, но и уменьшаться. Например, программа может выполняться на произвольном, выделенном для ее исполнения участке памяти.
В рамках концепции Открытых систем архитектура процессора должна поддаваться достаточно простому формальному описанию со спецификацией типов данных, регистров и выполняемых преобразований без "побочных эффектов".
Известны по крайней мере две попытки реализации этого подхода, рассмотренные ниже.
Архитектурно независимая спецификация программ. В настоящее время в рамках международной организации ISO/IEC в комитете по микропроцессорным системам ведется подготовка проекта стандарта ANDF на архитектурно независимый формат спецификации программ (Architecture Neutral Distribution Format). По мнению разработчика компании Х/Ореn Company Ltd., этот формат спецификаций позволит решить проблему переносимости программ. Компиляция исходного кода предполагается двухэтапной. На первом этапе исходный код транслируется в обобщенные декларации интерфейсов прикладных программ (API) в совокупности с обобщенными описаниями типов данных. Фактически полученная оттранслированная программа представляет собой выражение абстрактной алгебры, определенной Architecture Neutral Distribution Format. В результате текст программы может быть подвергнут формальной проверке и преобразованию. На втором этапе генерируется программа для конкретной архитектуры.
Java-технология, предложенная компанией SUN. В основе данной технологии лежит понятие виртуальной Java-машины, спецификации которой включают следующие типы данных:
• byte - байт;
• short - двухбайтовое целое;
• integer - четырехбайтовое целое;
• long - восьмибайтовое вещественное;
• float - четырехбайтовое вещественное;
• double - восьмибайтовое вещественное;
• char - двухбайтовый символ;
• object - четырехбайтовая ссылка на объект;
• returnAddress - четырехбайтовый адрес возврата. В виртуальном Java-процессоре предусмотрены следующие регистры:
• PC - счетчик команд;
Люди также интересуются этой лекцией: Лекция 9.
• Vars - регистр для доступа к локальным переменным;
• Optop - указатель на стек операндов;
• Frame - указатель на окружение времени выполнения. Большинство команд Java-процессора имеют длину один байт, что согласуется со стековой архитектурой процессора, использующей небольшое число регистров и указателей на данные,
Использование байт-кода в процессоре Java позволяет уменьшить длину программ. Средняя длина команды составляет 1,8 байта, В последнее время ко всем ранее существовавшим доводам в пользу стандартизации архитектур добавилась практическая потребность работы в сетях типа Internet, что выдвигает требование короткого программного кода. Открытые системы, создаваемые в Internet, позволят накапливать программные продукты и конструировать системы из уже существующих.
Заметим, что архитектура виртуальной Java-машины достаточно похожа на архитектуру транспьютеров компании IMMOS, Отличие фактически состоит в добавлении элементов объектно-ориентированной технологии. Одним из препятствий на пути развития Java-технологии является низкая производительность исполнения Java-кода. Однако есть все предпосылки для преодоления этого препятствия. Например, современные процессоры с архитектурой компании Intel x86 содержат специальный блок, транслирующий сложные команды в совокупность простых команд RISC-процессора. Далее RISC-процессор исполняет эти команды, используя все преимущества RISC-подхода для достижения высокой производительности. Вполне мыслимое дело разработать подобный транслятор для Java-кода, когда байт-код будет транслироваться в команды реального процессора.
Другим возможным подходом к повышению производительности служит примененный в транспьютере Т-9000. В нем предпринята попытка при сохранении байтовой системы команд транспьютеров семейств Т-2хх, Т-4хх, Т-8хх повысить скорость исполнения за счет одновременной обработки большого числа команд при исполнении их на параллельно функционирующих обрабатывающих устройствах.