Голая машина
![]() | Эта статья включает список общих ссылок , но в ней отсутствуют достаточные соответствующие встроенные цитаты . ( Май 2021 г. ) |
В информатике «голая машина» (или «голый металл» ) относится к компьютеру, выполняющему инструкции непосредственно на логическом оборудовании без промежуточной операционной системы . Современные операционные системы развивались на различных этапах: от элементарных до современных сложных, высокочувствительных систем, включающих множество сервисов. После разработки программируемых компьютеров (которые не требовали физических изменений для запуска различных программ), но до разработки операционных систем, последовательные инструкции выполнялись на компьютерном оборудовании непосредственно с использованием машинного языка без какого-либо уровня системного программного обеспечения. Этот подход называют «голой машиной», предшественником современных операционных систем. Сегодня это в основном применимо ко встроенным системам и прошивкам с критичными требованиями к задержке, в то время как обычные программы запускаются системой времени выполнения , наложенной на операционную систему.
Преимущества [ править ]
Для конкретного приложения в большинстве случаев реализация на «голом железе» будет работать быстрее, используя меньше памяти и, следовательно, более энергоэффективной. Это связано с тем, что операционным системам, как и любой программе, для работы требуется определенное время выполнения и объем памяти, а на «голом железе» они больше не нужны.Например, любая аппаратная функция, включающая входы и выходы, доступна напрямую на «голом железе», тогда как та же функция, использующая ОС, должна направлять вызов подпрограмме, потребляя время работы и память. [1]
Недостатки [ править ]
Для конкретного приложения программирование на «голом железе» требует больше усилий для правильной работы и является более сложным, поскольку службы, предоставляемые операционной системой и используемые приложением, должны быть повторно реализованы в соответствии с потребностями. Эти услуги могут быть:
- Загрузка системы (обязательно)
- Управление памятью: сохранение местоположения кода и данных об аппаратных ресурсах и периферийных устройствах (обязательно).
- Обработка прерываний (если есть)
- Планирование задач, если приложение может выполнять более одной задачи.
- Управление периферийными устройствами (если есть)
- Управление ошибками, если хотите или необходимо
Отладка «голой» программы затруднена, поскольку:
- Не существует ни уведомлений об ошибках программного обеспечения, ни управления сбоями, если они не были реализованы и проверены.
- Стандартного вывода не существует, если он не реализован и не проверен.
- Машина, на которой написана программа, не может быть той же, на которой программа выполняется, поэтому целевым оборудованием является либо эмулятор /симулятор, либо внешнее устройство. Это заставляет настроить способ загрузки голой программы на цель ( перепрошивка ), запуска выполнения программы и доступа к целевым ресурсам.
Программирование на «голом железе» обычно выполняется с использованием языка, близкого к аппаратному, такого как Rust , C++ , C , ассемблер , или даже для небольших объемов кода или непосредственно машинного кода очень новых процессоров . [2] Все предыдущие проблемы неизбежно означают, что программы на «голом железе» очень редко являются переносимыми .
Примеры [ править ]
Ранние компьютеры [ править ]
Ранние компьютеры, такие как PDP-11 , позволяли программистам загружать программу, представленную в машинном коде , в ОЗУ . Итоговую работу программы можно контролировать с помощью индикаторов , а выходные данные получать с магнитной ленты , устройств печати или хранилища .
Встроенные системы [ править ]
Программирование «голого» компьютера остается обычной практикой во встроенных системах , где микроконтроллеры или микропроцессоры часто загружаются непосредственно в монолитное специализированное программное обеспечение, не загружая отдельную операционную систему. Такое встроенное программное обеспечение может различаться по структуре, но самая простая форма может состоять из бесконечного основного цикла , вызывающего подпрограммы, отвечающие за проверку входных данных, выполнение действий и запись выходных данных.
Развитие [ править ]
Подход к использованию голых машин проложил путь новым идеям, которые ускорили эволюцию разработки операционных систем .
Этот подход выявил необходимость в следующем:
- Устройства ввода/вывода (I/O) для удобного ввода кода и данных:
- Были созданы устройства ввода, такие как клавиатуры . Это было необходимо, поскольку более ранние компьютеры часто имели уникальные, тупые и запутанные устройства ввода .
Например, программы загружались в PDP-11 вручную, с помощью ряда тумблеров на передней панели устройства. Клавиатуры намного превосходят эти старинные устройства ввода, поскольку набирать код или данные будет гораздо быстрее, чем использовать тумблеры для ввода их в машину. Позже клавиатуры станут стандартом почти для каждого компьютера, независимо от марки и цены.
- Устройства вывода, такие как компьютерные мониторы , позже будут широко использоваться и используются по сей день. Они оказались более удобными по сравнению с более ранними устройствами вывода , такими как набор индикаторов на Altair 8800 , который указывал бы на состояние компьютера.
Компьютерные мониторы также могут легко отображать выходные данные программы в удобной для пользователя форме. Например, нужно было хорошо знать конкретный ранний компьютер и его систему отображения, состоящую из множества индикаторов, чтобы хотя бы начать понимать состояние аппаратного обеспечения компьютера. Напротив, любой, кто умеет читать, должен быть в состоянии понять хорошо продуманный пользовательский интерфейс современной системы, не зная ничего об аппаратном обеспечении компьютера, на котором запускается программа.
- Более быстрые, дешевые и более широко доступные вторичные устройства хранения данных для хранения программ в энергонезависимой памяти . Это было необходимо, поскольку для полезного использования компьютера было неудобно вводить код вручную, который терялся при каждой перезагрузке из-за того, что система сохраняла его в энергозависимой памяти .
- Требование удобного языка высокого уровня и транслятора такого языка высокого уровня в соответствующий машинный код.
- Линкеры для связывания библиотечных модулей, которые могут быть написаны пользователем или уже доступны в системе.
- Загрузчики для загрузки исполняемых файлов в оперативную память из вторичного хранилища .
- Подходящие устройства ввода-вывода , такие как принтеры , для создания печатной копии результатов, генерируемых программами.
См. также [ править ]
Ссылки [ править ]
- ^ Гордон, Абель; Амит, Надав; Хар'Эл, Надав; Бен-Иегуда, Мули; Ландау, Алекс; Шустер, Ассаф; Цафрир, Дэн (2012). «ЭЛИ» . Уведомления ACM SIGPLAN . 47 (4): 411–422. дои : 10.1145/2248487.2151020 .
- ^ «Практическое руководство по Bare Metal C++» . Проверено 16 декабря 2022 г.
Дальнейшее чтение [ править ]
- Зильбершац, А.; Гэлвин, Питер; Ганье, Грег (2003). Концепции операционной системы . Уайли. ISBN 9780471250609 .