| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 | ||
Это не досовский выкрутасы, а виндовские. Дело в том, что не смотря на то, что М$ заявила о полном отказе от 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 | ||||
Так V86 и есть часть многозадачности. Т.е. переключение в этот режим = переключению задачи. Сам я не уверен, но вроде так.
Ключевое слово -- толковый. Отсюда вывод 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 Интересная информация. Спасибо Только хочу заметить, что не все досовские программы тормозят, а только определённые, видимо использующие какие-то не совсем стандартные фичи. Причём точно помню, что то, что на одном компе у меня тормозило -- на другом работало нормально. |
| Автор: ToshaCh 1.12.2005, 20:32 |
| Дрон Тебе тоже спасибо. Я не часто использую Винду. Всё больше Юникс. Поэтому в связи с этим топиком понял, что я многое забыл. Надо подтянуть. Ещё раз спасибо. В первую очередь автору топика. |
| Автор: StayAtHome 2.12.2005, 17:23 | ||
По теме вороса ;)
Прога мной использутся часто, помогает в 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 если я ничего не напутал |
| Автор: 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 | ||
нифига не вышло но ведь не все досовские проги так загружают процы |
| Автор: StayAtHome 15.12.2005, 02:58 |
| Кхм... А мой способ не подходит? (см. пост выше) |