3

Хорошо, поскольку мы знаем, что один процессор может выполнять одну инструкцию за один раз, что означает, что один процессор может одновременно выполнять либо инструкцию операционной системы, либо инструкцию пользовательской программы.

Теперь, как это возможно, что операционная система и пользовательская программа могут работать одновременно в одном процессоре?

Назначен ли процессор пользовательской программе, когда вы открываете программу и когда вы закрываете пользовательскую программу, процессор возвращается обратно в операционную систему?

1 ответ1

7

Время нарезки. Процессор переключается между задачами каждые несколько миллисекунд, поэтому наблюдателю кажется, что он выполняет две или более операции одновременно. Существует также тот факт, что ОС имеет некоторый контроль над тем, как потокам предоставляется время выполнения, так что она может составлять колоду, но планирование потоков выходит за рамки всего, что я желаю обсудить с этим ответом.

Процессоры запускают процессы как один или несколько потоков инструкций, и каждый поток представляет свой собственный "контекст" для инструкций, которые он выполняет (значения регистров и т.д.).

Процессоры передают инструкции нескольких потоков в очередь и выполняют их по порядку. Когда инструкция из другого потока поступает в начало очереди, ЦП выполняет "переключение контекста", чтобы приостановить один поток и выполнить инструкции из другого. Это необходимо для того, чтобы ЦП мог запускать несколько потоков, казалось бы, одновременно, и для обработки прерываний , возникающих во время выполнения ЦП другими задачами.

Вы конкретно упоминаете ОС и пользовательские программы. В той степени, в которой пользовательский интерфейс ОС остается чувствительным к пользователю во время работы программы, это все о временном разрезе, но не менее важно то, что происходит, когда программа использует функции ОС для выполнения задач. Как отметил @ Techie007, различие между ОС и пользовательскими программами уменьшается, когда службы ОС выполняют половину или всю работу. Это размытие идет еще глубже, чем когда программы ссылаются на системные библиотеки для функциональности. Когда программа использует вызов ОС для выполнения функции, фактический машинный код этой функции загружается в ОЗУ как часть потока инструкций потока, поэтому поток пользовательской программы фактически выполняет код ОС, а не наоборот!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .