Сколько стеков в процессоре? [закрытый]

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

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

9
задан Darien Springer
17.12.2022 20:56 Количество просмотров материала 3410
Распечатать страницу

1 ответ

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

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

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

2
отвечен Austin Hemmelgarn 2022-12-19 04:44

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх