Доступно об АйТи: «Сейчас, погоди, дискетку доформатирую»
Начнём с анекдота.
Подходит ребёнок к Гейтсу:
— Покажи, что такое многозадачность.
— Сейчас, погоди, дискетку доформатирую.
Попытаюсь объяснить, откуда ноги растут.
На самом низком уровне
Компьютерное железо на уровне процессорных команд представляет собой некое подобие памяти. Если говорить упрощённо, есть адрес памяти или несколько — например, от B800:0000 до B800:3FFF (страница цветного текстового режима, если что). Пишем в эти адреса данные, текст появляется на экране.
Всё классно, кроме одного вопроса.
Если платформа «взлетит», в будущем появятся компьютеры с другой конфигурацией «железа». Как обеспечить совместимость сверху вниз, чтобы уже сейчас теперешнее ПО было готово к ещё не появившимся компьютерам?
И тут есть два способа.
В новом «железе» сделать совместимый режим, принимающий такие же команды, как и старое. Известный пример — переход накопителей в начале 2010-х на 4-килобайтный сектор диска, когда винчестеры делали вид, что секторы на диске старые 512-байтовые (ценой сниженной производительности).
Сделать программную прослойку — драйвер. Грубо говоря, мы у драйвера спрашиваем: а что ты можешь? И он отвечает: я диск из 500 миллиардов 4-килобайтовых секторов, механический. А давай прочитай сектор №1234…
Кто пишет драйверы?
В реалиях современных 32- и 64-битных ОС — производитель «железа» и собственно ОС. Опустим проблему, когда аппаратура есть, а драйвера под нужную ОС нет. С критичным «железом» — экраном, дисками, клавиатурой — получается порочный круг.
Где хранится драйвер? — На диске!
Как читать диск? — Через драйвер!
Как разорвать круг?
Знакомьтесь, BIOS!
Basic input/output system = базовая система ввода вывода. Это прошивка материнской платы, изначально (в исходном IBM PC) вообще 8 килобайт, решающая три основных задачи.
Минимальный тест памяти и прочего оборудования.
Конфигурирование оборудования, задание последовательности загрузки.
Простейший драйвер для критичного оборудования вроде дисков и клавиатуры.
А теперь вопрос: как сослаться на функцию, например, «считать сектор диска»? Старый компьютер ZX Spectrum вызывал функции своего BIOS просто через адреса памяти, но это также мешает совместимости. В современных ОС за всё это отвечает динамическая компоновка программ — где-то в исполняемом файле есть команда «найти адрес функции ReadFile, и подставь его по адресам X и Y». Сложно.
Как это сделано в BIOS, а также в минималистичных ОС вроде DOS?
Процессор иногда для нужд аппаратуры может совершить прерывание — бросить то, чем он занимается, экстренно обслужить клавиатуру или таймер, и вернуться к делу. Процессор 8086 имеет целых 256 прерываний, 8 из них используются самим процессором, например для работы с делением на ноль. Компьютер IBM AT имеет для своих железных нужд всего два контроллера прерываний, по 8 штук каждый.
Остальные 232 прерывания программные — вызываются только вручную и пущены на такие вот драйверы. Существуют резидентные программы (драйверы, антивирусы и прочее) — они подменяют адреса функций прерывания (перехватывают прерывания), чтобы добавить или подкорректировать функциональность. Я и сам писал мелкие резиденты — например, чтобы в Doom отключить ось Y мыши (она отвечала за хождение взад-вперёд и только мешала).
Что же с дисками?
Дисками — посекторным чтением, записью и форматированием — занимается прерывание 13, принадлежащее BIOS. Кто пишет BIOS? — Производитель материнской платы или нанятая им компания.
Windows 95 сделала очень многое для эмуляции DOS, многие из старых программ будут работать на Windows и даже получат немножко новой функциональности вроде вставки из буфера обмена. Но на самом деле всей железной функциональностью занимаются 32-битные драйверы.
Форматирование диска, когда на нём ничего нет, кроме магнитного слоя,— задача сложная, и часто работает в жёстком реальном времени — нужно точно отсчитать время, когда головка над нужным… тем, что должно стать сектором. И в Windows для совместимости не нашли ничего лучшего, чем вызывать не 32-битные драйверы, а чистое прерывание 13 из BIOS и/или резидента!
Для этого Windows отключает немалую часть своей функциональности, пока исполняется старая функция форматирования. Включая планировщик, основанный… сюрприз, на таймере!
Разумеется, всё это касается только DOS-форматёров, в частности FORMAT . COM. Новый оконный форматёр, спрятанный где-то в Проводнике, этого недостатка не имеет.
Ответ на пост «Мерч для олдов»6
Ответ на пост «Мем смешной, а к такому меня не готовили)»1
А теперь мой собственный заголовок:
Доступно об АйТи: Keyboard not found, press F1
Это сообщение стало мемом задолго до того, как слово «мем» разлетелось по интернетам. И вообще до интернетов как таковых — оно ходило ещё по ФИДО (почтовой сети, работавшей на модемах).
Офтопик для олдфагов: кто помнит, что объединяет эти программы? И какой не хватает? Какой неприятный запах? И какая должна играть мелодия? (Не «Вильгельм Телль» и не «Попкорн», если что)
Ныне это, как правило, попадос на деньги: отказал мультиконтроллер, микросхема на материнской плате, отвечающая за поддержку старой аппаратуры вроде PS/2 и COM-портов. Реже — неудачно настроенная BIOS (большинство компов отлично загружаются и без клавиатуры).
Некоторое время, пока внедрялась USB, а также и поныне на отдельных компьютерах со встроенной клавиатурой (ноутбуках) это сообщение мешает работать, если в штатном порту клавиатуры нет (а есть в USB).
А откуда оно взялось — есть несколько теорий. Возможно, играли роль и все четыре.
Экономия памяти
Исходный IBM PC имел 1 мегабайт адресуемой памяти. Из них до 640 килобайт — это оперативная память (так называемая память DOS или обычная память; ко всему, что сверх, был доступ только окольными путями), а оставшиеся 384 — верхние адреса памяти, позволявшие обращаться ко всякой аппаратуре — видеопамяти, BIOS материнской платы (прошивке, запускавшей компьютер и дававшей минимальную функциональность) и BIOS видеоплаты.
В любом случае BIOS была невелика, изначально всего 8 килобайт, и приходилось экономить: после каждой ошибки писало стандартное «Press F1 to continue». Вот только для клавиатуры это бессмысленно — а на «интуитивность» интерфейса тогда особо не смотрели.
Подключи и нажми
Большинство аппаратуры могло сломать материнскую плату, если подключать её «на горячую», этот вопрос решил только USB. Один из немногих разъёмов, допускавших такое обращение,— старый 5-штырьковый разъём клавиатуры: можно было просто подключить и нажать. Проверка аппаратуры в то время длилась пару минут, если выждать тест памяти, и секунд 15, если пропустить, так что немного времени экономилось. (Правда, чтобы пропустить, требовалось нажать Esc на той же клавиатуре.)
Запавшая кнопка
Третья теория — система обнаруживала, что на клавиатуре одна из кнопок вечно нажата, и выводила ошибку. Можно было нажать F1 и продолжить работу.
Совместимость
Четвёртая теория. У ранних IBM существовали несколько не совместимых друг с другом клавиатур. Я этих времён не застал, но отголоски есть в API Windows — коды аппаратных клавиш, одинаковые для Q американского, A французского и Й русского/украинского, совпадают с кодами XT (а не современными AT и USB).
Если BIOS поддерживала их все, она предполагала, что в порту, например, клава от IBM PC/XT. А если оказывается, что другая, просит нажать F1, чтобы подтвердить, что это клава от PC/AT, записать это в настройки BIOS и больше не спрашивать. При потере настроек терялся и запомненный тип клавиатуры, и снова требовалось нажать F1.
Ответ на загадку
Имеются в виду анекдоты про COMMAND. COM и Norton Commander, другой образчик старого компьютерного юмора. Прочие распространённые герои — Digger и Windows. Так что какая программа — Windows 3 или более ранняя. Какая мелодия — Yankee Doodle: один из первых вирусов-шутников, когда их общее количество, и шуточных, и вредных, исчислялось единицами. Какой неприятный запах — мышей: «от Windows мышами пахнет», ведь она, формально способная управляться с клавиатуры, по факту требовала мышь.
Ответ kbnikto в «Мерч для олдов»6
Чуть-чуть заапскейлил оригинал, а-то получалось слишком мыльно. Ну и ссылку на скачивание не на твитторы
Стало:
Было:









