RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : Ответить на сообщение
Имя:
e-mail:
FIDO:
Home page:
сохранить данные о вас
Тема:
> > > > Я говорил о том, что отдельные сегменты стека не позволят испохабить стеки "соседних" нитей. > > > Гм, а это частая проблема? > > А что ж тогда "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 - в зависимости от количества сегментов кода.
_, _, _, _, _ _, _,_
(_ | / \ |\ | / \ |_/
, ) | , \ / | \| \ / | \
~ ~~~ ~ ~ ~ ~ ~ ~
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.