Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по ОС мои.docx
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
2.82 Mб
Скачать
  1. Стек потока под управлением Windows nt (2000).

ОС сама резервирует место в виртуальном адресном пространстве регион для размещения стека потока.

Глобальные переменные хранятся в специальном сегменте, а локальные в стеке.

Рассмотрим стек Windows NT, 2000. Под стек по умолчанию выделяется регион размером 1 Мб и передаются две страницы физической памяти. Значения устанавливаемые по умолчанию можно изменять в программе. Размер физической памяти можно менять при вызове функции CreateThread(…). Так выглядит стек при создании:

080FF000

08000000

Указатель стека устанавливается в верхней части стека. Физическая память выделена двум страницам.

Вторая страница имеет флаг запрещения доступа.

По мере создания различных локальных переменных стек разрастается, по мере его заполнения происходит переход во вторую страницу. Но эта страница защищена. ОС будет извещена о попытке записи на защищенную страницу и обрабатывает её следующим образом: снимает флаг запрещения записи со второй старницы. Выделяет стеку третью страницу физической памяти и присваивает третьей странице атрибуты PAGE_READWRITE и флаг PAGE_GUARD.

Рассмотрим ситуацию, когда стек потока фактически заполнен.

ОС выполняет следующее:

Флаг PAGE_GUARD снимается и физическая память выделяется следующей странице.

Физическая

память

После этого ОС формирует исключение, то есть информирует процесс о Stack Overflow. В этом случае процесс должен среагировать, если этого не произойдёт, то производится попытка записи на зарезервированную страницу, то есть когда это происходит, то ОС берёт управление на себя и завершает не только данный поток, а и весь процесс. В этом случае ОС даже не извещает пользова-теля. Процесс исчезает бесследно.

Почему нижняя страница стека всегда остаётся зарезервированной?

  1. Для того, чтобы защитить стек от перезаписи.

Стек

Зарезервированная страница

Данные

Физическая

память

Физическая

память

  1. Для защиты программ и данных при переполнении стека. Например,

Стек

Пароли

Физическая

память

Стираем пароли и получаем доступ к сети.

Стек потока под Windows 95, 98.

Особенностью в том, что размер стека составляет 1 Мб + 128 Кб. Структура:

Функции компилятора для контроля стека.

В случае DOS при компиляции программ нужно было включать дополнительный программный код для конроля размера стека. В Windows 95, 98, NT этой проблемы нет, но возникает проблема контроля за выделением страниц физической памяти. Например,

VOID SomeFunc(…)

{

int Values[4000];

Values[0]=0;

}

переменная локальная

четыре страницы

При создании стека резервируется 16000 байт. Физическая память выделена только двум страницам, поэтому при компиляции программы вставляется дополнительный код. Этот дополнительный код работает по следующему алгоритму:

nByteNeeded = nByteNeeded – размер страницы

ОС выделяет физическую память

Запись на страницу

Указатель стека смещается на страницу вниз

Выход

nByteNeeded > размера страницы

Определение положения указателя стека

Определение размера страницы

Ф.С.

Ф.С.

Ф.С.

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