У меня такое ощущение, что мне сейчас нужно сделать некоторые драйверы оборудования.Я прав?
Строго говоря;(и в зависимости от ваших требований) «потребность» может быть слишком сильной - теоретически вы можете переключиться обратно в реальный режим, чтобы использовать функции BIOS, или использовать монитор virtual8086, или написать интерпретатор, который интерпретирует инструкции встроенного программного обеспечения вместо непосредственного их выполнения.
Тем не менее, BIOS ужасен (разработан для среды "только одна вещь может случиться за один раз"), которая совершенно не подходит для современных систем, где ожидается, что все устройства могут выполнять полезную работу одновременно), а BIOS устарела (заменена на UEFI), и трудно назвать что-то ОС операционной системой, если она не контролирует аппаратное обеспечение (поскольку микропрограмма все еще контролирует аппаратное обеспечение).
Примечаниечто если вы продолжите использовать функции BIOS;состояние различных частей оборудования (контроллер прерываний, пространство конфигурации PCI для различных устройств, любые мосты PCI, таймеры и т. д.) должно соответствовать ожиданиям BIOS.Это означает, что вы либо будете вынуждены принять огромные ограничения (например, никогда не сможете правильно использовать IO APIC и т. Д.), Поскольку это нарушит функции BIOS, используемые другим ранее существующим кодом, либо вы будете вынуждены выполнитьогромный объем работы, чтобы сделать BIOS счастливым (эмулируя различные части оборудования, поэтому BIOS думает, что оборудование все еще находится в ожидаемом состоянии, даже если это не так).если вам нужна хорошая ОС, вам нужно написать драйверы;но если вам нужна только ОС, которая не работает на современных компьютерах (UEFI), имеет серьезные проблемы с производительностью («за один раз может случиться только одно»), ее значительно сложнее улучшить, не поддерживающую устройстваBIOS не поддерживает (например, звуковые карты) и не поддерживает «горячее подключение» (например, подключение к USB-устройству), поэтому вам не нужно писать драйверы.
Вот почему ОС так трудно разрабатывать?
Плохую ОС легко разрабатывать.Например, что-то столь же ужасное, как MS-DOS (но не совместимое с MS-DOS), вероятно, можно было бы собрать за 1 месяц.
То, что усложняет разработку ОС, делает ее хорошей.Такие вещи, как забота о безопасности, попытка получить приемлемую производительность, поддержка многопроцессорности, обеспечение отказоустойчивости, попытка сделать ее более перспективной / расширяемой, обеспечение приятного графического интерфейса пользователя, создание продуманных стандартов (для API и т. Д.),и управление питанием - вот что делает ОС трудной.
Драйверы устройств увеличивают сложность.Прежде чем вы сможете писать драйверы, вам потребуется поддержка вещей, от которых зависят драйверы (управление памятью, обработка IRQ и т. Д. - возможно, включая планировщик и некоторую коммуникацию);затем что-то для автоматического обнаружения устройств (например, для сканирования пространства конфигурации PCI) и попытки запуска драйверов для всего, что было обнаружено (возможно / возможно, из файловой системы или с исходного RAM-диска, с возможностью добавления / выгрузки / замены драйверов без перезагрузки);и что-то для управления деревом устройств - например, чтобы вы знали, какие «дочерние устройства» будут задействованы, когда вы переводите «родительское устройство» в спящий режим (или «родительское устройство» имеет аппаратные сбои, или его драйвер выходит из строя, илиустройство отключено).Конечно, тогда вам нужно написать драйверы устройств, где сложность зависит от самого устройства (например, драйвер устройства для графического процессора NVidia, вероятно, труднее написать, чем драйвер устройства для контроллера последовательного порта RS232).
Для самих запоминающих устройств (при условии «ПК 80x86») существует около 8 стандартов (ATA / ATAPI, AHCI и NVMe; затем OHCI, UHCI, eHCI и xHCI для контроллеров USB, затем спецификация запоминающего устройства USB). Тем не менее, существуют также различные RAID-контроллеры и / или SCSI-контроллеры, для которых нет стандарта (каждому из этих контроллеров нужен свой собственный драйвер), а также некоторые устаревшие компоненты (контроллер гибких дисков, ленточные накопители, которые подключены к контроллеру гибких дисков или параллельному порту, три фирменных компакт-диска -ROM интерфейсы, которые были встроены в звуковые карты).
Пожалуйста, поймите, что поддержка всего этого не является целью. Цель должна состоять в том, чтобы обеспечить, от чего зависят драйверы устройств (описано выше), а затем предоставить спецификации, которые описывают интерфейсы драйверов устройств (возможно / возможно, включая такие вещи, как приоритеты ввода-вывода и синхронизация, а также уведомления об удалении устройств / носителей, обработке ошибок и т. Д.) так что другие люди могут написать драйверы устройств для вас. Как только это будет сделано, вы можете самостоятельно внедрить несколько конкретных драйверов устройств (например, возможно, просто AHCI - все остальное можно оставить намного позже или пока кто-то другой не напишет).