Откуда компьютер знает, как отображать текст и графический интерфейс на экране?

Откуда компьютер знает, как отображать текст и графический интерфейс на экране?

Это может быть глупый и странный вопрос, но я действительно не могу спать, пока не найду ответ. Откуда компьютер знает, как отображать текст и GUI на экране? Если я не ошибаюсь, процесс загрузки компьютеров x86 выглядит так:

  • BIOS запускает процессор и остальное оборудование и проверяет, все ли работает.
  • ЦП выполняет код из первых 512 байт загрузочного раздела, и на экране отображается меню загрузчика
  • выбранное ядро ​​выполняется
  • и т. д.

Мой вопрос: если до запуска ядра нет операционной системы, как компьютер узнает, как отображать текст на экране? BIOS и загрузчик могут отображать какой-то текст и базовый графический интерфейс. Как они это делают? BIOS/загрузчик сообщает CPU(GPU?), что он должен отображать синий пиксель в позиции (0,0), затем белый пиксель в (1,0) и т. д.?

Моя вторая теория заключается в том, что BIOS имеет базовый драйвер дисплея, который имеет некий API для печати на экране. Есть ли какая-то функция print(), доступная из драйверов дисплея?

Насколько я знаю, функции ассемблера для печати текста специфичны для каждой операционной системы, поэтому они не могут быть доступны напрямую через набор инструкций ЦП.

Часть 2 моего вопроса: как работают среды рабочего стола, такие как KDE или GNOME? Допустим, я хочу создать совершенно новую среду рабочего стола для Linux. С чего мне начать? В C/C++ или любом другом языке высокого уровня нет функций для отображениян цветprixel on position (x,y). На каком языке написана программа, которая отображает рабочий стол? Создает ли она рабочий стол попиксельно? Как работают библиотеки вроде GTK или Qt? Я знаю, что могу отобразить окно всего с несколькими функциями, но как эти функции на самом деле работают?

Извините, если мои вопросы непонятны. Английский не мой родной язык.

решение1

По сути, на материнской плате есть чип ПЗУ (постоянное запоминающее устройство), который сообщает ей, как отображать любой необходимый GUI. Вы думаете, что у него нет программного обеспечения, но это не так, оно предустановлено производителем. На самом деле, вы бы скорее назвали это «прошивкой», поскольку это программное обеспечение, которое жестко зашито в чип.

Что касается графических сред рабочего стола, то в них нет ничего особенного. Они рисуют на экране так же, как и любая другая программа. Все, что вам действительно нужно для рисования на экране, это знать адрес любого чипа, который у вас есть, который отвечает за обработку графики (обычно GPU или IGPU/APU). Когда обычные программы делают это, я полагаю, они запрашивают эту информацию у операционной системы, поэтому, если бы вы написали свою собственную графическую среду рабочего стола, вам пришлось бы выяснить, по какому адресу отправлять данные. Адрес, который вам нужен, должен быть предоставлен драйверами для любого G/IG/APU, который у вас есть.

решение2

В двух основных частях:

  1. После загрузки MBR его код загружает вторую стадию загрузочного кода, называемую Windows Boot Manager или GRUB на Linux. Этот загрузчик/менеджер загрузки имеет текстовые и графические функции, реализованные в коде, или использует прямой доступ к BIOS для текстового вывода.

  2. После загрузки ОС (Windows, Linux и т. д.) с использованием любого языка программирования, например C, C++, Java, Basic, у вас есть доступ к функциям, реализованным в ядре и/или библиотеках, которые позволяют писать или рисовать на экране. Каждый язык программирования сегодня имеет некоторую IDE (интегрированную среду разработки), которая значительно упрощает написание пользовательского кода.

Связанный контент