Как связаны код, аппаратное обеспечение и ОС?
За эти годы (которых было относительно немного - я, конечно, новичок), я собрал некоторую общую информацию о компиляции, о том, куда идет код, и о том, какие тонкие задачи в ОС существуют. Некоторые заинтересованные друзья спрашивали меня, куда именно код идет после компиляции (я обычно использую C, но это очевидно относится к другим языкам) и что именно выполняет код, который компилируется. Я обнаружил, что на самом деле у меня нет ответа на этот вопрос, и у меня есть только предположения. Мне вообще нравится думать о том, как все это работает "под капотом", по аналогии, которую я объясню ниже, но я начинаю думать об этой аналогии как о радикальном упрощении или просто о неверном. Аналогия, которую я люблю использовать, выглядит следующим образом:
Я думаю о компьютере в целом как об игровой площадке, где программы - это все дети, а операционная система - это учитель, который наблюдает за всей ситуацией. Теперь, в разумных пределах, учитель предоставляет детям доступ к большинству частей игровой площадки, если они находятся под присмотром. Учитель, как правило, позволяет детям делать то, что им нравится, если они по крайней мере сначала спрашивают разрешение (например, "спрашивает" ядро о доступе к памяти). Однако, если ребенок пытается ударить другого ребенка по лицу, или пытается обращаться с игровой площадкой так, как это просто не должно выполняться, учитель имеет право удалить их с игровой площадки.
Это ужасное упрощение? Это просто неправильно? В действительности ли операционная система обрабатывает код после компиляции или работает непосредственно на оборудовании? Или оба? Этот вопрос, как правило, исключает интерпретируемые языки, так как они обычно запускаются с помощью другой программы. Хотя я не считаю, что эти знания имеют практическое значение для меня сейчас, я хотел бы иметь возможность объяснить эту систему любопытным людям.
Если есть какие-нибудь хорошие лекции или статьи о процессе, я бы хотел их увидеть. Я пытался найти что-то в Google для объяснения, но, если честно, я не знаю, что искать. Все, что я пробовал, казалось, полностью указывало на разные темы.
Спасибо за чтение!
PS Я чувствую, что это правильный форум для этого вопроса, но если это не так, пожалуйста, дайте мне знать!
1 ответ
Ну, во-первых, ваша аналогия заслуживает полноценной оценки. Но основой вашего вопроса является широкий термин Operating System
,,, вы должны лучше заменить его на the kernel
,
Это ужасное упрощение? Это просто неправильно? В действительности ли операционная система обрабатывает код после компиляции или работает непосредственно на оборудовании? Или оба?
Далее, предположение довольно хорошее и близко к реальной работе ядра и памяти! Мне это кажется правильным, так как ядро - это босс, и это правда! Кроме того, ядро - это единственное, что взаимодействует с аппаратным обеспечением. Но мысль о том, что Operating system handles code after completion
неправильно
Он только связывает код как процесс и обеспечивает подключение к аппаратному обеспечению для выполнения кода. Есть несколько компонентов компьютерной системы, которые облегчают запуск кода, такие как драйверы устройств, планировщики процессов, основная память. Ядро просто обрабатывает любые прерывания / исключения найдены / обнаружены во время выполнения программы. Иначе аппаратное устройство отвечает за работу / выполнение исполняемого кода!!!