выравнивание данных между собственными и несобственными совместно используемыми структурами данных
Классы МПК: | G06F9/455 эмуляция; моделирование программного обеспечения |
Автор(ы): | БОНД Барри (US), ХАЛИД Атм Шафикул (US) |
Патентообладатель(и): | МАЙКРОСОФТ КОРПОРЕЙШН (US) |
Приоритеты: |
подача заявки:
2002-10-22 публикация патента:
10.10.2008 |
Изобретение относится к вычислительной технике. Техническим результатом является облегчение работы несобственных программных компонентов на собственной компьютерной платформе. Для этого осуществляют выравнивание формата несобственных параметров в соответствии с собственной парадигмой собственной компьютерной платформы посредством записи параметров в выделенный блок памяти, в котором информация выровнена по границе слова, и передачу собственной компьютерной платформе указателя на этот блок памяти, если определено, что упомянутые параметры не выровнены; и передачу собственной компьютерной платформе указатель на оригинальные упомянутые параметры, если определено, что упомянутые параметры выровнены. 7 н. и 10 з.п. ф-лы, 6 ил.
Формула изобретения
1. Эмулятор несобственных программных модулей для выполнения их в собственной компьютерной платформе, содержащий
перехватчик, способный перехватывать обращения к собственной компьютерной платформе из несобственных программных модулей,
транслятор, выполненный с возможностью транслировать несобственную парадигму несобственных программных модулей в перехваченных обращениях для осуществления передачи параметров в собственную парадигму собственной компьютерной платформы,
выравниватель данных, способный:
выравнивать формат несобственных параметров в соответствии с собственной парадигмой собственной компьютерной платформы посредством записи упомянутых параметров в выделенный блок памяти, в котором информация выровнена по границе слова, и передачи собственной компьютерной платформе указателя на упомянутый блок памяти, если определено, что упомянутые параметры не выровнены; и
передавать собственной компьютерной платформе указатель на оригинальные упомянутые параметры, если определено, что упомянутые параметры выровнены.
2. Эмулятор по п.1, отличающийся тем, что параметры, которые выравниватель данных способен выравнивать, являются частью структуры данных, совместно используемой собственной компьютерной платформой и несобственными программными модулями.
3. Эмулятор по п.1, отличающийся тем, что транслятор дополнительно выполнен с возможностью транслировать адреса несобственной длины в адреса собственной длины.
4. Эмулятор по п.1, отличающийся тем, что размер слова собственной парадигмы собственной компьютерной платформы отличается от размера слова несобственной парадигмы несобственных программных модулей.
5. Считываемый компьютером носитель, хранящий операционную систему, содержащую команды для реализации
собственного ядра, способного принимать обращения от собственных программных модулей,
эмулятора по п.1, выполненного с возможностью принимать обращения от несобственных программных модулей.
6. Система выравнивания данных, облегчающая взаимодействие и совместимость несобственных программных модулей и собственной компьютерной платформы, содержащая
блок проверки параметров, способный проверять параметры структур несобственных данных и определять, выровнены ли эти параметры для собственной компьютерной платформы,
блок выравнивания параметров, выполненный с возможностью, если определено, что упомянутые параметры не выровнены:
выделять блок памяти, в котором информация выровнена по границе слова, для размещения данных параметров упомянутых несобственных данных, если определено, что упомянутые параметры не выровнены;
записывать данные таких параметров в упомянутый выделенный блок памяти, чтобы упомянутые несобственные данные были выровнены по границе слова для собственной компьютерной платформы, и
передавать собственной компьютерной платформе указатель на упомянутый блок памяти; и
если определено, что упомянутые параметры выровнены:
передавать собственной компьютерной платформе указатель на оригинальные упомянутые параметры.
7. Система по п.6, отличающаяся тем, что параметры являются частью структуры данных, совместно используемой собственной компьютерной платформой и несобственными программными модулями.
8. Система по п.6, отличающаяся тем, что параметры структуры данных могут быть не выровнены при преобразовании от несобственной парадигмы к собственной парадигме.
9. Система по п.6, отличающаяся тем, что блок выравнивания параметров дополнительно выполнен с возможностью
перенаправлять обращения к параметрам в выделенный блок памяти, в котором информация выровнена по границе слова, если упомянутые параметры не выровнены,
заменять данные в исходном параметре данными из упомянутого выделенного блока памяти.
10. Способ облегчения взаимодействия и совместимости несобственных программных модулей и собственной компьютерной платформы, содержащий этапы, на которых
проверяют параметры структур данных,
определяют, выровнены ли эти параметры для собственной компьютерной платформы,
в ответ на определение того, что эти параметры не выровнены:
выделяют блок памяти, в котором информация выровнена по границе слова, для размещения данных невыровненных параметров,
записывают данные этих параметров в упомянутый выделенный блок памяти, чтобы данные были выровнены для собственной компьютерной платформы;
передают собственной компьютерной платформе указатель на упомянутый блок памяти; и
в ответ на определение того, что эти параметры выровнены:
передают собственной компьютерной платформе указатель на оригинальные упомянутые параметры.
11. Способ по п.10, отличающийся тем, что в ответ на определение отсутствия выравнивания этих параметров, дополнительно
перенаправляют обращения к невыровненным параметрам в выделенный блок памяти, в котором информация выровнена по границе слова,
заменяют данные в исходном параметре данными из упомянутого выделенного блока памяти.
12. Способ по п.10, отличающийся тем, что параметры являются частью структуры данных, совместно используемой собственной компьютерной платформой и несобственными программными модулями.
13. Способ по п.10, отличающийся тем, что параметры структуры данных могут быть не выровнены при преобразовании от несобственной парадигмы к собственной парадигме.
14. Компьютер, содержащий систему выравнивания данных по п.6.
15. Считываемый компьютером носитель, имеющий сохраненную на нем операционную систему, содержащую выполняемые компьютером команды, которые при выполнении на компьютере осуществляют способ по п.10.
16. Считываемый компьютером носитель, имеющий выполняемые компьютером команды, которые при выполнении на компьютере осуществляют способ облегчения взаимодействия и совместимости несобственных программных модулей и собственной компьютерной платформы, содержащий этапы, на которых
проверяют параметры структур данных,
определяют, выровнены ли эти параметры для собственной компьютерной платформы,
в случае определения, что эти параметры не выровнены:
выделяют блок памяти, в котором информация выровнена по границе слова, для размещения данных невыровненных параметров,
записывают данные этих параметров в упомянутый выделенный блок памяти, чтобы данные были выровнены для собственной компьютерной платформы,
передают собственной компьютерной платформе указатель на упомянутый блок памяти; и
в случае определения, что эти параметры выровнены:
передают собственной компьютерной платформе указатель на оригинальные упомянутые параметры.
17. Считываемый компьютером носитель по п.16, отличающийся тем, что способ дополнительно содержит этапы, на которых
перенаправляют обращения к невыровненным параметрам в выделенный блок памяти, в котором информация выровнена по границе слова,
заменяют данные в исходном параметре данными из упомянутого выделенного блока памяти.
Описание изобретения к патенту
Область техники
Данное изобретение, в целом, относится к технологии облегчения работы компонентов несобственной программы на собственной вычислительной платформе.
Предпосылки изобретения
Приложения, предназначенные для работы на конкретной вычислительной платформе, не работают на других вычислительных платформах. В целом, программное обеспечение сложным образом привязано к конкретной вычислительной платформе, на которой оно предназначено работать. Например, программа, написанная и скомпилированная для работы на миникомпьютере, работающем под конкретной реализацией операционной системы Unix, не будет функционировать на карманном компьютере, использующем собственную операционную систему.
Вычислительная платформа обычно включает в себя операционную систему (ОС) и архитектуру вычислительного оборудования. Примерами ОС являются следующие операционные системы Microsoft®: MS-DOS®, Windows® XP, Windows® 2000, Windows NT® 4.0, Windows® ME, Windows® 98 и Windows® 95. Примеры архитектуры вычислительного оборудования включают в себя связанные с микропроцессорами Intel®: 80286, Pentium®, Pentium® II, Pentium® III и ItaniumTM.
Примеры вычислительных платформ включают в себя 16-разрядные платформы (например, Microsoft® MS-DOS® и Intel® 80286), 32-разрядные платформы (например, Microsoft® Windows® NT® и Intel® Pentium® II) и 64-разрядные платформы (например, Intel® ItaniumTM и, например, Windows® XP 64-bit Edition). Вычислительную платформу можно также называть платформой, вычислительной средой или средой.
Конкретные версии приложений предназначены для работы на конкретной платформе. Эти приложения можно именовать "родными" (собственными), когда они выполняются на своей конкретной платформе. Например, Microsoft® Office 2000 это приложение, предназначенное для работы на 32-разрядной платформе. Другими словами, Microsoft® Office® 2000 является родным (собственным) приложением по отношению к его 32-разрядной платформе. Однако эти 32-разрядные приложения могут называться "неродными" (несобственными), когда они выполняются на другой платформе, например, на 64-разрядной платформе.
Примером конечной (целевой) платформы программного модуля (или просто "конечной платформой") является платформа, для работы на которой предназначена выполняемая программа (например, программный модуль, приложение, программа). Например, если приложение Microsoft® Office® построено для работы в среде ОС Windows® 2000 32-разрядного х86, то для этого образа конечной платформой будет 32-разрядный х86.
Прикладная программа является основным примером используемого здесь термина "программный модуль". Однако термин "программный модуль" включает в себя и другое выполняемое программное обеспечение, которое может не относиться к приложениям.
Типичная архитектура компьютера
Типичная архитектура компьютера является многоуровневой. Снизу вверх, она содержит аппаратный уровень, уровень операционной системы (ОС) и уровень приложений. Альтернативно, эти уровни можно описывать как аппаратный уровень, уровень режима ядра и уровень пользовательского режима.
На фиг.1 показаны уровни типичной архитектуры 100 компьютера. Верхним уровнем архитектуры является пользовательский режим 110. Он содержит приложения, например приложения 112а-е. Эти приложения взаимодействуют с набором API (программный интерфейс приложений) 120. Обычно, этот набор API считается частью ОС и, таким образом, частью вычислительной платформы.
Следующий уровень архитектуры - это режим ядра 130. Он может в целом называться "ядром" ОС. Будучи частью ОС, оно является частью вычислительной платформы.
Ядро ОС является привилегированной частью ОС - самой доверенной частью ОС. Оно является внутренним уровнем кода. Оно обычно распоряжается вводом/выводом 132, защитой 134, контролем отображения (т.е. доступом к экрану) 136, управлением памятью 138 и другими привилегированными функциями 139. Ядро имеет исключительный доступ к аппаратному уровню 150 через драйверы 142 устройств и другие аппаратные интерфейсы 144.
API 140 ядра - это API внутри ядра, которые распоряжаются доступом к функциям ядра. Приложения обычно не вызывают ядро напрямую. Вместо этого, приложения вызывают API 120, которые, в свою очередь, могут вызывать ядро (в частности API 140 ядра).
Хотя на фиг.1 не показаны компоненты 132-144 ядра 130 с соединениями между ними, эти компоненты соединяются по мере необходимости. Соединительные линии исключены из чертежа для простоты и наглядности.
Ниже режима ядра 130 располагается аппаратный уровень 150. Этот уровень включает в себя все оборудование данного компьютера. В него входят процессор(ы), память, дисковые устройства ввода/вывода, другие устройства ввода/вывода и т.д. Платформа также включает в себя аппаратный уровень.
Поэтому вычислительная платформа включает в себя аппаратный уровень, уровень ядра и, обычно, API 120 пользовательского режима.
Возможность взаимодействия и совместимость
Совместимость приложений долгое время была основным вопросом с тех пор, как начали развиваться вычислительные платформы. Люди хотели запускать нужные им приложения на выбранной ими платформе в идеальном мире. Однако в реальном мире трудно, если не невозможно, запустить приложение на другой хост-платформе, для которой оно не приспособлено. Например, 32-разрядное х86 приложение не может работать в среде 64-разрядного Itanium (IA64). Проблема усугубляется, когда люди покупают более мощную машину, платформа которой отличается от ранее использовавшейся. Все приложения со старой платформы сразу же становятся бесполезными.
Каждая платформа имеет соответствующий массив родных (собственных) приложений, предназначенных для работы на ней. При выпуске платформы нового поколения, разработчики программного обеспечения обычно обновляют свои продукты, чтобы они могли работать на платформе нового поколения. Разработчики программного обеспечения делают это по многим причинам, включая маркетинговые, технологические и экономические.
По аналогичным причинам разработчики ОС любят, чтобы их продукты обладали обратной совместимостью. Таким образом, приложения более старых версий могут работать на ОС последнего поколения (и, таким образом, на платформе последнего поколения). Другими словами, если неродные приложения могут работать на родной платформе (включающей в себя новую ОС), то пользователи воодушевляются на приобретение новой ОС, поскольку им не приходится выбрасывать приложения, которыми они сейчас пользуются, и приобретать новые версии. Это также дает разработчику программного обеспечения время на разработку обновлений своих приложений.
В данном случае примером совместимости является неродной программный модуль, функционирующий надлежащим образом и мирно сосуществующий с родными программными модулями в родной вычислительной среде (например, ОС).
Используемый здесь пример возможности взаимодействия представляет собой способность как родных, так и неродных программных модулей совместно пользоваться ресурсами (например, обращаться к данным в участках памяти друг друга) или в совместно используемом участке памяти) и/или работать совместно и кооперативно.
Для наглядности и простоты, приведем пример, иллюстрирующий проблему несовместимости неродных приложений и невозможности взаимодействия между родными и неродными приложениями. В этом примере неродные программные модули называются 32-разрядными приложениями, поскольку они предназначены для работы на 32-разрядной платформе. В этом примере родные приложения называются 64-разрядными приложениями, поскольку они предназначены для работы на родной платформе, которая является 64-разрядной. Это следует рассматривать как пример, но не как ограничение. Специалистам в данной области понятно и очевидно, что существуют другие комбинации родных и неродных приложений и родных платформ.
Запуск неродных приложений на родной платформе
Рассмотрим случай запуска неродных (несобственных) приложений на родной (собственной) платформе. В частности, рассмотрим пример запуска 32-разрядных приложений в 64-разрядной среде. Пусть в рамках этого примера 64-разрядная платформа является обновлением по отношению к существующей популярной 32-разрядной платформе (для работы на которой предназначены 32-разрядные приложения).
В архитектуре компьютера разрядность платформы (например, 32-разрядная платформа) обычно относится к размеру "слова" адресуемой памяти платформы. Обычно слово представляет собой элемент данных, который перемещается посредством одной операции из памяти в регистр процессора. В наиболее распространенных архитектурах последних двух десятилетий слово имело длину четыре байта или 32 бита. Как процессоры универсальных машин IBM, так и процессоры Intel, используемые в стандартных ПК, использовали 32-битовое слово. Наиболее современные архитектуры процессора от Intel и других производителей предусматривают 64-битовое слово.
Преимущество 64-разрядной платформы над 32-разрядной платформой состоит в возможности адресации значительно большего объема памяти. Основная причина в том, что в 64-разрядной платформе адрес для обращения к памяти может иметь длину 64 бита в отличие от типичного адреса длиной 32 бита для 32-разрядной платформы.
Выравнивание данных
Выравнивание - это размещение данных в памяти компьютера по адресам, которые обеспечивают более эффективный доступ для данной платформы. Обычно это делают путем сохранения данных по границам слов памяти. Это можно делать ценой потери некоторого объема памяти, когда сохраняемые данные имеют размер меньше слова. Однако выравнивание дает выигрыш в скорости. Выравнивание данных, сохраняемых в памяти, ускоряет доступ к этим данным в памяти, поскольку компьютерная платформа используется наиболее эффективно.
Например, современная платформа RISC считывает из памяти кусками в несколько байтов, обычно 4 или 8 байтов длиной, эти куски должны начинаться по адресам, кратным размеру куска. Обращение к памяти по невыровненным адресам эмулируется множественными выровненными обращениями и осуществляется гораздо медленнее или может порождать ошибки шины и аварийное завершение программы. Другие платформы могут обрабатывать невыровненные (т.е. выровненные по байтам) обращения к памяти более тщательно, но при этом снижается производительность.
Специалистам в данной области известны методы выравнивания данных, а также затраты на этот процесс и выигрыш от него.
Память, совместно используемая родными и неродными программными модулями
Одна проблема с возможностью взаимодействия и совместимостью состоит в управлении памятью, распределяемой между неродными (например, 32-разрядными) приложениями и родными (например, 64-разрядными) приложениями. Другая состоит в управлении памятью, распределяемой между неродными (например, 32-разрядными) приложениями и родной (например, 64-разрядной) операционной системой.
Это особенно справедливо, когда выравнивание адресов памяти различается для родных и неродных программных модулей. Например, все данные выравниваются в памяти с приращениями в четыре (4) байта в 32-разрядной среде и все данные выравниваются в памяти с приращениями в восемь (8) байтов. В такой ситуации, данные неродного приложения могут сохраняться таким образом, что они будут не выровнены для целей родной среды.
Этот факт показан на фиг.2. Блоки 210 памяти представляют структуру памяти на основе схемы адресации 32-битового слова. Толстые вертикальные линии указывают границы слов. 64 бита данных, обозначенные А1 ... А8, хранятся в двух ячейках 212 и 214 памяти размером в слово. 32 бита данных, обозначенные В1 ... В4, хранятся в одной ячейке 216 памяти размером в слово.
На фиг.2 блоки 230 и 250 памяти представляют структуру памяти на основе схемы адресации 64-битового слова. Опять же, толстые вертикальные линии указывают границы слов.
Когда данные А1-А8 и В1-В4 блоков 210 преобразуются для использования схемой 64-битовой адресации памяти, они могут сохраняться и адресовываться так, как обозначено в блоках 230 памяти. В частности, они оказываются не выровненными. Однако те же данные хранятся в выровненном порядке в блоках 250 памяти.
Таким образом, когда приходится принимать решение о выравнивании данных, одна возможность состоит в том, чтобы игнорировать этот вопрос и позволить оборудованию компенсировать его. Согласно описанному выше и проиллюстрированному блоками 230 памяти на фиг.2, оборудование может компенсировать путем обращения к данным, занимающим несколько смежных ячеек памяти. Цена этого подхода состоит в дополнительном времени, необходимом для доступа к данным в памяти. Этот подход возможен только, если потеря времени (на множественный доступ) приемлема.
Что, если время, потерянное на компенсацию отсутствия выравнивания данных в памяти, становится неприемлемым? Одна возможность принудительного выравнивания состоит в копировании структуры данных в новое место и выравнивание ее. Поскольку при копировании тратится значительно большее время, чем в отсутствие копирования, и поскольку структуры данных уже могут оказаться правильно выровненными, желательно иметь возможность определения наличия выравнивания данных до копирования.
Другой вопрос состоит в том, всегда ли необходимо принудительное выравнивание. Иногда выравнивание происходит естественным путем.
Сущность изобретения
Здесь описана технология облечения работы неродных (несобственных) программных компонентов на родной (собственной) вычислительной платформе.
Эта технология предусматривает механизм выравнивания, при необходимости, параметров структур данных, так чтобы программные модули или операционные системы разных парадигм могли их использовать. Данные параметров структур данных выравниваются в соответствии с родной парадигмой. Обычно такие структуры данных совместно используются неродными программными модулями и родной операционной системой (или другими программными модулями). Выравнивание данных позволяет родной платформе быстро и легко осуществлять доступ к ним, а, если бы они не были выровнены, то производительность снижалась.
Это краткое описание изобретения, само по себе, не призвано ограничивать объем данного патента. Для лучшего понимания настоящего изобретения следует обратиться к нижеследующему подробному описанию и прилагаемой формуле изобретения, приведенные в сочетании с прилагаемыми чертежами. Объем настоящего изобретения указан в прилагаемой формуле изобретения.
Краткое описание чертежей
Одни и те же элементы и признаки на чертежах обозначаются аналогичными позициями.
Фиг.1 - блок-схема вычислительной архитектуры.
Фиг.2 - схема родных и неродных блоков памяти.
Фиг.3 - блок-схема вычислительной архитектуры, пригодной для описанного здесь варианта осуществления.
Фиг.4 - блок-схема эмулятора ядра, пригодного для описанного здесь варианта осуществления.
Фиг.5 - блок-схема этапов алгоритма, описанной здесь методологической реализации.
Фиг.6 - пример вычислительной операционной среды, способной к (полной или частичной) реализации описанного здесь варианта осуществления.
Подробное описание предпочтительного варианта осуществления
В нижеследующем подробном описании в целях объяснения конкретные числа, материалы и конфигурации излагаются в порядке, обеспечивающем ясное понимание настоящего изобретения. Однако специалистам в данной области ясно, что настоящее изобретение можно осуществить на практике без конкретных иллюстративных деталей. В других примерах общеизвестные особенности опущены или упрощены для прояснения описания иллюстративных реализаций настоящего изобретения, т.е. для лучшего объяснения настоящего изобретения. Кроме того, для простоты понимания некоторые этапы способа указаны как отдельные этапы; однако эти отдельно указанные этапы не следует рассматривать как исключительно возможный порядок выполнения способа.
В нижеследующем описании изложены один или несколько иллюстративных реализаций выравнивания данных между родными и неродными совместно используемыми структурами данных. Изобретатели рассматривают эти иллюстративные реализации в качестве примеров. Изобретатели не рассматривают эти иллюстративные реализации в порядке ограничения объема заявленного изобретения. Напротив, изобретатели предусматривают, что заявленное изобретение можно воплотить и реализовать другими путями, в совокупности с другими современными или будущими технологиями.
В качестве примера варианта осуществления выравнивания данных между родными и неродными совместно используемыми структурами данных можно привести "иллюстративный выравниватель данных".
Включение посредством ссылки
Следующая патентная заявка США включена сюда посредством ссылки: патентная заявка США за №09/847535, озаглавленная "Эмулятор ядра для неродных программных модулей", поданная 1 мая 2001 г.
Введение
Один или несколько описанных здесь иллюстративных реализаций иллюстративного выравнивателя (блока выравнивания) данных можно реализовать (полностью или частично) посредством системы 400 преобразования родного/неродного формата и/или вычислительной среды, наподобие показанной на фиг.6.
Описанный здесь иллюстративный выравниватель данных обеспечивает механизм, с помощью которого неродные приложения можно прозрачно и эффективно запускать на родной платформе. Например, 32-разрядные приложения можно запускать на 64-разрядной платформе с использованием иллюстративного эмулятора ядра. В частности, описанный здесь иллюстративный выравниватель данных обеспечивает механизм выравнивания, по мере необходимости, структур данных, совместно используемых приложениями и/или операционной системой различных платформ (например, родной и неродной).
Обзор эмуляции ядра
Описанный здесь иллюстративный выравниватель (блок выравнивания) данных можно реализовать (например) как часть эмуляции ядра, например, описанной в патентной заявке США за №09/847535, озаглавленной "Эмулятор ядра для неродных программных модулей", поданной 1 мая 2001 г. (которая включена сюда посредством ссылки).
В такой эмуляции ядра, неродные приложения ведут себя так, как если бы они были запущены из-под операционной системы (ОС) со своим неродным ядром. Их неродное ядро эмулируется. Эмулятор неродного ядра перехватывает вызовы ядра со стороны неродных приложений и транслирует их в вызовы родного ядра.
Пример подходящей архитектуры компьютера
На фиг.3 показан пример архитектуры 300 компьютера, пригодной для реализации иллюстративного выравнивателя данных. Специалисты в данной области могут предложить другие возможные архитектуры компьютера, которые могут быть пригодны для реализации.
Архитектура включает в себя родную платформу, которая включает в себя аппаратное обеспечение 350, режим ядра 330 и набор 320 родных API пользовательского режима 310. Верхним уровнем архитектуры 300 является пользовательский режим 310. Он содержит приложения. В частности, он содержит родные (собственные) приложения (например, приложения 312а-с) и неродные (несобственные) приложения (например, приложения 314а и 314b).
Родные приложения взаимодействуют с набором родных API 320. Обычно, этот набор 320 родных API считается частью родной ОС и, таким образом, частью родной вычислительной платформы. Неродные приложения взаимодействуют с набором 322 неродных API. Обычно, этот набор 322 неродных API считается частью неродной ОС и, таким образом, набор не является частью родной вычислительной платформы.
Следующий уровень архитектуры 300 - это режим 330 родного ядра. Его, в общем, можно называть родным "ядром" родной ОС. Поскольку он является частью родной ОС, он является частью родной вычислительной платформы.
Это родное ядро 330 включает в себя родные API 340 ядра и различные функции 333 ядра, в том числе, ввод/вывод, защиту, управление отображением (т.е. доступ к экрану), управление памятью и другие привилегированные функции. Родное ядро 330 имеет исключительный доступ к оборудованию на аппаратном уровне 350 через драйверы 342 устройств и другие аппаратные интерфейсы 344. Родные API 340 ядра - это те API в ядре, которые осуществляют арбитраж доступа к функциям ядра.
Ниже режима ядра 330 располагается аппаратный уровень 350. Этот уровень включает в себя все оборудование данного компьютера. Оно включает в себя процессор(ы), дисковые устройства ввода/вывода, другие устройства ввода/вывода и т.д. Родная платформа также включает в себя аппаратный уровень.
Поэтому, родная вычислительная платформа включает в себя аппаратный уровень 350, уровень ядра 330 и, обычно, родные API 320 пользовательского режима. Родная платформа не включает в себя неродные API 322 или эмулятор 400 неродного ядра.
Пример эмулятора ядра
На фиг.4 показан эмулятор 400 неродного ядра, который является реализацией иллюстративного эмулятора ядра, который может реализовывать вариант осуществления иллюстративного " выравнивателя данных. Он содержит эмулятор 410 неродных API ядра, которые также можно называть имитатором неродного ЦП (или просто имитатором ЦП). Во избежание недоразумений с обозначениями, будем называть его имитатором 410 ЦП.
Имитатор 410 ЦП содержит транслятор 412 для трансляции набора команд неродного ЦП в набор команд родного ЦП, преобразователь 414 для преобразования неродного размера слова в родной и ограничитель 416 памяти для ограничения памяти, доступной для неродных приложений, к которой такие приложения способны обращаться.
Вызовы ядра со стороны неродных приложений.
Имитатор 410 ЦП принимает вызовы ядра от неродных приложений. В частности, имитатор 410 ЦП принимает вызовы ядра от неродных API.
Эмулятор 400 ядра не осуществляет функции ядра. Напротив, он транслирует неродные вызовы из их неродного формата в родной формат. Затем он подает транслированные вызовы на родное ядро, чтобы родное ядро обрабатывало их, как если бы вызов пришел от родного приложения. Однако для этого может потребоваться более чем просто трансляция языка. Может потребоваться преобразование парадигмы между неродной и родной платформами.
Транслятор 412 осуществляет эмуляцию команд. Он осуществляет эмуляцию набора команд неродного процессора.
Преобразователь 414 поддерживает как формат аргументов, так и размер слова. Он изменяет формат аргументов от неродного к родному и изменяет размер слова с неродного на родной.
Совместно, транслятор 412 и преобразователь 414 осуществляют переход от соглашения "передача аргумента через стек" 32-разрядной платформы к соглашению "передача аргументов через регистры" 64-разрядной платформы. Это пример изменения парадигмы относительно механизма передачи значений аргументов. Имитатор 410 ЦП учитывает это изменение при трансляции набора команд ЦП, осуществляемой транслятором 412.
В другом примере, в 32-разрядной платформе, размер слова составляет 32 бита. Таким образом, адреса и данные обычно записываются в память в виде 32-битовых слов. В 64-разрядной платформе, размер слова составляет 64 бита. Таким образом, адреса и данные обычно записываются в память в виде 64-битовых слов.
Параметры (т.е. аргументы) обычно имеют длину в одно слово. Поэтому, параметры для API 64-разрядного ядра имеют длину 64 бита в отличие от 32 битов для API 32-разрядного ядра.
Преобразователь растягивает 32-битовые аргументы, переданные неродными приложениями (и API) от 32 битов до 64 битов. Для этого он, например, заполняет аргумент 32 нулями в старших позициях. В иллюстративной реализации, преобразователь 414 работает в основном на пользовательском уровне.
Согласно рассмотренному выше, различные платформы обычно отличаются размером слов. Поэтому размер адресуемого участка памяти также отличается. Таким образом, преобразователь 414 осуществляет преобразование адресов (в частности, указателей) как часть своего преобразования слов.
Например, адреса памяти 32-разрядной платформы могут иметь длину до 32 битов; таким образом, максимальная адресуемая память составляет приблизительно 4 ГБ (если один из битов зарезервирован, то максимум составляет около 2 ГБ). Адреса памяти 64-разрядной платформы могут иметь длину до 64 битов;
таким образом, максимальная адресуемая память измеряется в терабайтах. Таким образом, 32-разрядная и 64-разрядная платформы отличаются размером адресуемой памяти.
Структуры данных, совместно используемые родными и неродными программными модулями
Одна из проблем, связанных с возможностью взаимодействия И совместимостью, состоит в управлении памятью, совместно используемой неродными (например, 32-разрядными) приложениями и родными (например, 64-разрядными) приложениями или родной (например, 64-разрядной) операционной системой. В частности, проблема возникает, когда структуры данных (хранящиеся в такой памяти) совместно используются неродными приложениями и родными приложениями или родной операционной системой.
Выравнивание
При выравнивании данных могут возникать проблемы с совместно используемыми структурами данных. Когда данные совместно используемой структуры данных преобразуются из неродного формата в родной, желательно переопределять границы слов вместо того, чтобы копировать и перемещать данные в памяти. Такое копирование и перемещение данных потребляет ценные время и ресурсы.
Иногда размер слова для родных и неродных отличается в разы. Например, размер слова в 64-разрядной платформе кратен размеру слова в 32-разрядной платформе. Поэтому, при переопределении границ слов, они могут сами по себе попадать между данными, которые уже являются кратными (например, данными длиной 64 бита).
Рассматривая блоки 210 и 250 памяти и содержащиеся в них данные, читатель может видеть пример того, что можно считать примером такого самопроизвольного переопределения границ слов. Другими словами, при перераспределении границ слов блоков 210 (который содержит структуру данных 212 и 214 и данные А1-А8), они могут задавать структуру данных 252 блоков 250 памяти. Эта структура данных 252 содержит выровненные данные 262. В этом примере границы памяти самопроизвольно устанавливаются так, что данные выравниваются.
Отсутствие выравнивания
С другой стороны, при переопределении границ слов, такие границы могут самопроизвольно попадать внутрь данных, в результате чего данные оказываются не выровненными. Рассматривая блоки 210 и 230 памяти и содержащиеся в них данные, читатель может видеть пример того, что можно считать примером такого самопроизвольного переопределения границ слов, когда данные не выравниваются. Иными словами, при перераспределении границ слов блоков 210 (который содержит структуру данных 212 и 214 и данные А1-А8), они могут задавать блоки 232 и 234 блоков 230 памяти. Эти блоки 232 и 234 содержат невыровненные данные 242. В этом примере, границы памяти самопроизвольно устанавливаются так, что данные оказываются не выровненными.
Мотивация выравнивания
Таким образом, когда приходится принимать решение о выравнивании данных, одна возможность состоит в том, чтобы игнорировать этот вопрос и позволить оборудованию компенсировать его. В некоторых случаях оборудование может компенсировать путем обращения к данным, занимающим несколько смежных ячеек памяти. Цена этого подхода состоит в дополнительном времени, "необходимом для доступа к данным в памяти. Этот подход возможен только, если потеря времени (на множественный доступ) приемлема.
Примером приемлемой цены отсутствия выравнивания является работа процессоров Intel® х86. В то время как цена доступа к выровненным данным составляет одну единицу времени (например, цикл), цена доступа к невыровненным данным составляет примерно три единицы времени. Поэтому, разработчики программного обеспечения, предназначенного для платформы Intel® х86, не имеют мотивации для учета отсутствия выравнивания данных, поскольку падение производительности в целом приемлемо.
Однако существуют платформы, в которых доступ к выровненным данным высокой степени оптимизирован. По этой причине процесс может значительно замедляться при попытке обращения к невыровненным данным. Это может привести к сбою. В таких случаях, цена отсутствия выравнивания является недопустимой.
Примером недопустимой цены отсутствия выравнивания является работа процессоров Intel® IA64. В то время как цена доступа к выровненным данным составляет одну единицу времени (например, цикл), цена доступа к невыровненным данным составляет примерно десять тысяч (10000) или более единиц времени. Поэтому, если разработчикам программного обеспечения, предназначенного для платформы Intel® IA64, не удается учесть отсутствие выравнивания данных, может получиться совершенно неприемлемое снижение производительности.
Согласно, по меньшей мере, одному аспекту иллюстративный выравниватель данных принудительно выравнивает данные, хранящиеся в памяти, рассматриваемые как родными, так и неродными приложениями и/или операционными системами.
Подсистема выравнивания данных
Согласно фиг.4 эмулятор 400 неродного ядра содержит подсистему 460 выравнивания данных, координирующую выравнивание данных между родными и неродными приложениями (или между неродными приложениями и родной операционной системой). В иллюстративной реализации подсистема 460 выравнивания данных может быть вариантом осуществления иллюстративного выравнивателя (блока выравнивания) данных.
Согласно рассмотренному выше преобразователь 414 при необходимости переопределяет размеры структур данных для преобразования из неродного формата в родной (и наоборот). Например, блок 216 из блоков 210 содержит данные В1-В4. Преобразователь может увеличить их до блока 254 из блоков 250, чтобы получить данные 264.
Хотя преобразователь 414 может успешно изменить размер данных, такие данные могут оказаться не выровненными. Некоторые структуры данных (например, LARGE_INTEGER) могут получить правильный размер (например, 64 бита) для родной среды, но могут быть неправильно выровнены для родной среды. Пример этого показан в блоках 210 и 230 памяти на фиг.2.
Подсистема 460 выравнивания данных проверяет конкретный заранее указанный тип структуры данных, чтобы определить, выровнена ли она.
Если она не выровнена, то подсистема 460 выравнивания данных копирует структуру данных в выровненный блок памяти и родная среда получает указатель на копию. После вызова функции, которая может работать на этой совместно используемой структуре данных, данные в блоке копируются обратно в исходный невыровненный участок.
Если же структура данных выровнена, то родная среда получает указатель на оригинал.
Подсистема 460 выравнивания данных позволяет иметь правильный размер типа структуры данных (для родной среды), но было определено, что она может быть не выровнена. Примером такой структуры данных является структура данных LARGE_INTEGER.
Методологическая реализация иллюстративного выравнивателя данных
На фиг.5 показана методологическая реализация иллюстративного выравнивателя (блока выравнивания) данных, осуществляемая эмулятором 400 ядра (или некоторой его частью). Эта методологическая реализация может осуществляться программными средствами, аппаратными средствами или их комбинацией.
На этапе 510, указанном на фиг.5, подсистема 460 выравнивания данных обследует конкретные заранее указанные типы структур данных, которые содержат параметры, которые могут быть не выровнены. На этапе 512 подсистема проверяет параметры, чтобы определить, выровнены ли эти параметры. Если да, то процесс переходит к этапу 530 и никакого выравнивания не производится. Если они не выровнены, то процесс переходит к этапу 514.
На этапе 514, указанном на фиг.5, подсистема 460 выравнивания данных повторно выделяет буфер для размещения этого параметра. На этапе 516, подсистема копирует параметры (и, возможно, всю структуру данных) в выровненный блок памяти. На этапе 518, родная среда получает указатель на копию в выделенном буфере. После вызова функции, которая может использовать совместно используемую структуру данных (и, таким образом, параметры), данные в блоке копируются обратно в исходный невыровненный участок (на этапе 520). Процесс заканчивается на этапе 522.
Если же параметры структуры данных выровнены, то родная среда получает указатель на оригинал (что указано на этапе 530).
Дополнительные подробности
В целом, эмулятор (или эквивалент) ядра является промежуточным уровнем, который координирует процесс выполнения, когда неродные приложения (например, 32-разрядные приложения) вынуждены обращаться к родной ОС за некоторой поддержкой, например, доступом к файловой информации на диске, информацией защиты, извещениями о событиях и т.д. Этот промежуточный уровень способен отслеживать любую информацию, передаваемую в обоих направлениях между неродными приложениями (например, 32-разрядными приложениями) и родной ОС (например, 64-разрядной ОС).
Вопросы обработки "подключения" обратного вызова
Иногда неродное (несобственное) приложение может устанавливать обратный вызов "ОС-к-приложению" (часто именуемый "подключением или ловушкой"), который может оказывать влияние на стабильность системы в целом. Подключение может представлять собой ряд команд в неродном (несобственном) программном модуле. Эти неродные (несобственные) команды могут иметь какую-то другую информационную структуру, неприменимую для родного кода (например, указатель функции). Хотя они вызываются из родной (собственной) выполняемой ветви, родной модуль не знает, что производится обратный вызов к неродному подключению.
Чтобы решить вопрос выравнивания данных в вызовах неродного подключения, подключение помечают атрибутом, чтобы указать, что подключение установлено для конкретного типа неродного приложения. Атрибут будет использован позже для определения, какую выполняемую ветвь может исполнять подключение (подключаемая программа) (т.е. цепь подключения будет фильтроваться на основании установленного атрибута). Таким образом, несовместимая выполняемая ветвь не сможет проходить через определенные подключения.
Иногда эмулированные команды могут вызывать родной код в ядре. Осуществляя эти вызовы, эмулированные команды также заполняют некую структуру обратного вызова, содержащую информацию, куда возвращать. Эти структуры совместно используются родной и эмулированной средами и могут обращаться к невыровненным данным. На уровне секции кода "переходника", подсистема 460 выравнивания данных может повторно ставить "заплатку" на структуру до осуществления какого-либо вызова ядра.
Совместно используемая структура данных
Может существовать некая информация, которой совместно пользуются родная ОС и работающее эмулированное приложение. Такая информация может требоваться родной (собственной) ОС в определенном формате. Например, эта совместно используемая информация может содержать некий указатель функции, который нужно выровнять по 8 байтам, прежде чем ОС может оперировать с ним. Однако работающему приложению это не нужно, поскольку для неродных (несобственных) приложений (например, 32-разрядных приложений) достаточно 4-байтового выравнивания. В этом сценарии подсистема 460 выравнивания данных будет идентифицировать такую структуру и автоматически генерировать "переходник" для этой совместно используемой информации, когда API передает эту информацию в обоих направлениях.
Вопрос выравнивания
В качестве примеров типов данных, которые нуждаются в выравнивании, можно указать типы данных наподобие LARGE_INTEGER, объединения, членом которого является 64-битовое целое, и имеющее совместно используемый 64-битовый указатель, которым совместно пользуются пользовательский режим и ОС. Если такие данные не выровнены надлежащим образом, ОС может не принять его из-за снижения производительности. Она может выбрать не продолжать прогон (выполнение). Альтернативно, в худшем случае, может произойти сбой ОС.
Внутри эмулятора ядра подсистема 460 выравнивания данных просматривает любые параметры, которые могут относиться к этим типам данных или могут быть членами структуры. Если подсистема 460 выравнивания данных находит такой тип, она проверяет выравнивание. Если он не выровнен, то подсистема 460 выравнивания данных повторно выделяет буфер (т.е. выделенный буфер) для размещения этого параметра и делает запрос API ОС с использованием этого буфера вместо того, чтобы передавать исходный буфер, переданный для осуществления этого запроса. В случае успешного возврата API ОС, подсистема 460 выравнивания данных копирует выходные данные выделенного буфера в буфер приложения.
В вышеописанном сценарии, установка "заплатки" на параметр может не работать, когда приложения передают некоторый параметр в качестве указателя на буфер, который ОС может интерпретировать как указатель на структуру. В этом случае эмулятор ядра должен конкретно знать, какой API передает этот тип данных. В некоторых случаях ОС может интерпретировать этот буфер как указатель на некоторую структуру, в зависимости от некоторых других параметров, переданных в API. Подсистема 460 выравнивания данных может генерировать некоторые промежуточные команды согласно неким правилам, которые могут быть применимы для любых API или конкретных API, которые нуждаются в согласовании этого выравнивания в эмуляторе ядра.
Правила для индивидуальных данных типа LARGE_INTEGER
Ниже приведен пример LARGE_INTEGER, иллюстрирующий, как можно повторно выровнять тип данных. Команды, генерируемые для этого шаблона, находятся в родной секции, и этот шаблон будет применяться ко всем API, передающим LARGE_INTEGER. Неродной код может передавать LARGE_INTEGER, выровненный по 4 байтам. В родной секции, подсистема 460 выравнивания данных сохраняет копию типа данных и передает этот тип данных, кода производится родной вызов. По окончании своей работы подсистема 460 выравнивания данных копирует результат обратно в клиентское пространство.
TemplateName=LARGE_INTEGER
Locals=
//@ArgName(@ArgType) это LARGE_INTEGER *(может быть не выровнено) @NL
LARGE_INTEGER @ArgVal_Copy; @NL
End=
PreCall=
//FIXUP_LARGE_INTEGER @NL
if ((SIZE_T)@ArgHostName & 0Ч07){
@ArgName=&@ArgVal_Copy;
@ArgVal_Copy=*(UNALIGNED LARGE_INTEGER
*)@ArgHostName;
} else @ArgName=@ArgHostName;
End=
PostCall=
if (@ArgName != ArgHostName)
* (UNALIGNED LARGE_INTEGER *)@ArgHostName =
@ArgVal_Copy;
End=
Правила для некоторых других типов
Невыровненную копию данных можно оптимизировать для некоторого конкретного сценария. Например, неродные приложения (например, 32-разрядные приложения) могут гарантированно иметь данные, выровненные по 4 байтам для некоторых больших данных наподобие LARGE_INTEGER. Хотя, чтобы эмулировать их под родной ОС (например, 64-разрядной ОС), для чего требуется размещение, выровненное по 8 байтам, вместо того, чтобы делать полностью невыровненную копию, для чего может потребоваться выполнение 8 команд, подсистема 460 выравнивания данных может сделать это с помощью двух команд наподобие следующих и также использовать в следующем шаблоне:
*(LONG *)((PBYTE)@ArgValCopy)=*(LONG *)
((PBYTE)@ArgHostName);@NL
*(LONG *)(4+(PBYTE)@ArgValCopy)=*(LONG *)
(4+(PBYTE)@ArgHostName);
@NL
MacroName=PointerIN
NumArgs=0
Begin=
@IfPointerToPtrDep(
@IfIsArray(
//Примечание: @ArgName (@ArgType) это массив указателей на типы, зависимые от указателя. @NL
#error Ошибка: не знаю, как привязать массив указателей к типу, зависимому от указателя. @NL
)
@IfNotIsArray(
//Примечание: @ArgName(@ArgType) это указатель на тип, зависимый от указателя. @NL
if (THE KERNEL EMULATOR_ISPTR(@ArgHostName)) {
@NL
@Indent(
@IfInt64DepUnion(
//Особый случай объединения, имеющего член LARGE_INTEGER @NL
@ArgName = (@ArgType)@ArgVaICopy; @NL
*(LONG*)((PBYTE)@ArgValCopy)=*(LONG *)((PBYTE)@ArgHostName); @NL
*(LONG*)(4+(PBYTE)@ArgValCopy)=*(LONG *)(4+(PBYTE)@ArgHostName); @NL
)
@IfNotInt64DepUnion(
@ArgName=(@ArgType)@ArgVaICopy; @NL
*((@ArgType)@ArgValCopy)=
(@ArgTypeInd)*((@ArgHostTypeInd*)@ArgHostName); @NL
)
)
} @NL
else { @NL
@Indent(
@ArgName=(@ArgType)@ArgHostName; @NL
)
} @NL
)
)
Правила для API
В этом примере API может иметь указатель на другую структуру, заданную другим параметром. И это расширение позволяет "переводить" эту структуру на основе другого параметра, который определяет тип.
TemplateName=ApiNamePassingBadBuffer
Case=(ParamThatDetermineType, THE_REAL_TYPE1)
Case=(ParamThatDetermineType, THE_REAL_TYPE2)
...
Case=(ParamThatDetermineType, THE_REAL_TYPEn)
Locals=
BOOL bRealigned=FALSE;
PVOID *pTempFileInfo;
End=
PreCall=
if((SIZE_T)(FileInformation) & (0Ч07)){
//выделить буфер с правильным выравниванием, чтобы передать Win64 API
pTempFilelnfo = Filelnformation;
Filelnformation = The kernel
emulatorAllocateTemp(Length);
RtlCopyMemory(FileInformation, pTempfileInfo, Length);
bRealigned = TRUE;
}
End=
Begin=
@GenDebugNonPtrDepCases(@ApiName, FileInformationClass)
End=
PostCall=
if(NT_SUCCESS(RetVal) && bRealigned) {
RtlCopyMemory((PVOID)pTempFileInfo,
FileInformation, Length);
}
End=
Правила для копии элемента
При копировании некоторой структуры, подсистема 460 выравнивания данных добавляет невыровненный тэг, чтобы компилятор мог генерировать правильный код и в ходе выполнения это не приводило к каким-либо сбоям выравнивания.
MacroName=StdH2NCopy
NumArgs=0
Begin=
@ArgName=
@IfNotIsBitfield(@UnalignedTag64)(@ArgType)(@ArgHostName); @NL
End=
Иллюстративная вычислительная система и среда
На фиг.6 показан пример подходящей вычислительной среды 900, в которой может быть реализован (полностью или частично) описанный здесь иллюстративный выравниватель данных. Вычислительная среда 900 может использоваться в описанных здесь компьютерных и сетевых архитектурах.
Иллюстративная вычислительная среда 900 является лишь примером вычислительной среды и не призвана как-либо ограничивать объем использования или функциональные возможности компьютерных и сетевых архитектур. Кроме того, вычислительную среду 900 не следует рассматривать как имеющую какую-либо зависимость или требование по отношению к любому или комбинации компонентов, проиллюстрированных в иллюстративной вычислительной среде 900.
Иллюстративный выравниватель данных можно реализовать с помощью многих других сред или конфигураций вычислительной системы общего или специального назначения. Примеры общеизвестных вычислительных систем, сред и/или конфигураций, которые могут быть пригодны для использования, включают в себя, но не исключительно, персональные компьютеры, компьютеры-серверы, тонкие клиенты, толстые клиенты, карманные или портативные устройства, многопроцессорные системы, системы на основе микропроцессора, приставки, программируемую бытовую электронику, сетевые ПК, миникомпьютеры, универсальные компьютеры, распределенные вычислительные среды, которые включают в себя любые из вышеперечисленных систем или устройств, и т.п.
Иллюстративный выравниватель данных может быть описан в общем контексте выполняемых компьютером команд, например, программных модулей, выполняемых компьютером. В целом, программные модули включают в себя процедуры, программы, объекты, компоненты, структуры данных и т.п., которые выполняют конкретные задания или реализуют определенные абстрактные типы данных. Иллюстративный выравниватель данных можно также реализовать в распределенных вычислительных средах, где задания выполняются удаленными обрабатывающими устройствами, связанными посредством сети связи. В распределенной вычислительной среде, программные модули могут размещаться как в локальных, так и в удаленных компьютерных носителях данных.
Вычислительная среда 900 включает в себя вычислительное устройство общего назначения в виде компьютера 902. Компоненты компьютера 902 могут включать в себя, но не исключительно, один или несколько процессоров или блоков 904 обработки, системную память 906 системную шину 908, которая подключает различные компоненты системы, включая процессор 904, к системной памяти 906.
Системная шина 908 представляет одну или более из нескольких типов шинных структур, включая шину памяти или контроллер памяти, периферийную шину, ускоренный графический порт и процессорную или локальную шину, использующую разнообразные шинные архитектуры. Например, такие архитектуры могут включать в себя шину архитектуры промышленного стандарта (ISA), шину микроканальной архитектуры (MCA), шину расширенного стандарта ISA (EISA), локальную шину Ассоциации по стандартам в области видеоэлектроники (VESA) и шину подключений периферийных компонентов (PCI), также именуемую шиной расширения.
Компьютер 902 обычно содержит разнообразные считываемые компьютером носители. Такие среды могут представлять собой любые имеющиеся носители, к которым компьютер 902 может осуществлять доступ, и содержит энергозависимые и энергонезависимые носители, сменные и стационарные носители.
Системная память 906 содержит считываемые компьютером носители в виде энергозависимой памяти, например, оперативной памяти (ОЗУ) 910, и/или энергонезависимой памяти, например, постоянной памяти (ПЗУ) 912. Базовая система ввода/вывода (BIOS) 914, содержащая основные процедуры, которые помогают переносить информацию между элементами компьютера 902, например, при запуске, хранится в ПЗУ 912. ОЗУ 910 обычно содержит данные и/или программные модули, которые непосредственно доступны блоку 904 обработки и/или в данный момент обрабатываются им.
Компьютер 902 может также включать в себя другие сменные/стационарные, энергозависимые/энергонезависимые компьютерные носители данных. В порядке примера, на фиг.6 показан жесткий диск 916 для считывания со стационарного энергонезависимого магнитного носителя (не показан) и записи на него, привод 918 магнитного диска для считывания со сменного энергонезависимого магнитного диска 920 (например, "флоппи-диска") и записи на него и привод 922 оптического диска для считывания со сменного энергонезависимого оптического диска 924, например CD-ROM, DVD-ROM, или других оптических носителей и записи на него. Жесткий диск 916, привод 918 магнитного диска и привод 922 оптического диска подключен к системной шине 908 посредством одного или нескольких интерфейсов 926 носителей данных. Альтернативно, жесткий диск 916, привод 918 магнитного диска и привод 922 оптического диска могут быть подключены к системной шине 908 посредством одного или нескольких интерфейсов (не показаны).
Дисководы и соответствующие считываемые компьютером носители обеспечивают энергонезависимое хранение считываемых компьютером команд, структур данных, программных модулей и других данных для компьютера 902. Хотя в данном примере показаны жесткий диск 916, сменный магнитный диск 920 и сменный оптический диск 924, очевидно, что для реализации иллюстративной вычислительной системы и среды можно также использовать другие типы считываемых компьютером носителей, на которых могут храниться данные, доступные компьютеру, например магнитные кассеты или другие магнитные устройства хранения данных, карты флэш-памяти, CD-ROM, цифровые универсальные диски (DVD) или другие оптические носители данных, блоки оперативной памяти (ОЗУ), блоки постоянной памяти (ПЗУ), электрически стираемое программируемое постоянное запоминающее устройство (ЭСППЗУ) и т.п.
На жестком диске 916, магнитном диске 920, оптическом диске 924, ПЗУ 912 и/или ОЗУ 910 может храниться любое количество программных модулей, включая, например, операционную систему 926, одну или несколько прикладных программ 928, другие программные модули 930 и программные данные 932. Операционная система 926, одна или несколько прикладных программ 928, другие программные модули 930 и программные данные 932 (или некоторые их комбинации) могут включать в себя вариант осуществления перехватчика, преобразователя вызова, преобразователя аргументов, транслятора, менеджера совместно используемой памяти, транслятора команд, транслятора адресов, выравнивателя данных и определителя конечной платформы.
Пользователь может вводить команды и информацию в компьютер 902 через устройства ввода, например клавиатуру 934 и указательное устройство 936 (например, "мышь"). Другие устройства ввода 938 (конкретно не указаны) могут включать в себя микрофон, джойстик, игровую панель, спутниковую антенну, последовательный порт, сканер и/или т.п. Эти и другие устройства ввода подключены к блоку 904 обработки через интерфейсы 940 ввода/вывода, которые подключены к системной шине 908, но могут быть подключены посредством другого интерфейса и шинных структур, например параллельного порта, игрового порта или универсальной последовательной шины (USB).
Монитор 942 или устройство отображения другого типа может также быть подключено к системной шине 908 через интерфейс, например видеоадаптер 944. Помимо монитора 942, другие периферийные устройства вывода могут включать в себя такие компоненты, как громкоговорители (не показаны) и принтер 946, который может быть подключен к компьютеру 902 через интерфейсы 940 ввода/вывода.
Компьютер 902 может работать в сетевой среде с использованием логических соединений с одним или несколькими удаленными компьютерами, например удаленным вычислительным устройством 948. Например, удаленное вычислительное устройство 948 может представлять собой персональный компьютер, портативный компьютер, сервер, маршрутизатор, сетевой компьютер, равноправное устройство или другой общий сетевой узел и т.п. Удаленное вычислительное устройство 948 показано в виде портативного компьютера, который может содержать многие или все элементы и признаки, описанные здесь применительно к компьютеру 902.
Логические соединения между компьютером 902 и удаленным компьютером 948 изображены в виде локальной сети (ЛС) 950 и общей глобальной сети (ГС) 952. Такие сетевые среды обычно используются в офисных, производственных компьютерных сетях, интрасетях и в Интернете.
При реализации в сетевой среде ЛС, компьютер 902 подключен к локальной сети 950 через сетевой интерфейс или адаптер 954. При реализации в сетевой среда ГС, компьютер 902 обычно содержит модем 956 или другие средства установления соединений по глобальной сети 952. Модем 956, который может быть внутренним или внешним по отношению к компьютеру 902, может быть подключен к системной шине 908 через интерфейсы ввода/вывода 940 или другие соответствующие механизмы. Очевидно, что иллюстрируемые сетевые соединения являются иллюстративными, и что можно использовать другие средства установления линии(й) связи между компьютерами 902 и 948.
В сетевой среде, проиллюстрированной с вычислительной средой 900, программные модули, описанные применительно к компьютеру 902, или их часть могут храниться на удаленном запоминающем устройстве. Например, удаленные прикладные программы 958 размещаются в запоминающем устройстве удаленного компьютера 948. В целях иллюстрации, прикладные программы и другие выполнимые программные компоненты, например операционная система, показаны здесь в качестве дискретных блоков, хотя понятно, что такие программы и компоненты размещаются в разные моменты времени в разных компонентах хранения вычислительного устройства 902 и выполняются процессором(ами) данных компьютера.
Выполняемые компьютером команды
Реализацию иллюстративного выравнивателя данных можно описать в общем контексте выполняемых компьютером команд, например, программных модулей, выполняемых одним или несколькими компьютерами или другими устройствами. В общем случае, программные модули включают в себя процедуры, объекты, компоненты, структуры данных и т.д., которые выполняют конкретные задания или реализуют определенные абстрактные типы данных. Обычно, функциональные возможности программных модулей могут быть объединены или распределены, как описано в различных вариантах осуществления.
Иллюстративная операционная среда
На фиг.6 показан пример подходящей операционной среды 900, в которой можно реализовать иллюстративный выравниватель данных. В частности, описанные здесь и иллюстративные выравниватели данных можно реализовать (полностью или частично) любыми программными модулями 928-930 и/или операционной системой 926 согласно фиг.6 или ее частью.
Операционная среда является всего лишь примером подходящей операционной среды и не предназначена сколько-нибудь ограничивать объем или использование функций описанных здесь иллюстративных выравнивателей данных. Другие общеизвестные системы, среды и/или конфигурации, пригодные для использования, включают в себя, но не исключительно, персональные компьютеры (ПК), компьютеры-серверы, карманные или портативные устройства, многопроцессорные системы, системы на основе микропроцессора, программируемую бытовую электронику, беспроводные телефоны и приборы, приспособления общего и специального назначения, специализированные интегральные схемы (СИС, ASIC), сетевые ПК, миникомпьютеры, универсальные компьютеры, распределенные вычислительные среды, которые могут включать в себя любые из вышеперечисленных систем или устройств, и т.п.
Считываемые компьютером носители
Реализация иллюстративного выравнивателя данных может храниться на считываемых компьютером носителях того или иного типа или передаваться по ним. Считываемые компьютером носители могут представлять собой любые имеющиеся носители, к которым компьютер может осуществлять доступ. Для примера, но не в порядке ограничения, считываемый компьютером носитель может представлять собой "компьютерный носитель данных" и "среду передачи данных".
"Компьютерный носитель данных" включает в себя энергозависимые и энергонезависимые, сменные и стационарные носители, реализованные посредством любого способа или технологии для хранения информации, например, считываемых компьютером команд, структур данных, программных модулей или других данных. Считываемые компьютером носители включают в себя, но не исключительно, ОЗУ, ПЗУ, ЭСППЗУ, флэш-память или другую технологию памяти, CD-ROM, цифровые универсальные диски (DVD) или иные оптические носители данных, магнитные кассеты, магнитную ленту, магнитные дисковые носители данных или иные магнитные запоминающие устройства или любой другой носитель, который можно использовать для хранения полезной информации и к которому можно осуществлять доступ с помощью компьютера.
"Среда передачи данных" обычно воплощают считываемые компьютером команды, структуры данных, программные модули или другие данные в виде модулированного сигнала данных, например несущей волны или иного транспортного механизма. Среды передачи данных также включают в себя любые среды доставки информации.
Термин "модулированный сигнал данных" означает сигнал, одна или несколько характеристик которого изменяется так, чтобы кодировать информацию в сигнале. В порядке примера, но не ограничения, среды передачи данных содержат проводные среды, например, проводную сеть или прямое проводное соединение, и беспроводные среды, например, акустические, РЧ, инфракрасные и другие беспроводные среды. Комбинации любых из вышеперечисленных позиций также входят в объем считываемых компьютером сред.
Заключение
Хотя изобретение было описано применительно к структурным особенностям и методологическим этапам, следует понимать, что изобретение, заданное в прилагаемой формуле изобретения, не обязательно ограничивается вышеописанными конкретными особенностями или этапами. Напротив, конкретные особенности и этапы раскрыты как предпочтительные формы реализации заявленного изобретения.
Класс G06F9/455 эмуляция; моделирование программного обеспечения