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


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

> > > Я говорил о том, что отдельные сегменты стека не позволят испохабить стеки "соседних" нитей.
> > Гм, а это частая проблема?
> А что ж тогда "stack probe" генерят? :)

"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 14:45 Mozilla/5.0 (OS/2; U; Warp 4.5; en-US; rv:1.3) Gecko/2003031




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.