стек викликів

Стек викликів (від англ. Call stack; стосовно до процесорів - просто «стек») - в теорії обчислювальних систем, LIFO-стек. який зберігає інформацію для повернення управління з підпрограм (процедур) в програму (або підпрограму, при вкладених або рекурсивних викликах) і / або для повернення в програму з обробника переривання (в тому числі при перемиканні задач в багатозадачному середовищі).

Стек викликів зазвичай реалізований одним із способів:

При відсутності стека або обмеженості його глибини, вкладені виклики виключені або їх кількість обмежена. При необхідності більшої вкладеності, стек викликів або його розширення можуть бути реалізовані програмно.

Виклик підпрограми і повернення з підпрограм і обробників переривань. як правило виконуються спеціалізованими інструкціями процесора. Крім інструкцій викликів і повернень, процесори часто мають інструкції для використання стека викликів також і під збереження даних - їх приміщення в стек, зняття з стека, модифікації вмісту стека.

Інструкції виклику, повернення і роботи зі стеком можуть відрізнятися за розміром для збереження даних (в цьому випадку необхідно використовувати відповідні один одному інструкції або їх еквіваленти).

Іноді процедури повернення з підпрограми і обробника переривань відрізняються один від одного, і також вимагають різних команд (наприклад, при поверненні з переривання часто необхідно відновити з стека регістр прапорів і / або дозволити обробку конкурентних переривань, яка може автоматично заборонятися при виклику обробника).

При відсутності спеціалізованих інструкцій (в процесорах з RISC-) виклики, повернення та інша робота зі стеком викликів реалізуються звичайними інструкціями роботи з пам'яттю / регістрами і передачі управління.

стек викликів

Типовий випадок використання стека мовою високого рівня на прикладі виклику процедури з аргументами «A, B, C» (з угодами виклику Паскаля) в порівнянні з мовою асемблера

Використання стека в багатозадачних системах

У багатозадачних системах, кожна задача як правило має свій власний стек, і при перемиканні завдання покажчик стека процесора переставляється на нього.

нестандартне використання

Стек може бути використаний нестандартно, наприклад:

альтернативне використання

При альтернативному використанні, покажчик стека переставляється на область даних і інструкції для роботи зі стеком використовується в якості строкових операцій для обробки послідовних даних в пам'яті.

При альтернативному використанні обробка переривань неможлива, т. К., Щоб уникнути пошкодження даних переривання повинні заборонятися.

  • Імперативні мови програмування високого рівня, як правило, не мають можливостей явного оперування стеком викликів, але є і виключення. Наприклад, в Forth є прямий доступ до системного стеку викликів (під назвою «стека повернень», на відміну від «стека даних» цієї мови).

Схожі статті