Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
33__33__33__33_ItogOS.docx
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
1.55 Mб
Скачать

19. Стековая память

1) Стек – структура данных, работающая по принципу LIFO («Последний вошёл – первый вышел»). Со стеком могут быть выполнены 2 операции: Поместить элемент в стек (push) и Извлечь элемент из стека (pop). Верхний элемент стека (последний помещённый) называется границей стека.

2) Стек вызовов – область памяти, работающая по принципу LIFO и хранящая информацию для возврата управления из подпрограммы.

При вызове подпрограммы в стек заносится адрес возврата – адрес, на который подпрограмма должна вернуть управление, т.е. адрес инструкции, следующей после вызвавшей. В стеке вызовов также могут храниться аргументы, переданные подпрограмме. (Зависит от языка программирования и используемого соглашения вызова. Так, в C по умолчанию все аргументы передаются в стеке в обратном порядке.) Локальные переменные подпрограммы также хранятся в стеке.

По окончании подпрограммы адрес возврата извлекается из стека, и управление передаётся по этому адресу. В зависимости от соглашения вызова очистку стека от аргументов процедуры производит вызванная процедура или вызывающий.

Некоторые процессоры, в том числе x86-совместимые, имеют встроенные специальные регистры и инструкции для работы со стеком текущего потока. В отдельном регистре хранится указатель на текущую границу стека.

На процессорах x86 стек растёт вниз, т.е. элементы помещаются в память со старших адресов к младшим.

При программировании с использованием языка высокого уровня всю работу со стеком берёт на себя компилятор, и реализация скрыта от программиста.

С точки зрения ОС стек выделяется для каждого потока из адресного пространства процесса. В Microsoft Windows по умолчанию размер стека равен 1 Мб, а первоначально выделяется 4Кб. Эти значения могут быть изменены как при компиляции программы, так и при создании нового потока.

Stack Overflow – ситуация, когда поток исчерпал весь выделенный ему стек. Может возникнуть, например, при безусловных рекурсивных вызовах. Обычно вызывает аварийное завершение процесса.

Попытка получить элемент из пустого стека так же вызовет аварийное завершение, но такая ситуация исключительно редка.

  1. Виртуальная память

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

Методы виртуализации памяти: свопинг (swapping), виртуальная память (virtual memory).

Виртуальная память

Методы реализации виртуальной памяти:

  1. Страничная виртуальная память – организует перемещение данных между ОП и диском страницами – частями виртуального адресного пространства фиксированного и сравнительно небольшого размера.

  2. Сегментная виртуальная память предусматривает перемещение данных сегментами – частями виртуального адресного пространства произвольного размера, полученными с учетом смыслового значения данных.

  3. Сегментно-страничная виртуальная память использует двухуровневое деление: виртуальное адресное пространство делится на сегменты, а затем сегменты делятся на страницы. Единицей перемещения данных является страница.

  4. Для временного хранения сегментов и страниц на диске отводится специальная область – страничный файл или файл подкачки (paging file).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]