С точки зрения аппаратного обеспечения вы правы, что весь процессор выполняет «выполнение инструкций» по одному за раз. В некотором (возможно, слегка упрощенном) смысле это все, что происходит.
Если у вас была какая-то конкретная вычислительная задача, вы могли бы написать подходящий поток инструкций, чтобы вы могли задействовать свое оборудование, оно выполняет ваши инструкции, а затем останавливается или выключается или что-то еще. Именно так на самом деле работали очень ранние компьютеры.
Однако этот режим работы компьютера чрезвычайно громоздкий и вообще не масштабируется, так как требуется, чтобы один оператор взял на себя ответственность всего и в процессе заново изобрел все виды колес. Вот в чем заключается концепция операционной системы : ОС - это особый тип потока команд, который загружается при запуске, который в свою очередь может в свою очередь загрузить и выполнить другие бит инструкций, динамически. Эта компартментализация позволяет повторно использовать основные функции (думать о драйверах устройств) и динамически адаптировать функциональные возможности машины (т. Е. Во время работы, в отличие от перепрограммирования и сброса). Более того, он позволяет динамически загружать те части инструкций, которые должны быть созданы разными людьми, так что у нас есть одна платформа, которая может выполнять «пользовательские инструкции», т. Е.что мы обычно понимаем как «программу».
Итак, теперь у нас есть все части: код, который процессор выполняет при его включении, - это операционная система, а операционная система динамически управляет выполнением дополнительного кода. Большинство из этих единиц исполнения называются процессов. (Но не весь код такой: например, загружаемые модули ядра в Linux динамически загружаются, но не представляют собой процесс.) То есть процесс представляет собой абстрактную концепцию в операционной системе, которая определяет между собственным кодом ОС и «хостинг» код, который он выполняет по запросу.
В зависимости от типа ОС выполнение процессов может иметь такие необычные функции, как виртуальная память (каждый процесс видит свою собственную, отдельную память) и защиту (никакой процесс не может влиять на работу ОС или других процессов) , ОС реализует такие функции, используя функции ЦП: модуль диспетчера памяти, который обеспечивает преобразование адресов, и защитные кольца, которые ограничивают инструкции, доступные для части выполнения. Однако не все ОС делают это; в DOS, например, каждый процесс имеет полный доступ к физической памяти и, следовательно, к состоянию ОС. Независимо от того, ОС обычно предоставляет API для процессов (например, «системные вызовы»), снова используя аппаратные функции (прерывания или специальные инструкции для системного вызова), а пользовательский код обычно взаимодействует с окружающей средой через этот API, а не напрямую разговаривает с периферийными устройствами. Например, это означает, что аппаратные драйверы реализованы только операционной системой, а код пользователя может делать непрозрачные «выходные сообщения» без необходимости знать детали доступных устройств вывода.
Пример: Может быть, это полезно, чтобы показать, что процессы на популярной операционной системы Linux, работающий на платформе х86: Новый процесс начинается, когда существующий процесс (например, оболочка, или init
) вызывает clone
системный вызов , путем повышения прерывания 128. Прерывание делает управление передачей ЦП обработчиком прерываний, который был установлен ОС во время загрузки. Когда введен обработчик прерываний, CPU переключается на режим 0, привилегированный. Обработчик прерываний заставляет ядро создать новый процесс, а затем передает управление обратно вызывающему процессу (что подразумевает переход на защитное кольцо 3, непривилегированное; процессы только когда-либо выполняются в кольце 3). Для создания нового процесса ядро создает соответствующие внутренние структуры бухгалтерского учета, настраивает новые таблицы страниц в MMU и затем передает управление точке входа для вызова clone
, аналогично тому, как возвращается исходный вызов. (Я задумываюсь о проблемах планирования здесь, только одна передача контроля происходит одновременно, а другие «запланированы» позже.) Тот факт, что новый процесс существует сейчас, просто отражен в внутренних бухгалтерских данных ядра , CPU ничего не знает об этом; все, что он видит, это то, что прерывания увольняются, а таблицы страниц регулярно меняются.
Один вопрос на вопрос! –
Ответ: Нет, ни один процессор не знает о процессах. Защищенный режим просто изолирует последовательность инструкций. Он был разработан, чтобы помочь ОС изолировать процессы, но он полностью ортогонален им. Вы можете прочитать Руководство Intel 3 для подробного объяснения. –
@RobertColumbia Я редактировал свой вопрос, чтобы вписаться в вашу коробку. – Izzo