Register now - Попробуй заработать
Get your 39$ - Получи чек! | FREE web site and $20 cash over & over!

At title page - НаверхReturn at title page - Возврат на основную страницу

Что первично - программа или процессор?

В 26-ом номере Компьютерных Вестей, читая рубрику "Вопрос-ответ", наткнулся на проблему: программы на Паскале не работают на процессорах P6 (Pentium Pro и Pentium II). Когда возникает несовместимость программ и машин, встает извечный вопрос - Что первично? Что менять, а что оставить? Каждый решает его исходя из своих знаний и личных предпочтений. Так некий Яхен П. предлагает несчастному пользователю разобрать свою машину и довести ее до состояния 486-ой.

Мой совет как программиста - не спешите ломать технику. Не Вы один страдаете, и поэтому сия проблема уже решена программным путем. Мой друг, Саша Лупиш - программист Приорбанка, в Интернете нашел пару утилит, решающих эту проблему по разному. Одни исправляют проблемный код непосредственно в запускаемом EXE-файле программы, другие предлагают исправленные модули (в том числе и CRT) - достаточно будет перекомпилировать программу заново и все будет в порядке. В описаниях детально изложено, что и как делается, а также указываются причины тех или иных ошибок.

Пожалуйста, качайте :

Bppatch.zip (184 Kb)

Tppatch.zip (8 Kb)

Но эта проблема - удобный повод поговорить о конфликтах старых программ и быстродействующих процессоров. Напомню, что года полтора назад в ComputerWeekly подробно обсуждался конфликт программ Clipper и процессоров AMD K6. В конце концов, выяснилось, что в программах компилятор подставляет код в виде пустого цикла со счетчиком для оценки скорости машины, а процессор AMD K6, используя метод опережающего выполнения, распознает этот цикл и проходит его за один такт, подставляя в счетчик максимальное значение. Вот тут-то программа и накрывается.

В книге "Использование Turbo Assembler . . ." (1993 г., издательство "Диалектика") приводится пример кода по работе с портами ввода/вывода: "Для инициализации принтера необходимо послать в порт 37Ah значение 12, затем подождать некоторое время и послать в тот же порт значение 8." Так вот, выражение "подождать некоторое время" означает в том примере пустой цикл со счетчиком:

mov CX, 1000

        Delay: dec CX

jnz Delay

Этот номер еще пройдет на машинах типа 286-386, но на Пентиуме или AMD K6 - маловероятно.

Т. к. программирование на Assembler используется в основном при написании драйверов, то этим объясняется проблемы многих драйверов на быстрых процессорах.

Использование в программировании таких примеров чревато ошибками. Тут уже на компилятор бочки не покатишь - все реализуется исключительно самими программистами.

Думаю, что с появлением на рынке Merced и AMD Athlon, полезет череда новых конфликтов. И вряд ли у кого-нибудь возникнет желание низвести свою супермашину до уровня "четверки", лишь для того, чтобы запустить одну старую программу из десятка новых. Появятся новые решения - напишу.

А еще по поводу сетей на 100 Мбит в том же номере Вестей. Скорость передачи файлов пользователи измеряли в Мегабайтах в секунду. Но 100 Мбит = 12.5 Мб. Кроме того, при передаче данных в сети используются протоколы (например IPX, TCP/IP), в которых часть пропускной способности используется для передачи вспомогательной информации - сетевых адресов, ответов, размеров передаваемых данных и пр.

Поэтому в зависимости от протокола общая пропускная способность составит 9-10 Мб/с. А тут уже все будет зависеть от конфигурации сети. Если сеть одноранговая, либо это отдельный сегмент, то скорость внутри этого сегмента в среднем составит 10 Мб / (кол-во станций - 1). Для трех машин = 5 Мбайт/с, а для 5-ти = 2.5 Мб/с.

По поводу сетевых плат. При слабой загрузке сети скорость передачи данных будет близкой к максимальной на картах любых производителей, т. к. все они работают по единым стандартам. Одним из главных критериев карты является коэффициент загрузки центрального процессора при ее работе.

По правде говоря, на это влияет какие функции реализованы аппаратно, а какие обрабатываются процессором. Фирменные карты разработаны на более дорогих чипсетах и меньше загружают процессор, чего не скажешь о дешевых. Поэтому на дешевых сетевых картах, в ситуации когда машина загружена своими программами, а на нее обрушивается лавина данных из сети, многие пакеты будут теряться, что приведет повторным передачам и паузам. Естественно, тогда скорость работы в сети с этой машиной упадет значительно.

Более мощный процессор поможет, но мало - в ОС Windows трудности с режимами реального времени, и функции, эмулируемые процессором будут все равно выполняться непериодически и терять пакеты данных. Посему - учитывайте свои реальные задачи при создании сетей и покупке оборудования.  

Victor Makovchik

At title page - НаверхReturn at title page - Возврат на основную страницу