Иван Савватеев @SIISII
Микроконтроллеры, цифровая электроника, ОС…
Information
- Rating
- 1,786-th
- Location
- Солнечногорск, Москва и Московская обл., Россия
- Date of birth
- Registered
- Activity
Specialization
Embedded Software Engineer
Lead
Микроконтроллеры, цифровая электроника, ОС…
По-другому, по-другому. В СССР многое купить было невозможно вообще, от слова совсем. С голоду, есно, давно никто не пух, но вопрос про "длинное, зелёное, колбасой пахнет" не просто так появился. Ну а с электроникой... Может, в Москве в паре магазинов и можно было купить банальную 155-ю серию, а в провинции можно было только украсть на каком-нибудь предприятии -- если там был ВЦ и микросхемы имелись в ЗИПе. Ну а на "загнивающем и приспосабливающемся" подобное продавалось свободно, причём в свою мухосрановку-на-аляске можно было и по почте заказать. Да, нужны деньги -- ну так заработай, кто не даёт? На феррари, может, и не заработаешь, а на машину не хуже жигуля -- вполне. (А попробуй этот жигуль в СССР купить, даже без учёта стоимости).
Потому что, когда ресурсов было мало, разрабатывали, условно говоря, инженеры для инженеров -- чтоб работало и нормально выполняло свои задачи. А сейчас ресурсов полно, поэтому заведуют маркетолухи -- быстрота выхода на рынок, модные технологии, свистоперделки и всё такое.
Хотя, справедливости ради, немало задач, легко решаемых современными ПК, полвека назад нельзя было решить ни на каком суперкомпьютере. Но, когда говорим о ресурсах, мы говорим, всё же, о принципиально одних и тех же задачах...
Нифига она не справлялась. Отставание только нарастало, и это неизбежно, если постоянно заниматься копированием. Копирование -- а точней, заимствование идей -- полезно, чтоб преодолеть имеющийся разрыв, но оно должно совмещаться с освоением и осмыслением копированного и с развитием своего -- пускай и на его базе. А когда копирование превращается в самоцель... ну, имеем, что имеем.
Вообще, микроконтроллеры на основе Z80 до сих пор производятся. А то, что конкретная фирма дала дубу -- дык на то он и рынок. Мелкие конторы могут вылететь в трубу и от неблагоприятного сочетания обстоятельств в определённое время и определённом месте (грубо говоря, произошло землетрясение, разрушило тебя -- а у тебя ресурсов нет, чтоб восстановиться). Но все крупные фирмы, что обанкротились или были поглощены, погубило бездарное руководство -- эффективные менеджеры, в общем, которые стали рулить после естественного отхода от дел отцов-основателей.
Если собирать самому, то и сейчас вполне можно собрать практически любой их советских бытовых компов: основная масса компонентов на складах ещё имеется. Наибольшая проблема с БКшками или там с ДВК (ну, последние бытовыми никогда не были), но вот всё, что на 8080 или 6502 -- вполне.
Но можно вполне корректно сравнивать разработки разных времён, но на одном техническом уровне.
Ошибаетесь по всем пунктам.
Во-первых, СССР отставал всегда, и наша хвалёная БЭСМ-6 -- типа, "самая быстрая ЭВМ в Европе", как её у нас называли, -- уступала по производительности машинкам Крэя, выпущенным на пару-тройку лет раньше, до 10 (десяти!) раз.
Во-вторых, "цельнотянутое копирование" -- это больше про вторую половину 70-х и 80-е, когда стали тянуть всё подряд (тот же 8080, 8086, ещё кучу всего). Изначально же, когда было принято решение делать свои машины на основе ИБМовской Системы 360 (будущие ЕС ЭВМ), а несколько позже -- и минимашины (HP2100 и PDP-11), то брали лишь архитектуру -- т.е. систему команд и тому подобные вещи, но разработка и реализация были свои. Но практически параллельно кучу бабла вбухали в Эльбрусы (первый, затем второй -- 70-80-е годы), которые собрали все архитектурно неудачные идеи, в итоге полностью провалившиеся (как и на Западе -- подобные идеи, например, продвигала Barroughs, ну и где сия контора с её машинами теперь?) А альтернативы предложить никто не мог, поскольку нужно финансирование -- а оно чисто государственное, в отличие от Запада, где фирмы имели собственные средства и рисковали на них сами.
Кстати говоря, "скоммунизженная" архитектура Системы 360 жива и здравствует до сих пор: современные мэйнфреймы z/Architecture -- это результат её 60-летнего развития.
Производительность атмеги во много раз выше как за счёт тактовой частоты, так и конвейерной организации процессора. Т.е. 8-МГц AVRка на линейных участках реально делает 8 млн оп/с, ну а 8080 на своих 2,5 МГц -- только 625 тысяч, причём лишь самых быстрых операций, многие ещё медленнее. Плюс, система команд у AVRок намного приятней :)
Неверно. Население США было больше, хотя не сказать, чтоб очень сильно (навскидку: 300 млн в США против 275 в СССР).
Но по существу вопроса, в общем и целом, согласен. СССР погубили не происки масонов или предатели в партии, а сама ложная "коммунистическая" идеология, из которой вытекало всё остальное -- в частности, отсутствие частной собственности и конкуренции с полной государственной монополией на всё. Хотя, замечу, современный Запад во многом похож на поздний СССР, только со своими нюансами: монополизация в большинстве сфер серьёзного производства, но не из-за "руководящей и направляющей", а из-за юридической казуистики (сплошные патенты и всё такое прочее), "единственно верная идеология" (только либерастия с ЛГБТ+ вместо коммунизма) и т.д. Впрочем, "конец истории" бывает только у весьма недалёких людей, так что поживём -- увидим, что будет и там, и здесь...
А компиляторы и стандартные библиотеки что, не программисты пишут?
Нестандартные расширения языка -- те самые intrinsic. Появляются как раз из-за того, что на чистых сях многие очень уж низкоуровневые вещи сделать нельзя.
Переключения контекста в стандартной библиотеке нет, если на то пошло. Та многопоточность, что есть, опирается на соответствующие функции API операционной системы, т.е. не сама переключает -- этим занимается ОС и, естественно, используя ассемблерный код.
А ещё дифференциальный каскад -- основа ЭСЛ, самой быстрой цифровой схемотехники.
На самом деле, могут быть даже формально независимые вещи, которые, однако, есть смысл писать на ассемблере ради производительности. Скажем, всякие перекодировки между UTF-8/16/32, пересылки строк, шифрование DES/AES и ряд других операций современные IBMовские мэйнфреймы умеют делать одной командой; соответственно, реализующие их подпрограммы для эффективности должны опираться не на "обычную" систему команд, используемую компилятором, а прямо быть написаны на ассемблере (ну или оформлены внутри компилятора как intrinsic, что, в первом приближении, то же самое, только переносит ассемблерный код из библиотеки в компилятор).
Оригинальный компилятор Ричи не был первым компилятором в истории. В частности, на той же самой PDP-11 с теми же самыми ограничениями существовали DECовские компиляторы: Фортран, Паскаль, Кобол и Бейсик (был ещё Бейсик-интерпретатор с совсем другим диалектом). Так вот, все эти компиляторы выдавали сразу объектные файлы. Компилятор Паскаля мог, если ему указать соответствующий параметр, выдать и ассемблерный текст (насчёт остальных не знаю -- я использовал Паскаль и ассемблер). Точно так же обстоит дело и с другими архитектурами.
В интеловских процессорах, как и в большинстве других архитектур, приёмник -- первый операнд. Последний в роли приёмника -- у DECовских машин, что весьма и весьма неудобно (например, путаница в SUB и CMP: первая вычитает справа налево, а вторая -- слева направо). Просто те клоуны, которые сделали древний gas, для чего-то решили натянуть дурацкий DECовский синтаксис на другую (интеловскую) систему команд.
Причём "исторически" -- в GGC и CLANG. Древние трансляторы транслировали сразу в машинный код -- процы и без того хилые были, чтобы выполнять две трансляции вместо одной.
"всё остальное" на сях не сделаешь: всегда остаются вещи, которые можно сделать только на ассемблере -- в частности, переключение контекста.
Чтобы разобраться, "как на самом деле работают программы на уровне процессора и ОС", потребуется не одна статейка на Хабре, а пара толстенных талмудов, как минимум. Ну а статья -- лишь беглый и очень поверхностный обзор всего этого, если исходить из заявленного в заголовке.
И, кстати, неверно сказать, что виртуальная память создаёт для программы впечатление, что ей (программе) доступна вся имеющаяся на машине память. Виртуальная память просто полностью "отвязывает" программу от реально имеющейся памяти. Но программе, во-первых, всё равно доступны не все адреса -- скажем, Винда забирает под себя старшую половину адресного пространства (наследие VAX/VMS, где это было следствием архитектуры машины); в Линухе и других системах ситуация принципиально такая же, различаются лишь детали. А во-вторых, программе благодаря виртуальной может быть доступен больший объём памяти, чем физически имеется на машине, причём иногда, особенно во времена уже достаточно отдалённые, во много раз больше.
Хм... Подзабыл о такой возможности, спасибо, что напомнили.