#performance #operating-system
#Производительность #операционная система
Вопрос:
Этот вопрос касается операционных систем в целом. Существует ли какой-либо необходимый механизм в реализации операционных систем, который влияет на поток инструкций, которые моя программа отправляет в процессор?
Например, если для моей программы установлен максимальный приоритет в ОС, будет ли она работать точно так же при запуске без ОС?
Комментарии:
1. И да, и нет. Если мы пренебрегаем задержками загрузки / запуска / завершения, если ваш один поток достаточно мал, чтобы не генерировать ошибки страницы, не выполняет ввода-вывода и системных вызовов (!), Возможно, что ваша ОС никогда не будет введена и, следовательно, не будет иметь никакого эффекта вообще. Очевидно, что это довольно редко 🙂 Я не вижу, как приоритет будет иметь значение, если больше ничего не было загружено.
Ответ №1:
Существует ли какой-либо необходимый механизм в реализации операционных систем, который влияет на поток инструкций, которые моя программа отправляет в процессор?
Не строго необходимые механизмы (в зависимости от того, как вы определяете «ОС»); но обычно есть IRQ, исключения и переключатели задач.
IRQ используются устройствами для запроса внимания ОС (их драйвера устройства) и прерывания потока инструкций, которые ваша программа отправляет в CPU. Альтернативой является опрос, который тратит огромное количество процессорного времени на проверку того, нуждается ли устройство во внимании, когда оно, вероятно, этого не делает. Поскольку приложениям необходимо использовать устройства (ввод-вывод файлов, клавиатура, видео и т. Д.) И Тратить время процессора — это плохо; IRQ значительно повышают производительность приложений.
Исключения (например, IRQ) также прерывают обычный поток инструкций. Они возникают, когда обычный поток инструкций не может продолжаться либо из-за сбоя вашей программы, либо из-за того, что вашей программе что-то нужно. Наиболее распространенной причиной исключений является виртуальная память (например, использование пространства подкачки, чтобы позволить приложению иметь больше памяти, чем на самом деле существует, чтобы приложение могло работать должным образом; когда исключение сообщает ОС, что ваша программа пыталась получить доступ к памяти, которая сначала должна быть извлечена с диска). В целом; это также повышает производительность по нескольким причинам (потому что «невозможно выполнить, потому что недостаточно оперативной памяти» можно считать «нулевой производительностью»; и потому, что различные приемы уменьшают потребление оперативной памяти и увеличивают объем оперативной памяти, который можно использовать для таких вещей, как кэширование файлов, которые улучшают скорость ввода-вывода файлов).
Переключение задач является основой многозадачности (например, возможность одновременного запуска более одного приложения). Если задач, требующих процессорного времени, больше, чем процессоров, то ОС (планировщик) может (в зависимости от приоритетов задач и дизайна планировщика) переключаться между ними, чтобы все задачи получали некоторое время процессора. Однако; большинство приложений тратят большую часть своего времени на ожидание чего-либо (например, ожидание нажатия пользователем клавиши) и не требуют процессорного времени во время ожидания; и если ОС выполняет только одну задачу, планировщик ничего не делает (задача не переключается, потому что нет другой задачи для переключения). Другими словами, если ОС поддерживает многозадачность, но вы выполняете только одну задачу, тогда это не имеет значения.
Обратите внимание, что в некоторых случаях IRQ и / или задачи также используются для «оппортунистического» выполнения работы в фоновом режиме (когда аппаратному обеспечению нечего делать) для повышения производительности (например, предварительная выборка, предварительная обработка и / или предварительное вычисление данных до того, как они понадобятся, чтобы результирующие данныедоступно мгновенно, когда это необходимо).
Например, если для моей программы установлен максимальный приоритет в ОС, будет ли она работать точно так же при запуске без ОС?
Лучше всего думать об этом как о множестве уровней — аппаратное обеспечение и устройства (процессор и т. Д.), С ядром и драйверами устройств сверху, С приложениями поверх этого. Если вы удалите любой из уровней, ничего не получится (например, как приложение может читать и записывать файлы, когда нет файловой системы и драйверов дисковых устройств?).
Если вы перенесете всю функциональность, предоставляемую ОС, в приложение (например, статически связанную библиотеку, которая может заставить приложение загружаться на голом металле); тогда, если функциональность одинакова, производительность будет такой же.
Повысить производительность можно только за счет сокращения функциональности. Например, если вы избавитесь от защиты, вы повысите производительность (временно, пока ваше приложение не станет частью ботнета злоумышленника, и производительность значительно ухудшится из-за всей добычи биткойнов, которую оно выполняет). Аналогичным образом вы можете избавиться от гибкости (перезагружайте компьютер при подключении другого USB-накопителя) или отказоустойчивости (удаляйте все свои данные без предупреждения, когда устройства хранения начинают отказывать, потому что программное обеспечение предполагает, что оборудование постоянно идеально).