Программный стек - это стек управляемый программой.
Аппаратный стек - это стек управляемый устройством, имеющим доступ к оперативной памяти. Иногда, аппаратным стеком
могут называть какой-нибудь вычислительный кластер.
стеком может служить абсолютно любая
часть оперативной памяти.
Нет. Абсолютно любая не может. Всегда есть чем-то занятая область памяти, даже при начальном запуске.
ОС выделяет по одному стеку на
каждую выполняемую программу. Все верно?
Нет. Что за ОС и какая программа, процессор какого поколения и архитектуры? Программа может быть составлена так, что ей
вообще стек не нужен. Несколько программ могут использовать одну, общую область памяти под свои общие нужды - стек или не
стек, какая разница? Это не чёткое понятие "программа", даже для самой ОС, а команды для работы со стеком могут
отсутствовать и реализация стека в руках программиста.
Но я не понимаю, почему ограничение
в 1 Мб не срабатывает.
Нет такого ограничения. Это значение по умолчанию, определённое в настройках компоновщика.
Аппаратный стек это стек у которого
есть специальные регистры. Можно ещё дополнить есть специальные машинные команды.
Нет надобности в таком стеке, с регистрами. Это просто очередь.
Команды могут присутствовать в специализированных
системах, а могут отсутствовать.
Если уж "аппаратный стек", то таковой должен быть связан с аппаратурой или "железом", если аппаратный стек реально существует. В последних же сообщениях разговор пошёл про программный стек.
Верно.
В некоторых древних примитивных процессорах стек, например, адресов возвратов из подпрограмм находился в отдельных аппаратных регистрах, отличных от памяти данных.
Это где? Пример пожалуйста.
Стек, реализуемый при помощи выделенного регистра стека, хранящего указатель в общей памяти, и отдельных команд процессора для работы с этим регистром, тоже называют "аппаратным".
Чё за бред? Нет никакого выделенного регистра стека. Есть сегментный регистр "SS". Основное назначение которого - работа
со стеком. А указатель хранится в регистре "SP", а никак не в общей памяти!
Ну и про сам термин аппаратный стек. Как выше только что сказали, у него может быть два значения: а) отдельная память в процессоре (очень ограниченного объёма, физически ограниченная по размеру), не память данных и не регистры, а нечто типа встроенного кэша; б) регистры в процессоре, которые указывают куда-то в память данных, т.е. в этом случае стек является частью памяти данных (и часто с отдельными специальными командами для упрощения работы с ним). Во втором случае часто стек нужен для сохранения адресов возвратов из процедур и функций, а хранение данных в нём - дополнительная удобная функция, использующаяся не во всех процессорах, не во всех ОС и даже не во всех программах.
Фантазировать не надо.