-2

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

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

1 ответ1

2

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

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

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

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