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 подписчиков

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

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

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

8
Автор поста оценил этот комментарий
Строго говоря прости любой комп - однозадачный, просто очень быстро переключается +куча специализированных маленьких компов внутри :)
раскрыть ветку (1)
5
Автор поста оценил этот комментарий

Давно нет, с появлением многопроцессорности. А потом гипертрединг и настоящие многоядерные процессоры.

Кроме того, если нет аппаратных функций для переключения, есть противное дело: зависла одна задача — зависла вся ОС, упала одна задача — упала вся ОС.

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

Да, работа с дискетками или с портом LPT - яркий пример твердыни, которую никакая многозадачность не расколет ))

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

Особенно в режиме «дрыгоножества» — когда мы непосредственно управляем уровнями на штырях LPT. Это ведь жёсткое реальное время, верно?

показать ответы
Автор поста оценил этот комментарий
Выкиньте уже учебник по многозадачности вин 95
раскрыть ветку (1)
5
Автор поста оценил этот комментарий

Win95 — первая ОС линейки Windows БЕЗ этих недостатков, если что.

32-битный защищённый режим появился в 386. Важные функции вытесняющей многозадачности (InterlockedIncrement/InterlockedDecrement) — в 486.


Насколько помню, W95 их как-то имитировала и в документации было написано: возвращаемый результат только проверять на 0! В документации к более требовательной NT уже говорилось: возвращается настоящий результат увеличения/уменьшения.

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

Драйвер для doom? Ты чет, малой, психанул. Да, помню такую проблему. Но, решалась она как то сильно проще. Вроде правки конфигурации или ключика в командной строке. Правда, как конкретно, уже и не помню. 30 лет прошло...

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

Может. Я просто поднял движение по X в комфортный диапазон: штатного не хватало, можно было завысить через файл конфигурации, но если залезть в настройки после этого — игра вылетала. А по Y убирал совсем.

0
Автор поста оценил этот комментарий
Что то не сходится. Помню работая в дос использовал программу - кэш (smartdrive), так вот, копируешь на дискету гигантский файл, в целый мегабайт, он копируется почти мгновенно, и работаешь или играешь дальше. А дисковод работает, трещит, лампочкой горит. И никаких тормозов нет. Только смартдрайв надо было не просто запустить, а кэш на запись включить.
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Копирование как раз обращалось к новой драйверной системе Windows и прерывание 13, полагаю, не использовало. Или использовало, но всё равно обращалось к Windows.

показать ответы
8
Автор поста оценил этот комментарий
Строго говоря прости любой комп - однозадачный, просто очень быстро переключается +куча специализированных маленьких компов внутри :)
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Ах да: гипертрединг потребовал патчить WinXP: она первой научилась планировать между неодинаковыми процессорами.

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

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

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

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

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

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

Может Билл в Досе сидел в этот момент!

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

Форматировал дискету DOS-форматёром под Windows.

0
Автор поста оценил этот комментарий
Хп проф держит 2 физ проца из коробки, патч нужен для нт именно потому что это и для системы не "как бы ещё одно калечное ядро"
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Windows серии NT многопроцессорность держит, как минимум два. Патч нужен именно для несимметричного планирования между ядрами.

показать ответы

Темы

Политика

Теги

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

Сообщества

18+

Теги

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

Сообщества

Игры

Теги

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

Сообщества

Юмор

Теги

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

Сообщества

Отношения

Теги

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

Сообщества

Здоровье

Теги

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

Сообщества

Путешествия

Теги

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

Сообщества

Спорт

Теги

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

Сообщества

Хобби

Теги

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

Сообщества

Сервис

Теги

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

Сообщества

Природа

Теги

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

Сообщества

Бизнес

Теги

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

Сообщества

Транспорт

Теги

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

Сообщества

Общение

Теги

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

Сообщества

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

Теги

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

Сообщества

Наука

Теги

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

Сообщества

IT

Теги

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

Сообщества

Животные

Теги

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

Сообщества

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

Теги

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

Сообщества

Экономика

Теги

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

Сообщества

Кулинария

Теги

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

Сообщества

История

Теги

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

Сообщества