Я задавался вопросом, были ли какие-либо ресурсы, доступные онлайн, который объясняет, что происходит с чем-то, как printf C, который объясняет, что продолжается на очень низком уровне (BIOS/вызовы ядра)
Linux:
printf () ---> printf ( ) в библиотеке C ---> write () в библиотеке C ---> системный вызов write () в ядре.
Чтобы понять интерфейс между пространством пользователя и пространством ядра, вам необходимо знать, как работают системные вызовы .
Чтобы понять, что происходит на нижних уровнях, вам необходимо проанализировать исходный код ядра .
Краткий справочник по системным вызовам Linux (ссылка в формате pdf) может быть полезен, поскольку он определяет, где в исходном коде ядра вы можете начать поиск.
Что-то вроде printf или конкретно printf? Это несколько расплывчато.
printf выводит в поток stdout FILE *; то, с чем это связано, зависит от системы и, кроме того, может быть перенаправлено на любое другое потоковое устройство, для которого ОС предоставляет подходящий драйвер устройства. Я работаю во встроенных системах, и чаще всего stdout по умолчанию направляется на UART для последовательного ввода-вывода - часто это единственное поддерживаемое устройство потокового ввода-вывода, и его нельзя перенаправить.В ОС с графическим интерфейсом пользователя для приложений консольного режима вывод «рисуется» графически в определенном системой шрифте терминала в окно, в Windows, например, это может включать вызовы GDI или DirectDraw, которые, в свою очередь, обращаются к драйверу устройства видеооборудования. В современной ОС для настольных ПК вывод символов консоли вообще не задействует BIOS, кроме, возможно, начальной начальной загрузки.
Короче говоря, обычно существует огромное количество программного обеспечения между вызовом printf () и оборудованием, на котором он выводится.
По определению, вызовы BIOS и ядра зависят от платформы. Какая платформа вас интересует? Несколько ссылок на информацию, связанную с Linux, уже были размещены.
Также обратите внимание, что printf
может даже не привести к вызову BIOS или ядра, поскольку на вашей платформе может не быть ядра или BIOS (встроенные системы - хороший пример этого).
Это очень зависит от платформы. С аппаратной точки зрения внутренняя реализация printf () может быть направлена на последовательный порт, несерийный ЖК-дисплей и т. Д. Вы действительно задаете два вопроса:
Как printf () интерпретирует аргументы и формат. строка для генерации правильного вывода?
Как вывод передается от printf () на ваше целевое устройство?
Вы должны помнить, что ОС, ядро и BIOS не требуются для работы приложения. Встроенные приложения обычно имеют printf () и другие подпрограммы ввода-вывода, которые записывают в символьный кольцевой буфер. Затем прерывание может опросить этот буфер и манипулировать оборудованием вывода (ЖК-дисплей, последовательный порт, лазерное шоу и т. Д.), Чтобы отправить буферизованный вывод в правильное место назначения.