none
Что такое стек процесса? RRS feed

  • Вопрос

  • Добрый день.

    Сразу скажу - я не программист, но для чтения некоторой литературы мне необходимо уяснить значение этого понятия.

    Что такое стек процесса? Почему эта память называется стек и в чём её назначение/отличие от памяти для текста программы и переменных?

    У процесса/потока может быть два стека в пользовательском режиме и в режиме ядра (я правильно понял?) чем они отличаются?


    Давайте начнем считать ИТ точной наукой, а не ремеслом, когда каждый делает так, как у него получается. (c)

Ответы

  • Добрый вечер.
    Сразу скажу - я программист наполовину (по должности).
    Судя по вопросу, Вам могут быть полезны  общие сведения о стеках.

    Эта память имеет специальную дисциплину обслуживания - LIFO (last-in,first-out) - последний поступивший обслуживается первым.
    Так как дисциплина обслуживания задана - явная адресация для доступа к данным в стеке не требуется.



    Для сравнения:
    Часто используются очереди. Например, очередь команд в процессоре; очередь сообщений; очередь запросов.
    В очередях используется другая дисциплина обслуживания - FIFO (first-in,first-out) - первый поступивший обслуживается первым.


    Для стеков, в архитектуре процессоров имеются специальные команды push (добавить в стек), pop (извлечь из стека) и специальные регистры - указатели стека.

    Стек используется:
    1) для сохранения точки возврата при вызове подпрограммы или вызове программы обслуживания прерывания
    (точка возврата сохраняется автоматически, без участия программистов);
    2) для обмена параметрами при вызовах подпрограм
    (порядок обмена определяется соглашениями, стандартизованными для языков программирования);
    3) для размещения локальных переменных
    (программистам не требуется запрашивать память у операционной системы для размещения переменных в подпрограммах);
    4) для различных трюков
    (пример - недавние истории с уязвимостями, связанными с переполнениями стека).



    Прикладным и системным процессам стек выделяется операционной системой в доступной памяти (архитектура х86).
    Сами процессы могут создавать программные стеки (в языках имеются средства для создания стеков).
    Например, в Framework имеется System.Collections.Stack.


    Насчёт количества и режимов:
    Сейчас используются виртуальные машины с собственной архитектурой.
    Какие там могут быть режимы и стеки я не знаю - здесь требуется изучать каждую виртуальную машину отдельно.


    PS. IT-специалистам должно встречаться понятие стек протоколов TCP/IP. В этом стеке задана дисциплина обслуживания при передаче данных.

    • Помечено в качестве ответа ITD27M01 3 мая 2011 г. 18:35

Все ответы

  • Добрый вечер.
    Сразу скажу - я программист наполовину (по должности).
    Судя по вопросу, Вам могут быть полезны  общие сведения о стеках.

    Эта память имеет специальную дисциплину обслуживания - LIFO (last-in,first-out) - последний поступивший обслуживается первым.
    Так как дисциплина обслуживания задана - явная адресация для доступа к данным в стеке не требуется.



    Для сравнения:
    Часто используются очереди. Например, очередь команд в процессоре; очередь сообщений; очередь запросов.
    В очередях используется другая дисциплина обслуживания - FIFO (first-in,first-out) - первый поступивший обслуживается первым.


    Для стеков, в архитектуре процессоров имеются специальные команды push (добавить в стек), pop (извлечь из стека) и специальные регистры - указатели стека.

    Стек используется:
    1) для сохранения точки возврата при вызове подпрограммы или вызове программы обслуживания прерывания
    (точка возврата сохраняется автоматически, без участия программистов);
    2) для обмена параметрами при вызовах подпрограм
    (порядок обмена определяется соглашениями, стандартизованными для языков программирования);
    3) для размещения локальных переменных
    (программистам не требуется запрашивать память у операционной системы для размещения переменных в подпрограммах);
    4) для различных трюков
    (пример - недавние истории с уязвимостями, связанными с переполнениями стека).



    Прикладным и системным процессам стек выделяется операционной системой в доступной памяти (архитектура х86).
    Сами процессы могут создавать программные стеки (в языках имеются средства для создания стеков).
    Например, в Framework имеется System.Collections.Stack.


    Насчёт количества и режимов:
    Сейчас используются виртуальные машины с собственной архитектурой.
    Какие там могут быть режимы и стеки я не знаю - здесь требуется изучать каждую виртуальную машину отдельно.


    PS. IT-специалистам должно встречаться понятие стек протоколов TCP/IP. В этом стеке задана дисциплина обслуживания при передаче данных.

    • Помечено в качестве ответа ITD27M01 3 мая 2011 г. 18:35
  • Спасибо за внятный разбор!
    Давайте начнем считать ИТ точной наукой, а не ремеслом, когда каждый делает так, как у него получается. (c)