Всем тазик оливье, пацаны.
Месяц: Декабрь 2012
Про операционную систему House
В одной давней уже дискуссии речь зашла о том, что все современные операционные системы — говно, и true-программисты должны писать все на правильных языках, а именно — на Haskell. В качестве примера правильной ОС была приведена система House — как утверждает Википедия, «экспериментальная операционная система, написанная целиком на функциональном языке программирования Haskell».
Я не сторонник подхода «а давайте везде использовать ООП/функции высших порядков/монады (манды?)/Haskell/чистый ассемблер/придумать-и-вписать-что-то-свое» — особенно когда объявляется, что только этот подход позволит избавиться от багов, ускорить десятикратно работу программистов, и главное — является единственно верным. Именно это заставило меня со скептицизмом отнестись к заявлению
udpn о том, что Haskell — правильный язык для написания операционных систем, после чего я пообещал «посмотреть» на пресловутый House.
Разумеется, пообещав, я благополучно записал это обещание в свой импровизированный todo list, где оно и протерялось. Вспомнить про него меня заставил вчерашний срач, начатый на хабре силами
vit_r и продолженный в ЖЖ
metaclass.
Как известно, в любых компьютерных программах «волшебным образом» заводятся ошибки. С ними можно поступить тремя способами — грубо говоря, Abort, Retry и Ignore. За третий способ бьют морду уже в программистских ПТУ, так что речь пойдет о двух более принятых в приличном обществе стратегиях. Более подробно об этом можно почитать по ссылкам выше, а также найти в ЖЖ
vit_r расширенный вариант хабровской записи. Я же вернусь к теме операционных систем.
Стратегии «обработки ошибок», которые я назвал abort и retry, появились, видимо, уже на заре программирования. В операционной системе MULTICS, созданной в середине 60-х, по разного рода пересказам одних и тех же жареных фактов в учебниках по операционным системам, большую часть кода занимала обработка ошибок — то есть попытки восстановить состояние системы, «несмотря ни на что». Это можно отнести к стратегии «retry».
Другой вариант был реализован в «потомке» MULTICS — точнее, в самых первых версиях Unix. При каких-либо странных ситуациях система просто «впадала в панику» и благополучно «грохалась». Сформулированный в виде «Если надо выйти из строя, делайте это шумно и как можно быстрее», этот подход обычно относят к «философии UNIX» вообще.
Естественно, что для «операционных систем вообще» желательно «выходить из строя» как можно реже. Именно этому посвящено и замечание
migmit с последовавшей небольшой дискуссией про микроядра в целом (как один из способов совместить fail fast и общую «отказоустойчивость») и горячо мной любимый Minix в частности.
Если верить адептам Haskell-ной веры, то в вопросе «налево пойдешь — коня потеряешь, направо пойдешь — сам пропадешь» «Abort или Retry?» имеется еще один вариант — якобы их истинно правильный язык программирования сам не дает допустить ошибку. В качестве примера такого применения Haskell и была приведена ОС House.
К сожалению, в данном случае мы имеем дело с совершенно искренним заблуждением о том, что используя «правильные инструменты», можно полностью оградить себя от ошибок в программах. Говоря терминами из провокационной записи
vit_r, так ведут себя «гении». Это поведение очень похоже на разнообразных новоявленных великих фотографов, которые покупают в «Эльдорадо» в кредит недорогую зеркалку и ведут себя, как Картье-Брессоны. К сожалению, ни дорогой фотоаппарат, ни Haskell в руках «идиота» не превратят его в «гения».
Вернемся непосредственно к House. Архитектура этой системы, согласно ее описанию, довольно проста. Это «микроядерная» операционная система, с явным разделением «политики» (реализованной на Haskell) и «механизма» (на C с ассемблерными вставками). Ядро ОС — это примерно 1200 тысячи строчек на Haskell и 750 строчек на C. На C реализованы некоторые компоненты, необходимые для работы Haskell-ного рантайма и «низкоуровневого» взаимодействия с «железом».
Сишная часть реализует в этой операционке специальную монаду H — от Hardware, позволяющую хаскелльному коду выполнять операции с такими штуками, как страницы памяти или обработчики прерываний. Кроме того, микроядро на Haskell умеет взаимодействовать с драйверами устройств — тоже написанными на Haskell, но выполняющимися не в Ring 0, а в нормальном «пользовательском» Ring 3. В общем, классическое микроядро, ничего особенного.
Правда, весь кайф обламывает вот какой момент. Ядро тащит с собой весь рантайм от GHC, который оценивается где-то в 50 тысяч строк кода на Си. Там, в этом рантайме, находится хаскельное расширение Concurrent Haskell — которое в этой ОС выполняет функции планировщика и менеджера процессов. Получается типичный пример «каши из топора» — с тем же успехом House можно называть «написанной на Си». Более того, trusted computing base оказывается просто громадной по сравнению, скажем, с Minix, где все ядро — это около 7 тысяч строк на Си с небольшими ассемблерными вставками.
Очень сложно говорить о написании ОС на языках с «богатым» рантаймом, как у Haskell. Как только в этом рантайме реализованы потоки — то теряется смысл разговора о планировщике, он реализуется исключительно средствами, встроенными в язык. Если рантайм окажется, так сказать, POSIX-эквивалентным, то говорить о разработке ОС на таком языке уже как-то смешно.
Что интересно — от ошибок не спасает даже Haskell. В более поздней статье с описанием этой операционки приводится пример типичной ошибки с «граничными условиями» — вместо 4096 байт менеджер памяти пытался обнулить 4097, правда, с оговорочкой — мол, если бы мы аккуратно использовали вывод типов, то этой ошибки и не возникло бы. Так используйте, кто мешает?
В целом — проект заслуживает внимания, как своего рода «технический курьез», типа построенного без единого гвоздя деревянного здания. Правда, при внимательном рассмотрении гвозди все же обнаруживаются — но тщательным образом замаскированы. Более интересно тут другое — что в «настоящей» микроядерной ОС системное и прикладное программирование мало чем отличаются. В принципе, в том же Minix никто не мешает написать системный компонент, типа драйвера устройства или даже планировщика задач на каком-нибудь экзотическом для этой задачи языке. А что, вас не устроит драйвер сетевой карты на Common Lisp?
Про брата Навального
Из всей этой истории можно извлечь один полезный факт — кто именно маринует посылки в «сортировочных центрах» нашей всенародно любимой «Почты России». По поверьям разных там вудуистов, если колдун знает имя жертвы, то ему ничего не стоит написать его на бумажке, произвести тайный магический ритуал и сотворить с этой самой жертвой что-то нехорошее — послать, например, луч поноса или чего похуже.
На месте Олега Навального я бы задумался о качестве предоставляемых российским вудуистам услуг.
Оружие и психопаты
В френдленте встречаю полярные мнения по поводу очередного mass shooting’а в Штатах. Обычно требуют либо совсем-совсем запретить это страшное оружие, либо наоборот, повсеместно разрешить короткоствол. Видимо, в первом случае намеревающийся устроить что-то «этакое» маньяк не сможет найти ружжо и патроны, после чего с тоски отравится паленой водкой, а во втором — первоклассники ловко залягут за партами и короткими очередями замочат маньяка. Так или иначе, разговор почему-то сводится к больной теме «легализации короткоствола».
На самом деле проблема несколько интереснее. Я не случайно употребил в первой же фразе англоязычный термин. Mass shooting — явление гораздо более распространенное в США, чем в России, и русского определения для этого явления просто не существует. С 2000-го года в Штатах произошло, по данным англоязычной Википедии, 43 случая стрельбы в общественных местах, заслуживающих википедического определения «notable», а кроме того — еще тридцать-сорок менее значительных происшествий, в России — всего 2 (Евсюков и Виноградов). Это связывают с тем, что в США оружие в разы доступнее, чем в России — и, соответственно, для психопата достать его легче.
В качестве некоего допущения примем гипотезу о том, что быть психопатом и иметь доступ к оружию — независимые явления. Население США больше населения России примерно в 2,4 раза (310 против 140 миллионов). Сравним доступность оружия в обеих странах. В России, по приводимым
kirguduev данным, на руках у населения имеется примерно 10 миллионов только «легального» оружия — в том числе таких замечательных образцов, как полуавтоматические дробовики «Сайга» или «Вепрь» — как показал пример Виноградова, абсолютно «убойного» и при этом сравнительно доступного оружия. В США — 270 миллионов единиц оружия, примерно в десять раз больше в пересчета «на душу населения». Соответственно, для американского психопата оружие доступнее в 10 раз, а самих психопатов больше в 2,4 раза.
Если принять российских психов за «эталон», то простое умножение показывает, что за один и тот же период в США должно произойти в 24 раза больше mass shooting’ов, чем в России — то есть порядка 50. «Почему-то» их оказывается аж в полтора раза больше. Еще более впечатляющим получится сравнение с такими странами, как Швейцария или б-госпасаемый Израиль — где оружие доступнее в разы, а про психов с ним почему-то не слышно. Кстати, если отдельно рассмотреть «Россию без дерьма Москвы», то сравнивать будет нечего — по причине отсутствия рассматриваемого явления за пределами МКАДа.
Более того, даже недоступность оружия не останавливает психов — та же англоязычная Википедия на главной странице рассказывает о School attacks in China — которые совершают в основном с использованием ножей и молотков. Можно сделать вывод, что дело не в оружии, а в тех, в чьи руки оно попадает.
Если принять в качестве «рабочей гипотезы» другое допущение, что псих осуществит свой замысел в любом случае, без разницы, может он раздобыть дробовик, или придется идти «на дело» с кухонным ножом, то ситуация для США получится куда более безрадостной. Может, дело в какой-нибудь заразной и эндемичной форме какого-нибудь психического заболевания?
Кац в Википузии
Интересно, что надо сделать, чтобы попасть на главную страницу Википедии? На днях в рубрике «Знаете ли вы?» появилась запись
Фотограф и игрок в покер пытаются изменить Москву к лучшему, несмотря на сопротивление властей.
— где имеются в виду хорошо известные Кац и Варламов.
Интересно, что за «сопротивление властей» имеется в виду? Спонсорская помощь от Информационного центра Правительства Москвы? Нежная дружба с Департаментом транспорта?
Удивительно, но я не обнаружил в архивах Википедии возражений на номинацию этого «интересного факта» на главную страницу. Более того, пополнение рубрики «Знаете ли вы?» зависит буквально от двух-трех человек. Фактически, любая «политическая» сила (а Кац с Варламовым — «сила» именно политическая, своего рода имитаторы общественной активности, выгодной тому же Департаменту транспорта) может туда довольно легко влезть, имея соответствующий имидж.
В общем, поздравляю википедиков с тем, что их любимая пузивикия стала инструментом для «мелкомасштабной» политической борьбы в рамках московского правительства (а крупномасштабной там занимаются уже давно). Этак через пару лет измельчают вконец, и на главной странице будут размещать компромат на председателей ТСЖ, хвалить директоров школ и вообще, википедия превратится в бесплатную площадку для агитации всякой шушеры.
Техническая археология
Среди прочих ништяков «как в дорогих иномарках» в моей «Волге» имеется климат-контроль (на фото вверху). По словам предыдущего владельца, климат-контроль и кондиционер установлены дилером, а из всей документации к ним имелась лишь инструкция на нескольких листах A4, правда, с децимальным номером — который не находился ни в гугле, ни в яндексе.
Вообще, история установки кондиционеров и климат-контролей на «Волги» весьма богата и разнообразна. Интернет знает в основном о продукции нижегородской фирмы «Микротек» — в том числе и о блоке «Шаттл», который ставили на рестайлинговые ГАЗ-31105 с «немецким» салоном. Но и до появления «Шаттла» на «Волги» ставили самые разнообразные климатические системы. Двигатели типа ЗМЗ-405 или 406 «не замечают» подключения дополнительной нагрузки в виде муфты кондиционера, так что обычно все сводилось к чисто механической установке компрессора, разнообразных магистралей, конденсоров и радиаторов и небольшой «электромонтажной» работе. Фирм и фирмочек, занимавшихся этим, было довольно много, особенно в Нижнем Новгороде, так что, наверное, две одинаковые «климатические системы» найти сложно.
С «головными устройствами» все не менее сложно. До появления заводского «Шаттла» климат-контроль устанавливался на место штатного блока управления отопителем, фактически — в слот 1DIN, и в любом исполнении особо не уродовал интерьер. Судя по фотографиям в «Клубе владельцев ГАЗ-3111«, в начале 2000-х «в ходу» был десяток различных блоков климат-контроля — от фольксвагеновских до отечественных, исконно-посконных.
У меня были некоторые вопросы касательно правильности работы климат-контроля, в первую очередь — по показаниям датчиков. К сожалению, мне не был известен тип этих датчиков — вся информация о них ограничивалась лишь тем, где в разъеме на блоке климат-контроля выводы +5V, GND, SDA и SCL. В интернете по запросам типа «Климат-контроль на Волгу» удалось найти сначала лишь страничку некоего дизайнера, не постеснявшегося выложить вот это в свое «портфолио»:
Нашлись и фотографии внутренностей такого блока на cxem.net, и страничка с описанием блока и схемами подключения:
http://lancar.narod.ru/Acson.htm
Правда, ничего нового они не добавили, более того, обнаружились небольшие разночтения с бумажной инструкцией. Как говорится, «проведены различные модернизации по улучшению внешнего вида, алгоритма работы и адаптации к тем или иным маркам автомобилей». Еще больше меня разочаровало то, что под панелью приборов обнаружилось что-то в корпусе датчика температуры салона от ВАЗ-2110 (деталь 2110-8128050 по каталогу) — в котором никаких SDA и SCL отродясь не было, это просто терморезистор, обдуваемый вентилятором.
Казалось бы, ничего больше найти не удастся? Но под капотом удалось найти явно нештатную деталь — примерно такую:
Идущий к ней безо всякой гофры провод в нескольких местах перетерся, но после того, как я его пошевелил, показания датчика температуры снаружи автомобиля пришли в норму. Видимо, это он и есть — решил я, после чего стал искать микросхемы в корпусе SOIC-8, которые умели бы выдавать температуру по I2C. Что отечественный радиолюбитель вспоминает первым делом, когда слышит слова «цифровой температурный датчик»? Правильно, микросхемы серии DS1820 — но там не пахнет никаким I2C. Зато в линейке того же производителя имеется замечательный термодатчик DS1621 — подходящий на роль «неизвестной восьминогой микросхемы» даже по схеме включения.
Более того, на форуме по PIC-ам нашлось очень интересное сообщение, которое стоило бы полностью процитировать, очень интересно будет всем «мастырящим» климат-контроль в неприспособленные для это авто:
Мы использовали DS1621 (с шиной I2C) с питанием по кабелю от основной платы. В принципе, отличные датчики, но в реальных условиях не все так безоблачно, как некоторые пишут… Если есть рядом мощный ШИМ, например, плавное управление вентилятором отопителя, или двигатель инжекторный, то могут быть некоторые проблемы с помехами. Мы, в конце концов, стали применять 4-хжильный кабель в экране, с заземлением экрана на стороне базовой платы. Есть еще куча проблем, не связанных с типом датчика. Например, датчик температуры воздуха в салоне нужно суметь правильно разместить, чтобы его показания не очень сильно зависели от времени года, от солнечной засветки через окна, от потоков теплого/холодного воздуха из воздуховодов и пр.В обязательном порядке надо снабдить его вентилятором обдува, иначе показания будут очень долго устанавливаться, и не факт, что в конце концов установятся. Раньше удобно было использовать для этой цели салонный датчик от вазовской десятки — брался корпус и вентилятор, мотор которого питался постоянным током. (Сейчас моторчик используется 3хфазный, к нему нужно управление, и все стало гораздо геморройнее.) Для наружного датчика к проблеме размещения добавляется проблема защиты от климатических и иных (грязь, масло и т.п.) воздействий. Размещение в переднем бампере не очень удачно — жарко от двигателя и сильно грязно. До заднего бампера далеко и неудобно тянуть кабель. В любом случае, летом от асфальта идет такой тепловой поток, что датчик может врать градусов на 15…20. Для наружного датчика мы делали маленькую одностороннюю платку, со стороны элементов накрывали легким дюралевым корпусом, и внутрь корпуса заливали эпоксидку. Так однажды вернулся датчик, у которого что-то «проело» текстолит платы. Случались механические разрущения и эпоксидки, и платы. В общем, проблема не тривиальная…:)
http://www.microchip.ru/phorum/read.php?f=2&i=146976&t=146976
Я обратил внимание на «салонный датчик от вазовской десятки» — я все таки не такой маньяк, чтобы лезть внутрь корпуса, так что о конструкции датчика я сделал вывод лишь на основании «внешнего осмотра». Вскрыв в следующий раз корпус, я обнаружил там явно «нештатную» плату — причем, в отличие от внешнего датчика, на ней прекрасно читалась маркировка микросхемы — и это действительно оказалась DS1621.
В общем, мир весьма и весьма тесен — особенно с поисковыми системами :)
Priviet motherfuckers, I am Vladimir!
Недавно шведская группа Raubtier выпустила переиздание своего альбома Det Finns Bara Krig, добавив туда бонус-треком совершенно клюквенную композицию Dragunov.
Желающие могут подпевать:
I believe in Mother Russia and I persevere (?).
I was a Spetsnaz in the Red Army
and there was no better killer than me
But the Glasnost came and I lost my job,
and became a hitman for the russian mob.
I shot and killed both pimps and tsars for Vodka, guns and caviar.
Smirnoff and Kalashnikov
Smirnoff and Kalashnikov
and then went home to Stalingrad for cars and women, ruble and blood.
So if you live in constant fear
just call and ask for … Vladimir.
I do the business, someone dies,
nastarov’je and goodbye!
Smirnoff and Kalashnikov
Nastarov’je and goodbye!



