Pull to refresh

Comments 33

Вот как бы не ругали Майкрософт, а их политика обратной совместимости достойна уважениея. Удалили лы бы все эти пережитки прошлого, а нет, поддерживают.

Лично видел софт, с самописным менеджером памяти, основанном на Global* функциях, который динапически свопит все на диск, чтобы не превышать установленного лимита на объем используемой памяти. Написан в конце 80х, работает до сих пор как ни в чем не бывало.

Ну и о эпичном фиксе для SimCity, которая имела привычку использовать память после вызова GlobalFree наверное все слышали.
Ну и о эпичном фиксе для SimCity, которая имела привычку использовать память после вызова GlobalFree наверное все слышали.

А можете поподробнее рассказать? Поисковики по словам SimCity и GlobalFree только эту статью на хабре показывают.
с интересом прочитал, спасибо =)
Joel Spolsky:
I first heard about this from one of the developers of the hit game SimCity, who told me that there was a critical bug in his application: it used memory right after freeing it, a major no-no that happened to work OK on DOS but would not work under Windows where memory that is freed is likely to be snatched up by another running application right away. The testers on the Windows team were going through various popular applications, testing them to make sure they worked OK, but SimCity kept crashing. They reported this to the Windows developers, who disassembled SimCity, stepped through it in a debugger, found the bug, and added special code that checked if SimCity was running, and if it did, ran the memory allocator in a special mode in which you could still use memory after freeing it.
Попытаюсь перевести этот фрагмент менее криво, чем их Официальный Переводчик:
Об этом случае я узнал от одного из разработчиков SimCity: в их коде был баг, из-за которого программа обращалась к блокам памяти сразу же после их освобождения. Понятно, что так делать нельзя, но под DOS это работало, потому что некому было использовать только что освобождённую память под что-то другое: SimCity была единственной в системе запущенной программой.

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

Разработчики Windows принялись отлаживать SimCity, чтоб определить причину падений, и нашли в ней этот баг. Тогда они добавили в Windows специальный код, который проверял, запущена ли SimCity, и если запущена — то изменял алгоритм выделения памяти так, чтобы только что освобождённую память можно было продолжать использовать.
Ну и заодно упомяну свой позапрошлогодний перевод «Байки о несовместимых приложениях» — habrahabr.ru/post/103598/
Не могли бы рассказать, что за софт?
Мне кажется эта совместимость со старьём — палка о двух концах.
С одной стороны — поддержка старого софта очень важна для бизнеса, с другой стороны все остальные тащат и обновляют код, который занимается этой поддержкой и который даром не нужен.

Грубо говоря, зачем мне в 21 веке код поддержки СимСити?

Меня удивляет, что MS не сделала из вин7 рубежа и оставила старьё и его поддержку в своеобразном отдельном режиме, например в том же режиме совместимости.

Кому нужно включали бы его.

Добавьте шутки-прибаутки в коде винды и офиса и поражает сколько «лишнего» в продуктах MS =(
Зря Вы так… Во-первых, этот код кем-то написан, отлажен, кому-то оплачен — как же такое дорогое сокровище выбросить? :) А, во-вторых, чем же забить место в каталоге с ОС? А не забьешь — скажут, мол, плохая система, раз такая маленькая. Юзер, так сказать, должен видеть, что за свои деньги получил много хоть чего-то! Шутка.

А если серьезно, то в 8-ке вроде как пытаются сделать шаг в сторону от наследия (хотя для юзера это выглядит как просто уход от привычного десктопа). Пытаются, да не получается, ибо без поддержки наследственности новые компы с предустановленной системой никто не возьмет, если хоть чем-то из старого добра пользуется, да и софта под новые API не всегда много. Как ни крути, прибегает маркетинг и «делает мозг» разработке, мол, верните привычное покупателям!

Хотя в 7-ке (Pro и выше) уже были попытки вынести XP «за скобки» — называется XP Mode. Загружаете себе VM с копией XP, и вполне прозрачно в смысле интеграции и лицензионно-чисто работаете в ней. Скажу по опыту — спасает порой!
Майкрософт были бы не Майкрософт, если бы не сделали этот режим с такими условиями:
— только для Ultimate-версии Windows 7
— качать «виртуализатор» нужно отдельно с сайта MS и активировать отдельно
— ставится голая XP. о вирусах и настройке заботиться нужно самому.
— потратить нужно минимум минут 40 времени, чтобы оно заработало

PS: сам пользуюсь для подключения книжки REB 1100, которую иначе с Win 7 64 не подружить.
UFO just landed and posted this here
аналог NumLock calculator я себе написал сам — как раз с возможностью считать выражения в строке. Хоть ему и не хватает продвинутых функций, но с 2003го года переписывать его не приходилось.
>>он линукс тому пример — регулярно ломают совместимость и бинарную и апишную, и что

Ломают только на уровне ядра, а юзерспейс АПИ остается неизменным и польностью обратно совместимым. У Линуса на этот счет очень четкая позиция «Те, кто считает, что красивый код важнее бинарной совместимости — идиоты»
>> Интересно, всегдашние холиворщики «это была графическая оболочка, а не операционная система» в курсе об этих её необычайных способностях?

