Это может быть глупый и странный вопрос, но я действительно не могу уснуть, пока не найду ответ. Как компьютер знает, как отображать текст и графический интерфейс на экране? Если я не ошибаюсь, процесс загрузки компьютеров x86 выглядит следующим образом:
- BIOS запускает процессор и остальное оборудование и проверяет, все ли работает
- процессор выполняет код с первых 512? байт загрузочного раздела и на экране отображается меню загрузчика
- выбранное ядро выполнено
- и т.п.
У меня вопрос: если до запуска ядра нет операционной системы, как компьютер узнает, как отображать текст на экране? BIOS и загрузчик могут отображать текст и базовый графический интерфейс. Как они это делают? BIOS/ загрузчик сообщает CPU(GPU?) что он должен отображать синий пиксель, скажем, в позиции (0,0), затем белый пиксель в (1,0) и т. д.?
Моя вторая теория заключается в том, что в BIOS есть драйвер основного дисплея, который имеет своего рода API для печати на экране. Есть ли какая-нибудь функция print(), доступная в драйверах дисплея?
Из того, что я видел, функции сборки для печати текста специфичны для каждой операционной системы, поэтому это не может быть доступно напрямую через набор команд ЦП.
Вторая часть моего вопроса: как работают окружения рабочего стола, такие как KDE или GNOME? Допустим, я хочу создать совершенно новую рабочую среду для Linux. С чего мне начать? В C/C++ или любом другом языке высокого уровня нет функций для отображения n-цветного прикселя в позиции (x, y). На каком языке написана программа, отображающая декстоп? Создает ли рабочий стол пиксель за пикселем? Как работают библиотеки типа GTK или Qt? Я знаю, что могу отобразить окно только с несколькими функциями, но как эти функции действительно работают?
Извините, если мои вопросы не ясны. Английский не мой родной язык.