150

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

Серия Доступно об АйТи

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

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

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

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

Компьютерное железо на уровне процессорных команд представляет собой некое подобие памяти. Если говорить упрощённо, есть адрес памяти или несколько — например, от 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 подписчиков

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

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

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

Вы смотрите срез комментариев. Показать все
1
Автор поста оценил этот комментарий

Win 9x был прекрасен. В школе резвились - открываешь блокнот или вордпад, пишешь четыре символа °южd (где ° - это Alt+0176), если правильно помню. Сохраняешь, даешь расширение .com, запускаешь - комп перегружается на холодную.

раскрыть ветку (6)
1
Автор поста оценил этот комментарий

Писал, ради прикола, программу на delphi со вставками из ассемблера, которая мигала светодиодами клавиатуры. Промахнулся, отправил данные не в тот порт... Меньше, чем через секунду увидел экран BIOS - комп загружался заново. Так я узнал, что Win2000 не сильно-то и "защищен" :-)

раскрыть ветку (2)
0
Автор поста оценил этот комментарий

Надо же, XP уже на такое ругалось "privileged instruction" я думал и 2000 тоже

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Да, на ХР такое уже не прокатывало

1
Автор поста оценил этот комментарий

0:  b0 fe                   mov    al,0xfe
2:  e6 64                   out    0x64,al

Этой командой мы просим сделать нулевой импульс на трёх нестандартных линиях PS/2.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Да, точно, вывод в 64h порт и оно работало

0
Автор поста оценил этот комментарий

EA F0 FF 00 F0 в любом двоичном редакторе, и 9х улетал в холодную перезагрузку.

JMP (FAR) FFFF:0000, последние 16 байт ПЗУ. Именно этот адрес процессор получал после инициализации, по нему был прописан такой же дальний jump на точку входа в BIOS. Был даже вирус, который именно так гадил в .COM-файлах, и его с некоторых пор стали ловить и Лозинский, и VirusRemover. Но для слышавших об асемблере это не было проблемой, добавляешь парочку NOP (90h) перед EA - вуаля, антизверь не видит подвоха, 9х перезагружается.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества