Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Windows > NTVDM - 98% процессора


Автор: asdf 30.11.2005, 22:05
когда запущен Turbo C++

... как исправить?

Автор: Akella 1.12.2005, 09:25
это, досовские выкрутасы
VDM - Virtual DOS Machine

Автор: ToshaCh 1.12.2005, 10:45
Цитата(dsergey @ 1.12.2005, 09:25)
это, досовские выкрутасы
VDM - Virtual DOS Machine


Это не досовский выкрутасы, а виндовские. Дело в том, что не смотря на то, что М$ заявила о полном отказе от 16 разрядной подсистемы в своих системах, она этого не сделала. Т.е. так называемая VDM не эмулирует работу процессора i8086 - i80286, а использует аппаратную эмуляцию, т.к. называемый "режим вирутального 86 процессора" (это фича процессора). По сути когда вы запускаете досовскую программу по виндой, ваш проц переходит в этот режим и и ваш PIV 3200 мГц работает как Intel 8086 (правда не всё время, как я понимаю). Отсюда и такая борода с загрузкой процессора.

Автор: Дрон 1.12.2005, 11:36
ToshaCh
Хмм... Откуда информация?
По-моему, в NT-серии всё-таки чисто программная эмуляция ДОС -- и как раз из-за этого и возникают косяки, т.к. некоторые старые программы сделаны не совсем корректно.

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

Автор: ToshaCh 1.12.2005, 16:05
Дрон,
Информация из головы и лекций вузовских. Я не претендую на истину, но посуди сам. Если поставить толковый эмулятор на комп. Скажем VMWare или DOSBox, то загрузка процессора будет ничтожна мала (в фоне вообще не будет). А вот когда у тебя апаратная эмуляция 86 процессора, то ты заставляешь систему постоянно переключаться из одного режима в другой, а это занимает немалое время. А без переключения никак, иначе прощай многозадачность и Win32. Собственно, как мне кажется это переключение и даёт 98% загрузки. Поскольку это относительно длительный процесс (переключение).

Автор: Дрон 1.12.2005, 16:27
Цитата(ToshaCh @ 1.12.2005, 16:05)
А вот когда у тебя апаратная эмуляция 86 процессора, то ты заставляешь систему постоянно переключаться из одного режима в другой, а это занимает немалое время. А без переключения никак, иначе прощай многозадачность и Win32

Так V86 и есть часть многозадачности. Т.е. переключение в этот режим = переключению задачи.
Сам я не уверен, но вроде так.

Цитата(ToshaCh @ 1.12.2005, 16:05)
Если поставить толковый эмулятор

Ключевое слово -- толковый.
Отсюда вывод NTVDM -- кривоват. Плюс VMWare эмулирует рабоу системы целиком, что VDM позволить себе не может.

Автор: ToshaCh 1.12.2005, 17:01
Цитата
Т.е. переключение в этот режим = переключению задачи.

А ты прав. Действительно переключение на 16 разрядку идёт по средствам смены TSS (сегмент памяти задачи). Просто здесь специальные сегменты. Так-что мои рассуждения не верны. Но кстати это займёт значительно больше тактов, чем смена двух 32 разрядных сегментов.

Но ответ что VDM просто криво написам слишком прост, чтобы быть правдой.

Я сейчас поднял старые материалы (давно мы Организацию ЭВМ проходили). Так вот фича там в следущем. Виртуальный режим это совместная работа двух компонент.
1. Аппаратура обеспечивает корректную смену задач, выполнение ДОСовской программы и корректную адресацию памяти.
2. Праграмная часть. Которая назвается "Виртуальный монитор" занимается цитирую:
"... управляет внешними интерфейсами виртуальной машины вводом/выводом, прерываниями и исключениями) таким образом, чтобы они были согласованы с внешней средой, в которой выполняется виртуальная машина..."

Наверное дело здесь в том что "виртуальный монитор" по определению жрёт много. Ведь ему надо на любое событие в системе прореагировать следущим образом:
1. Запомнить чего произошло (например внешнее прерывание).
2. Преобразовать информацию (для 16 разрядной системе).
3. Подгрузить ДОСовскую задачу.
4. Передать ей информацию (то же прерывание нужно эмулировать как-то)
5. Дать задаче поработать.
Почти такая же процедура на выход. Этож какой перерасход, ведь событий в системе дофига и не все нужны этой Досовской задач.
А настоящие эмуляторы не заморачиваются так сильно, поскольку эмулируют всё сразу, и поэтому нет проблем например с эмуляцией прерывания. Кажется так.

Автор: Дрон 1.12.2005, 17:08
ToshaCh
Интересная информация. Спасибо smile

Только хочу заметить, что не все досовские программы тормозят, а только определённые, видимо использующие какие-то не совсем стандартные фичи.

Причём точно помню, что то, что на одном компе у меня тормозило -- на другом работало нормально.

Автор: ToshaCh 1.12.2005, 20:32
Дрон
Тебе тоже спасибо. Я не часто использую Винду. Всё больше Юникс. Поэтому в связи с этим топиком понял, что я многое забыл. Надо подтянуть. Ещё раз спасибо. В первую очередь автору топика. smile

Автор: StayAtHome 2.12.2005, 17:23
По теме вороса ;)
Цитата
RESFREE.COM v3.0 - очень помогает уменьшить загрузку ЦП в многозадачных ОС (OS/2, Windows NT/2000) при работе старых программ (в т.ч. ФоксПро и его приложений). Для Win'NT/2000 запускается строкой в autoexec.nt :
resfree.com 10
При этом, например, у меня на PIII-800/256 под Win2k Prof, загрузка процессора при работе Фокса в фоновом режиме уменьшилась с ~99%(!!!) практически до нуля. Позволяет оптимально (играя параметром в командной строке) настроиться под конкретную систему.

"Пpогpамма пpи pаботе отслеживает обpащение к клавиатуpе и в случае если пpоцесс злоупотpебляет вызовом int 16h, освобождает квант пpоцессоpного вpемени, pанее затpачивавшийся на бесполезный пpостой и обpаботку ненажатой клавиши. Этим гpешат все пpогpаммы, не имеющие встpоенной поддеpжки отдачи квантов и специально не pасчитанные на использование под многозадачными системами. То есть ОЧЕHЬ многие..."
freeware ©Андрей Лукичев

Прога мной использутся часто, помогает в 90% случаев
Прямая ссылка: http://www.foxpopuli.narod.ru/utils/resfree.rar (осторожно, "Народ.Ру")
Ее же я прицепил к этому посту.

Автор: Akella 5.12.2005, 13:26
asdf, опиши своё железо, особенно проц, какой, интересно

Автор: asdf 5.12.2005, 13:48
dsergey

256 ram
amd athlon thunderbird 900


если я ничего не напутал smile

Автор: Akella 8.12.2005, 11:38
товарищи, а у кого пентюхи, тоже такая загрузка, а?

Автор: StayAtHome 9.12.2005, 02:54
У меня NTVDM успешно грузил P4 3GHz

Автор: Akella 12.12.2005, 09:28
на Celeron D 2.8, загружаю программу, написанную на VisualFox`e - тоже загрузка нормальная проца, хотя приложение вро как под винду.

Можно решить другим способом: в свойствах ярлыка есть закладка "Совместимость", мож с ней поковыряться, попробую - сообщу

Автор: p0s0l 12.12.2005, 10:25
Имхо, досовская прога в большинстве случаев должна сжирать всё свободное время ЦПУ, т.к. в отличие от виндовых программ она сделана так, что всё время "активна", т.е. например, даже если ничего не происходит на экране, на самом деле, программа крутится в пустом цикле, например, ожидая нажатия кнопки... Виндовые же потоки постоянно сами переходят в состояния спячек, ожиданий (напр., ожидание завершения операции I/O, или ожидание сообщения), в это время поток не получает процессорного времени. Напишите на любом языке бесконечный цикл (напр., в дельфи, while true do; ) - получите аналогичный результат (только досовая прога в цикле, например, проверяет, нажалась ли какая-нибудь кнопка)...
(ИМХО)

Автор: ToshaCh 13.12.2005, 12:12
Вот в этом то и вопрос, что дура Виндуз отдаёт слишком большой квант процеессорного времени на досовскую задачу.

Автор: Akella 14.12.2005, 10:49
Цитата(dsergey @ 12.12.2005, 09:28)
Можно решить другим способом: в свойствах ярлыка есть закладка "Совместимость", мож с ней поковыряться, попробую - сообщу

нифига не вышло

но ведь не все досовские проги так загружают процы

Автор: StayAtHome 15.12.2005, 02:58
Кхм... А мой способ не подходит? (см. пост выше)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)