[personal profile] ex0_planet
А вот еще постом [livejournal.com profile] jakobz навеяло.

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

Короче. Решение, долженствующее невероятно продвинуть искусство коммуникации железа с драйвером, представляло собой виртуальную машину навроде ACPI, только наколеночную. То есть, из железа, натурально, вычитывались таблицы, которые потом специальный шматок кода, состоявший в основном из switch/case и goto, со скрежетом внутри себя эмулировал.

Все бы ничего, но машину-то делали на коленке, и почему-то забыли предусмотреть там методы коммуникации программы внутри виртуальной машины с хостом. Поэтому, ЛЮБАЯ ошибка, ЛЮБОЙ чих, когда коду что-то не нравилось, обрабатывались единственным доступным способом — ВПАДЕНИЕМ ПРОГРАММЫ В БЕСКОНЕЧНЫЙ ЦИКЛ. То есть, формально говоря, драйвер не вешался, энтот эмулятор там внутри себя чего-то бодро молотил, процессор уверенно грелся и всё такое. Чтобы понять, что что-то идет не так, надо было влезть дебаггером в кишки эмулятора и посмотреть, а по каким, собственно, адресам он ходит. Разумеется, разным ошибкам соответствовали разные адреса, что и было основным методом диагностики. Вишенка на торте: по какой-то прихоти судьбы, ВМ не имела команды "jmp туда-то", и поэтому реализация бесконечного цикла занимала 3-5 команд, причем, почему-то не подряд. То есть, вот прямо так взять и посмотреть что там исполняется местный эквивалент команды "10: goto 10" не получалось, надо было прокручивать в голове последние штуки три команды.

Почему? Да ни почему, because fuck you, that's why. Потому что железячники, которые ничего вокруг, кроме своего байтоёбства не видят. Правильно там в комментах сказали: выгнать и софтваризовать всё.

Date: 2014-12-11 12:05 am (UTC)
From: [identity profile] juan-gandhi.livejournal.com
Я однажды проиграл примерно 20 тыс примерно советских рублей (да, дело было в СССР), взявшись поставить одну нашу софтяру на новый хардвер. Проблема была в том, что в микрокоде был баг, и время от времени при прерывании адрес, откуда это прерывание прикатило, никуда не записывался. Ну судьба такая. Все, что мы знали - это вот, смотрите, прерывание, пиздец вам. А прерывание могло быть обыкновенным вызовом системы, типа "запиши блок на диск".

Ну и вот.

Хардвер.

Profile

ex0_planet

April 2023

S M T W T F S
      1
234567 8
910111213 1415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 28th, 2026 09:43 pm
Powered by Dreamwidth Studios