Сколько стеков в процессоре?

Я изучаю взаимодействие с процессором и памятью в своем классе операционных систем и не понимаю, как работает стек памяти. Я понимаю, что стек идет по одной строке за раз и либо сохраняет данные в накопителе, либо отправляет инструкцию в IR.

Мой вопрос: у каждого процесса есть свой собственный стек памяти или у каждого процессора есть один гигантский стек памяти, который постоянно переключается между различными процессами (и иногда прерывается вызовами ввода-вывода)? Если есть один гигантский стек, то существует ли только один стек, потому что большинство современных процессоров могут выполнять столько инструкций в секунду, что кажется, что процессы выполняются одновременно с нашим медленным человеческим мозгом?

1 ответ

Решение

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

Чтобы ответить на вторую половину вашего вопроса несколько прямо, многозадачность - это иллюзия, она зависит только от масштаба. Каждое отдельное ядро ​​ЦП может запускать по одному процессу за раз, и оно (обычно) будет переключаться между всеми процессами в системе, которые не ожидают чего-то на частотах, достаточно высоких, чтобы они функционально выполнялись одновременно с человеческой точки зрения (большинство работающих системы с процессами со скоростью от 100 до 1000 раз в секунду, что все еще более чем достаточно для выполнения сотен миллионов инструкций ЦП в каждом процессе). С другой стороны, одноядерный процессор похож на человека, он должен регулярно переключать свое внимание на "многозадачный", а многоядерный процессор - как команда людей, каждый человек может делать только одно Надежно, но в целом, команда может легко выполнить столько задач, сколько есть членов команды.

Однако для целей вашего класса все это либо не имеет значения (если класс преподается с использованием минималистичной ОС, такой как CP/M или DOS, которая не выполняет многозадачность и, следовательно, имеет один стек, период), либо будет быть вовремя покрытым (если он преподается с использованием реальной ОС, такой как UNIX, MINIX, или даже одного из различных современных коммерческих предложений, все из которых выполняют многозадачность, что часто рассматривается в конце класса, потому что понимание требует понимания основы (например, как работает стек)).

Другие вопросы по тегам