Здравствуйте, i_chay.
Вы писали 31 декабря 2008 г., 9:09:37:
> Егор пишет:
>> плюс виртуальная
>> машина должна работать в системе реального времени,
> По моему мнению, хорошо было бы уточнить, в каком смысле вы используете термин
> "система реального времени".
> Системы реального времени -- это определенный класс операционных систем, которые,
> в строгом смысле, определяются как системы с точно заданным временем реакции
> на события.
Именно в этом смысле.
> Если вы имели в виду, что таймер виртуальной машины должен отмерять промежутки
> времени, соответствующие реальному времени (т.е. тому времени в котором вы
существуете),
> то для этой цели понятие "система реального времени" в контексте исходной темы
> не является удачным.
Нет, я имел в виду не столько таймер, сколько "равную
производительность в единицу времени". Поясню. В реальном компьютере
время выполнения команд, лучше сказать, некоторых действий, например,
процессорная команда или обращение к устройству, в общем-то, заранее
известно, пусть и не с точностью до такта. В виртуальной же машине
это, в общем плане, нельзя предсказать с такой точностью. Процессорная
команда в ВМ, поскольку процессор не эмулирулируется, будет
выполняться с той же скоростью, что и на хостовом компьютере, а вот
обращение к чипсету, к видеокарте, к диску, к сети и пр. - значительно
дольше, т.к. эти вещи эмулируются. Плюс к тому сама ВМ в хостовой ОС
работает как обычное приложение, кроме неё работают ещё и другие
приложения, т.е. ВМ делит с ними процессорное время. Таким образом,
время выполнения обращения к устройству будет зависеть не только от
скорости эмуляции этого устройства, но и от процессорного времени,
выделенного хостовой ОС для ВМ, и ещё от некоторых факторов, связанных
с эмуляцией, которые я опущу для простоты. И это время выполнения,
очевидно, не может быть строго постоянным от раза к разу, более того,
оно, в общем случае, не может быть заранее оценено, хотя бы потому что
мы не знаем, сколько процессорного времени отведёт хостовая ОС для ВМ
в данный момент.
Однако все эти рассуждения я веду не просто так, а к конкретной
проблеме, а именно, к синтезу звука через динамик PC (т.е. не через
звуковую карту). Обычно программы, которые используют динамик,
предварительно измеряют производительность (скорость) процессора, а
затем подают команды в динамик, соотносясь с этой вычисленной
производительностью. Заметим, что речь идёт про старые досовские
программы. Так вот, при вычислении производительности обычно
используется только процессор, который в ВМ работает наиболее быстро.
Далее, при работе программы с устройствами (с тем же динамиком),
скорость выполнения падает, и мы вместо нормального звука слышим
что-то непотребное. С точки зрения программы же оказывается, что после
того, как она вычислила производительность, частота процессора упала,
но она на этот подвох никак не рассчитывает, поэтому звук и плывёт.
Тот же самый эффект с этой программой может быть достигнут на старых
компьютерах (286, 386, 486), имеющих кнопку "турбо", которая
переключает частоту. Если в тот момент, когда программа вычисляет
скорость процессора, кнопка "турбо" находится в положении максимальной
частоты процессора, а потом, когда программа уже начала выводить звук
в динамик, нажать "турбо" и переключить частоту на минимум, мы
заметим, что звук стал выводиться тоже медленнее.
Более продвинутые программы для измерения скорости процессора
пользовались таймером, однако и их в виртуальной машине иногда
поджидают подводные камни, хотя в целом, надо сказать, такие программы
работают намного лучше. Дело в том, что в ВМ, если её сравнивать с
упомянутыми старыми компами с кнопкой "турбо", ситуация обстоит, грубо
говоря, так, как будто мы эту кнопку "турбо" переключаем с частотой
несколько сот раз в секунду, причём, под частотой понимается средняя
частота за некий период времени.
Если бы ВМ работала как система реального времени, таких проблем бы не
было.
Хотя, эти проблемы, согласитесь, несколько специфические, во-первых,
прежде всего, потому что рассматриваются старые программы для старых
ОС (для доса), и иногда написанные без учёта того, что частота
процессора может изменяться со временем. Тут нельзя винить
программистов, потому что в те времена такие вещи было сложно даже
предполагать.
В современном же мире, когда ВМ используется для запуска современных
ОС и современных программ, вышеописанные трудности, согласитесь, яйца
выеденного не стоят, и поэтому ВМ функционируют так, как они
функционируют, потому что так они работают быстрее. Тем более, что VPC
additions, будучи установленными в гостевую ОС, позволяют решить часть
трудностей.
> К системам реального времени относятся, например, Windows CE и Symbian (хотя
> ОСРВ насчитывается не один десяток).
> Нет ли у вас желания запустить Ms Virtual PC на этих системах? :-)
Наверное, было бы столь же интересно запустить ОС реального времени на
VPC :-). Хотя бы дос реального времени или QNX.