RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : Следующий шаг. Немного конкретики.


Список сообщений | Написать новое | Ответить на сообщение | Домой Поиск:
Предыдущее сообщение | Следующее сообщение
From : Василий А. Сидоров
To : LightElf
Subj : Следующий шаг. Немного конкретики.

> "stack probe" != "stack overflow check".
> Расписываю на пальцах. Обычно стек нитке выделяют некоммиченый, точнее - несколько страниц коммичено, а остальное нет. Ставять guard page, чтобы давать столько стека, сколько реально нужно нитке.
> Проблема возникает, если нитка одномоментно выделяет себе более 4 кил под локальные переменные. При этом ESP перескакивает через guard page и начинает указывать на некоммиченый стек, что ессно вызывает page fault/stack fault при обращении. Stack probe всего лишь трогает свежевыделенные локальные переменные начиная от бОльших адресов к меньшим, с шагом меньше 4кб, чтобы вызывать коммит стека.
Я знаю, как работает защитная страницы, вопрос был "почему стек просто не коммитят?".
> > > > Ну и поскольку SS<>CS нельзя (вообще говоря) исполнять код в таком буфере.
> > > Этого можно добиться несколькими другими способами и не париться с far-указателями.
> > Нету дальних указателей. Нету. Это _малая_ модель.
> Специально для тебя абисняю: _малая_ модель - это когда _и_стек _и_данные лежат в _одном_ сегменте. Вот тогда можно в основном обходиться near указателями. Раздельные сегменты стека и данных - это compact или large - в зависимости от количества сегментов кода.
Объснение принято, но дальних указателей всё равно нет :)

Fri 15 Jun 2007 19:11 Mozilla/5.0 (OS/2; U; Warp 4.5; ru-RU; rv:1.8.1.2) Gecko/200




Programmed by Dmitri Maximovich, Dmitry I. Platonoff, Eugen Kuleshov.
25.09.99 (c) 1999, RU/2. All rights reserved.
Rewritten by Dmitry Ban. All rights ignored.