Наверное потому что в это же время была OS/2, которая могла делать всё тоже самое без костылей? :)
В какое в то же? OS/2 1.0 вышла в декабре 1987, а Windows 1.0 вышла двумя годами раньше. При том, что обе разрабатывались Microsoft.
Os/2 никогда не умела ничего подобного поскольку требует для своей работы защищенный режим. речь же идет про реальный.

Графической оболочкой вплоть до w98 называли в силу того, что работать без ДОС они не могли.
НО, имели в себе все механизмы для того что бы в будущем от этой зависимости отказаться.
У программистов просто не хватало времени.

Оболочкой она была потому, что любое приложение, включая любое ДОС приложение реального режима (даже не протектед, лол) могла пнуть винду-оболочку под зад. Поменять все вектора прерываний, насильно выпилить винду из оперативы — вот это всё. Такое просто недопустимо для операционной системы.
Эдак из операционных систем исключаются CP/M, DOS и даже MacOS Classic.
Странный критерий какой-то.
DOS — ОС, а Win9x — это оболочка над ОС, которой являлся DOS. Частично верное утверждение, ибо Win9x одновременно был и оболочкой для реального 16-битного режима, в котором вращалось ядро, а это 16-битное ядро позволяло крутить 32-битную приблуду, которая была как ОС для защищённого режима.
Ядро Win9x 32-битное. Virtual Machine Manager называется. В наиболее распространенном случае (когда драйверов реального режима нет) DOS служит исключительно как загрузчик Win9x. 16-битного кода, унаследованного от Win 3.x, в Win 9x много, но не в ядре. Вот тут Рэймонд Чен подробно разбирает, для чего DOS используется в Win9x: blogs.msdn.com/b/oldnewthing/archive/2007/12/24/6849530.aspx
Так в этой статье и сказано, что часть ядра вращается в 16-битном режиме.
А ещё можно было запустить Win9x с флешки и любая программа будет неявно вызывать реальные методы для чтения с флешки, даже если сама Win9x не знает ничего про USB.
Это не часть ядра. Это прослойка для вызова драйверов реального режима, для той же флэшки например, да. Если драйверов реального режима нет, то все ядро всегда работает в 32-битном режиме.
Причём можно было даже запустить резидента ДО винды и он бы виндой рулит во все щели. А можно и после с тем же эффектов. Так-то!
По-моему, там было дело все же скорее не во времени, а как раз-таки в максимальной совместимости с DOS, вплоть до некоторых драйверов.
1) вплоть до windows millenium
2) защищённый режим появился в 1982 году (80286), а нормальный защищённый режим (с управлением страницами) — в 1985.
в 1996 году вышла Windows NT 4.0 — с нормальными механизмами защиты, не основанная на DOS.
Зависимость от DOS тянули до 1999 (ME). Времени, говорите не было?
Да, не хватало времени. Только не у программистов MS, а у всех остальных. Тот же Warcraft 2 вышёл после Win95, но был досовским приложением (правда, нереального режима — с 4гб ОЗУ). А уж дикое количество устройств, для которых были только досовские драйвера и обязывали использовать ОС-оболочку с 16-битным ядром.
Во-первых, не стоит думать, что i386 стал применяться в ПК сразу же, как только вышел. Поначалу это был очень high-end продукт — любому нормальному домашнему пользователю и 16МБ было за глаза и больше.
Windows же ориентировалась именно на рынок ПК с самого начала и до ветки NT.

Во-вторых, до Windows ME тянулась не «зависимость от DOS», а совместимость с драйверами для DOS / Win16 и с программами, привыкшими копаться в кишках ОС, сохраняемая намеренно и достаточно дорогой ценой.

Тем более, уже ко времени Windows 98, MS-DOS не существовал как продукт. Какая же может быть зависимость от того, чего нет?
Оверлейный линкер для DOS напомнил линковщик из ОС RT11 (которая на PDP-11 ну или ДВК крутилась). Я работал на RT11FB — там было что-то около 56 килобайт памяти, и когда программа в память не лезла, то объектные модули линковались как оверлейные и в процессе работы программы подгружались с диска. Единственно — там приходилось довольно кропотливо планировать приложение, чтобы минимизировать подгрузку овелеев и тщательно планировать где какие данные хранятся и т.д. Многозадачность там тоже была, но невытесняющая — ну то есть можно было запустить приложение в фоновом (background) режиме. Я этим пользовался для автоматизации эксперимента — установка снимала данные через КАМАК, и в то же самое время можно было обрабатывать уже снятые данные. В конце восьмидесятых / начале девяностых это выглядело как чудо (в лабораториях физтеха IBM совместимые компьютеры тогда не были так распространены).
UFO just landed and posted this here
Когда защищённый режим только появился, он был доступен лишь немногим мажорам, раскошелившимся на новый мощный компьютер.
А Windows позволяла разработчикам создавать программы, которые одинаково работали бы и в реальном режиме (пользуясь перечисленными в посте «костылями»), и в защищённом (пользуясь всеми преимуществами нового процессора). Именно эта фича — «написано однажды, работает везде» — и была основным козырем первых версий Windows, когда в ходу был целый зоопарк несовместимых компьютеров и внешних устройств.
UFO just landed and posted this here
Sign up to leave a comment.

Articles

Change theme settings