[14:38:49] <alexey.veselovsky> .
[15:06:55] <Зорин Сергей> test
[15:06:56] <Жаба> Зорин Сергей, passed
[16:05:17] <alexey.veselovsky> vlad2: на маке setcontext так просто использовать нельзя
[16:05:20] <alexey.veselovsky> ибо
[16:05:27] <alexey.veselovsky> #error The deprecated ucontext routines require _XOPEN_SOURCE to be defined
[16:05:33] <alexey.veselovsky> недосистема какая-то
[17:59:31] <vlad2> Ой, не гвори.
[18:00:03] <alexey.veselovsky> хотя если задифайнить этот _XOPEN_SOURCE, то все становится хорошо
[18:00:19] <alexey.veselovsky> vlad2: а ты понимаешь как работает ulimit?
[18:00:31] <alexey.veselovsky> я лично - не понимаю. как они умудряются узнать сколько я стека использовал?
[18:04:30] <vlad2> Тебе вообще мак зачем? :) Ты ж на линуксе все хотел?
[18:04:46] <alexey.veselovsky> ну, мак под руку попался, вот тут и попробовал
[18:04:52] <vlad2> Тема про наследование в жабаскрипте никому не нужна. Я один долбаюсь ;)
[18:05:06] <alexey.veselovsky> а я еще не дошел до нее
[18:11:25] <alexey.veselovsky> блин. не понимаю я как это работает
[18:12:17] <alexey.veselovsky> размер стека с одной стороны зависит от контекста (get/setcontext),  а с другой каким-то левым образом ulimit его пасет
[18:12:33] <alexey.veselovsky> и сегфолтит по необходимости
[18:12:46] <alexey.veselovsky> то есть легко ss_size может быть 9 метров, а ulimit 4 метра
[18:13:21] <alexey.veselovsky> это на и на маке и в линухе
[18:13:34] <vlad2> magic
[18:13:43] <vlad2> юез него никак в CS
[18:21:19] <alexey.veselovsky> проблемы с пониманием :-)
[18:21:38] <alexey.veselovsky> оно делает то, что не укладывается в мои текущие представления
[18:22:10] <alexey.veselovsky> а еще мне крышу сносит ulimit -s unlimited
[18:22:14] <alexey.veselovsky> и оно реально работает
[18:22:30] <alexey.veselovsky> прога в рекурсии спокойно отожрала всю ОЗУ
[18:23:03] <Зорин Сергей> а что за ulimit такой? я в этих ваших инструментах вообще неграмотный
[18:23:34] <alexey.veselovsky> команда в консоли которая задает всякие лимиты в текущей сессии
[18:24:05] <Зорин Сергей> люнуксячья чтоле
[18:24:08] <alexey.veselovsky> ну и выводит при желании их все. то есть там их можно узнать. например вот:
[18:24:15] <alexey.veselovsky> нет, не линуксячье
[18:24:20] <alexey.veselovsky> позиксное
[18:24:39] <alexey.veselovsky> $ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 256
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 709
virtual memory          (kbytes, -v) unlimited
[18:24:53] <Зорин Сергей> а ключик -s это стэк?
[18:25:02] <alexey.veselovsky> угу
[18:25:30] <alexey.veselovsky> там в табличке подсказки есть, какой ключие для данного типа ресурса использовать
[18:25:45] <Зорин Сергей> и оно на любых процах работает?
[18:26:20] <alexey.veselovsky> ulimit -s unlimited, или просто ulimit?
[18:26:34] <Зорин Сергей> стэк
[18:27:11] <alexey.veselovsky> фиг знает. надо подокить. я пока только на x86 проверил
[18:27:24] <Зорин Сергей> и от компилятора не зависит?
[18:27:52] <alexey.veselovsky> не зависит
[18:28:18] <alexey.veselovsky> (хотя компилятор конечно может ограничить самостоятельно)
[18:29:24] <alexey.veselovsky> но unlimited стек - это только линукс
[18:29:38] <alexey.veselovsky> в макоси нет такой опции для стека
[18:35:21] <Зорин Сергей> и как оно работает? т.е. не внутренне а смысл?
[18:35:59] <alexey.veselovsky> а вот этого я не знаю.
[18:36:22] <alexey.veselovsky> я вообще несколько удивлен, что система что-то знает про стек :-) ну, то есть зачем бы ей знать? у меня же может быть несколько стеков
[18:38:13] <Зорин Сергей> вот мы опять наверное о разных стэках говорим ))) я об аппаратном
[18:38:46] <alexey.veselovsky> ок. а что в твоем понимании аппаратный стек? из стека там только sp и все
[18:38:58] <alexey.veselovsky> причем в sp я могу записать любое число в любой момент
[18:40:37] <Зорин Сергей> ну на, стэк это лишь механизм. sp — это указатель сегмента памяти, сегмент имеет размер и контролируется диспетчером памяти
[18:41:18] <alexey.veselovsky> стоп. sp это указатель на конкретный байтик. модель памяти у линуксов и виндов вполне плоская. нет там сегментов
[18:41:25] <Зорин Сергей> выход за пределы сегмента может приводить к аппаратным прерываниям для обработки таких ситуаций
[18:41:27] <alexey.veselovsky> максимум что там есть - страницы
[18:42:08] <alexey.veselovsky> если обратился к страницы которой сейчас нет в ОЗУ, будет page fault
[18:42:15] <Зорин Сергей> ну оно все равно через сегменты работает
[18:42:28] <alexey.veselovsky> эмм.. зачем?
[18:42:50] <alexey.veselovsky> ну вот для простоты давай возьмем msp430 - какие там нафиг сегменты? 16 бит - плоское адресное пространство
[18:43:19] <alexey.veselovsky> ну или можно взять x86_64 - тут зачем сегменты? тоже плоское адресное пространство
[18:44:01] <Зорин Сергей> страничная это надстрройка над сегментами
[18:44:42] <Зорин Сергей> это я про 386
[18:45:02] <alexey.veselovsky> увы, я слишком плохо знаю 386. поэтому верить мне нельзя
[18:45:20] <alexey.veselovsky> x86 штука вообще многослойная. поэтому AMD64 таки лучше.
[18:46:34] <alexey.veselovsky> гы. жесть:
[18:46:39] <alexey.veselovsky> % ulimit -s
unlimited
% ulimit -s 10
% ls
Segmentation fault
% ulimit -s 100
-bash: ulimit: stack size: cannot modify limit: Operation not permitted
% su
Segmentation fault :-)
[18:46:50] <alexey.veselovsky> "какое зверское самоубийство"
[18:47:54] <Зорин Сергей> )))
[18:48:56] <alexey.veselovsky> vlad2: а ты был не прав, в случае переполнения стека поймать это дело можно. по крайней мере в юниксе/позиксе
[18:53:44] <Зорин Сергей> не, ну вот смотри, разные там дескрипторы сегментов содержат инфу об адресе,  размере, типе сегмента и это же и позволяет организовать защиту памяти
[18:55:03] <Зорин Сергей> всякие там GDT IDT///
[18:55:06] <alexey.veselovsky> до mmu я пока не добрался, поэтому не компетентен :-) меня интересует другое - не упрусь ли я в ulimit если создам МНОГО своих fiber'ов
[18:55:33] <alexey.veselovsky> и как вообще оно там все работает. откуда оно знает какую память я использую как стек, а какую менеджеру памяти отдал
[18:55:42] <alexey.veselovsky> то есть это пока заморочки скорее софта чем железа
[18:58:04] <Зорин Сергей> ну так сенментные регистры cs ss ds + es gs fs
[18:58:41] <Зорин Сергей> ты откусываешь памятьв стеке и помещаешь
[18:59:54] <alexey.veselovsky> погоди. я говорю void* stack = malloc(100500);  // в этом месте еще НИКТО не знает что эта память будет под стек. то есть ни сишная либа ни перационка не знает что надо эту память выделять где-то в адресах близких к стеку
[19:01:17] <Зорин Сергей> но кусок выделяется (сегмент) и у него есть размер, который гдето ж хранится
[19:01:23] <alexey.veselovsky> и зачем я этот stack (то есть указатель на начало области памяти) передаю в makecontext, и все
[19:01:38] <alexey.veselovsky> теперь это будет использоваться как стек когда я переключусь на тот контекст
[19:01:57] <alexey.veselovsky> ну да. только никто не знает что это будет стек когда-нибудь
[19:02:05] <alexey.veselovsky> то есть это выделяется в обычной куче
[19:04:34] <Зорин Сергей> но размер то его известен, а значит и оимиты можно отследить — выход за предлелы сегмента
[19:04:35] <alexey.veselovsky> "вроде как, немного повозившись, получил на cortex-a9 ~20 миллионов переключений контекста в секунду, что, судя по тому, как я этому радовался, было сильно быстрее, чем библиотечными функциями."
[19:05:28] <Зорин Сергей> поди пустые перключени
[19:06:33] <Зорин Сергей> а ulimit -s отпределяет лимит вообще или для каждого приложения отдельно?
[19:07:29] <alexey.veselovsky> для каждого отдельно вроде бы
[19:08:58] <Зорин Сергей> подождика, а маллок тогда здесь причем?
[19:09:51] <alexey.veselovsky> кто-то же должен выделить память для нового стека
[19:10:46] <Зорин Сергей> ты хочешь сказать, что если ты установил лимит в 1М, а маллооком мыделил 4М и передал в контекст, установиви стек , то на 1М онт все равно сегфолтится?
[19:11:22] <alexey.veselovsky> да
[19:13:37] <Зорин Сергей> а кона мэйкконтекст может нужные действа производит?
[19:20:01] <alexey.veselovsky> хез. нужно исходники курить
[19:35:39] <Зорин Сергей> хех, ну тогда через TSS контролируется
[19:35:55] <alexey.veselovsky> TSS это кто?
[19:40:01] <Зорин Сергей> ну это как там сегмент состояния задачи или като так
[19:40:32] <Зорин Сергей> через него в 386 многозадачность оргаеизуется
[19:42:07] <Зорин Сергей> угу там указатели стека для разных режимов и лимиты
[20:13:49] <alexey.veselovsky> vlad2: зашибись. в макоси все собирается но swapcontext приводит к сегфолту
[20:13:52] <alexey.veselovsky> всегда
[20:13:58] <alexey.veselovsky> в линуксе все работает
[20:37:54] <alexey.veselovsky> vald2: походу что без alloca не обойтись :-D
[20:52:31] <alexey.veselovsky> хотя нет, обойтись.
[20:54:32] <alexey.veselovsky> valgrind жжот
[20:54:38] <alexey.veselovsky> ==12356== Warning: client switching stacks?  SP change: 0xbeb466cc --> 0x42ae818
==12356==          to suppress, use: --max-stackframe=1165394252 or greater
[21:00:20] <vlad2> За тобой выехали ;)
[21:05:50] <alexey.veselovsky> хотя, alloca в данном случае конечно кошерна