Может ли программное обеспечение быть выполнено на голом металле?
Мне просто интересно, можем ли мы запустить программу на машине без операционной системы?
Кроме того, я слышал, что ядро Linux написано на языке C, а ядро запускается во время загрузки, поэтому мне просто интересно, как компьютер понимает язык без предварительной компиляции?
8 ответов
Из Википедии:
Когда компьютер впервые включен, на нем нет операционной системы в ПЗУ или ОЗУ. Сначала компьютер должен выполнить небольшую программу, хранящуюся в ПЗУ, а также минимум данных, необходимых для доступа к энергонезависимым устройствам, с которых программы и данные операционной системы загружаются в ОЗУ. Небольшая программа, которая запускает эту последовательность загрузки в ОЗУ, называется загрузчиком начальной загрузки, начальной загрузкой или загрузчиком. Единственная задача этой небольшой программы-загрузчика - загружать другие данные и программы, которые затем выполняются из ОЗУ.
Компьютер может понимать ядро Linux, поскольку оно уже скомпилировано и хранится (обычно) на диске. Загрузчик предоставляет компьютеру достаточную функциональность для загрузки предварительно скомпилированного ядра в память.
Вам не нужно загружать целую операционную систему для запуска программы на компьютере, вы можете написать загрузчик для запуска программы, которую вы скомпилировали. У вас не будет доступа ни к каким вызовам операционной системы, которые облегчат жизнь программистам.
Короче да.
Linux по-прежнему является программным обеспечением в машинном коде, которое работает на голой железной машине. В то время как вы можете запускать программу без операционной системы, ваша программа должна будет реализовывать ВСЕ код, который используется для связи с различными частями оборудования в компьютере в различной степени - например, вывод данных на дисплей, интерпретация ввода с клавиатуры / мышь / сетевая карта и т. д. (некоторые вещи очень низкого уровня реализуются встроенным программным обеспечением в компьютерных компонентах, но остальная часть вашей программы должна быть реализована). Это делает очень трудоемким и трудным для вас написать что-то, что работает полностью без операционной системы.
Ядро Linux может быть написано на C. Оно все еще скомпилировано в машинный код. И именно этот машинный код, который выполняется во время загрузки
Вы также можете написать программное обеспечение, которое запускается во время загрузки. Таким образом, вы можете создать свою собственную ОС или создать собственное программное обеспечение, которое может работать без ОС напрямую. Однако будьте осторожны: операционная система предоставляет вам множество функциональных возможностей, которые вам придется создавать самостоятельно. Такие вещи, как поддержка драйверов, подпрограммы дискового ввода-вывода, сетевые стеки, многозадачность и управление памятью, вам придется делать самостоятельно.
Наконец: я не думаю, что людям это не очень нравится, если им приходится перезагружать свой компьютер, чтобы запустить ваше программное обеспечение. Так что я бы пошел писать для ОС... это облегчает жизнь вам и пользователю.
Да, и сегодня это делается для небольших микроконтроллеров с несколькими килобайтами памяти.
Программа обычно написана на C и скомпилирована на другом компьютере (это называется кросс-компиляция), а затем загружается в виде двоичных данных во флэш-память контроллера.
Что такое операционная система, если не программное обеспечение, работающее на "голой" машине? Вуду? XD
1-й: Конечно. Вам не нужна операционная система, чтобы просто записать несколько циклов.
Вам может понадобиться какая-то поддержка ОС, если вы хотите загружать или хранить файлы или данные, управлять вводом или выводом, но это также может быть сделано с помощью непосредственного вызова функций BIOS: считывание ключа с клавиатуры, запись на какой-либо экран или светодиод или последовательный интерфейс. Только когда вы захотите запустить несколько программ или иметь дело с прерываниями извне, конфликтующими ресурсами или чем-то подобным, тогда вам будет крайне необходима ОС.
2-е: ядро скомпилировано в машинный код, который выполняется во время загрузки. При запуске ядра C не задействован. C помогает только написать ядро или любую программу, которая должна работать, если она находится в ядре или "голом металле".
Просто посмотрите на любую игровую приставку до 32-битной. Почти у всех них вообще не было загрузочного кода, и они просто загружались прямо со вставленного картриджа.
Теоретически вы можете собрать загрузчик с помощью шестнадцатеричного редактора на другом компьютере.