139

Доступно об АйТи: «Сейчас, погоди, дискетку доформатирую»

Начнём с анекдота.

Подходит ребёнок к Гейтсу:
— Покажи, что такое многозадачность.
— Сейчас, погоди, дискетку доформатирую.

Попытаюсь объяснить, откуда ноги растут.

На самом низком уровне

Компьютерное железо на уровне процессорных команд представляет собой некое подобие памяти. Если говорить упрощённо, есть адрес памяти или несколько — например, от B800:0000 до B800:3FFF (страница цветного текстового режима, если что). Пишем в эти адреса данные, текст появляется на экране.

Всё классно, кроме одного вопроса.

Если платформа «взлетит», в будущем появятся компьютеры с другой конфигурацией «железа». Как обеспечить совместимость сверху вниз, чтобы уже сейчас теперешнее ПО было готово к ещё не появившимся компьютерам?

И тут есть два способа.

  1. В новом «железе» сделать совместимый режим, принимающий такие же команды, как и старое. Известный пример — переход накопителей в начале 2010-х на 4-килобайтный сектор диска, когда винчестеры делали вид, что секторы на диске старые 512-байтовые (ценой сниженной производительности).

  2. Сделать программную прослойку — драйвер. Грубо говоря, мы у драйвера спрашиваем: а что ты можешь? И он отвечает: я диск из 500 миллиардов 4-килобайтовых секторов, механический. А давай прочитай сектор №1234…

Кто пишет драйверы?

В реалиях современных 32- и 64-битных ОС — производитель «железа» и собственно ОС. Опустим проблему, когда аппаратура есть, а драйвера под нужную ОС нет. С критичным «железом» — экраном, дисками, клавиатурой — получается порочный круг.

Где хранится драйвер? — На диске!

Как читать диск? — Через драйвер!

Как разорвать круг?

Знакомьтесь, BIOS!

Basic input/output system = базовая система ввода вывода. Это прошивка материнской платы, изначально (в исходном IBM PC) вообще 8 килобайт, решающая три основных задачи.

  1. Минимальный тест памяти и прочего оборудования.

  2. Конфигурирование оборудования, задание последовательности загрузки.

  3. Простейший драйвер для критичного оборудования вроде дисков и клавиатуры.

А теперь вопрос: как сослаться на функцию, например, «считать сектор диска»? Старый компьютер 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. Новый оконный форматёр, спрятанный где-то в Проводнике, этого недостатка не имеет.

IT минувших дней

1.2K поста7.4K подписчиков

Правила сообщества

Запрещается добавлять новости о прошлогодних новинках, а также посты, не относящиеся к тематике "ретро в ИТ".

Желательно соблюдать правила приличия.