Можно ли создать ОС только на языке c - PullRequest
0 голосов
/ 29 октября 2018

Пожалуйста, как я могу создать ОС с использованием языка C? Пожалуйста, я просто хочу знать основы. Можно ли это сделать, используя только c, или мне нужно использовать встроенную сборку с c. Если возможно, я хочу начать только с загрузчика.

1 Ответ

0 голосов
/ 29 октября 2018

Есть части типичного ядра, где необходимо делать вещи, которые C не поддерживает, включая:

  • доступ к специальным регистрам ЦП (например, управляющие регистры и MSR в 80x86)
  • доступ к специальным функциям процессора (например, CPUID, LGDT, LIDT инструкции для 80x86)
  • управление виртуальными адресными пространствами (например, аннулирование TLB)
  • сохранение и загрузка состояния при переключении задач
  • доступ к специальным адресным пространствам (например, порты ввода-вывода в 80x86)
  • поддержка способов переключения уровней привилегий процессором

Чтобы написать ОС на чистом C, вам нужно либо избегать всех этих вещей (которые могут быть жестко ограничивающими - например, однозадачность, одноадресное пространство, без защиты, без IRQ, ...), либо обманывать путем добавление «расширений, определенных нестандартной реализацией» к C.

Обратите внимание, что количество необходимых вам сборок очень мало, например, ядру, состоящему из 5 миллионов строк C, может потребоваться только 100 строк встроенной сборки, что составляет «0,00% кода (с небольшой ошибкой округления)».

Для загрузочного кода / загрузчика; это зависит от среды загрузки. Например, если вы загрузились с прошивки UEFI, то это не проблема (поскольку его API предназначен для языков высокого уровня), но если вы загрузились с прошивки BIOS, вы не можете использовать только C (из-за «неподдерживаемых» соглашений о вызовах).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...