-
- Есть указатель на начало свободного места. Идем туда, проверям дескриптор - а не заховал ли его кто, а указатель не перестаивили. Дескриптор свободен. Пока. Пишем сигнатуру и размер. Проверям - вдруг нас прервали, и кто-то его уже заховал. Проверили - Evgeny_CD(429 знак., 14.06.2009 01:45)
- Ну а выгребающей стороне как знать, что буфер не только аллоцирован частями, но и в него полезности уже записаны? - Vit(14.06.2009 01:55)
- В дексрипторе блока есть маркер - готово. Как только прерывание закончило выгребать блок n, оно берет дескриптор n++, смотрит - готов ли он. if !ready смотрим другой и т.д. Но неготовый заносим в стек неготовых, и его просматриваем после каждого Evgeny_CD(15 знак., 14.06.2009 01:59)
- а как блок из неготовых стал готов сразу стек ворочать? чё-т мудрено - Vit(14.06.2009 09:59)
- А как проще-то? Вот и размышлюя публично :) - Evgeny_CD(14.06.2009 10:54)
- Проще поставить дескриптор рекорда (задание на транзакцию) в очередь и подождать флага окончания записи, занимаясь другими делами. Ведь процессу важно не рулить буфером, о котором ему по-хорошему вообще знать не нужно (не его это дело), а приготовить Vit(1350 знак., 14.06.2009 11:47)
- zero copy тогда не получится. Получится промежуточное копирование из локальных данныъх процесса в большую очередь, а это время. - Evgeny_CD(14.06.2009 13:14)
- в очередь не копируется содержимое, а добавляется указатель на дескриптор транзакции (откуда, куда, сколько). если ресурс свободен (если есть FIFO на входе, то оно просто достаточно свободно), то транзакция выполнится быстро. если FIFO есть, то есть Vit(64 знак., 14.06.2009 13:46)
- Условия задачи: процессов много (32), разница в объеме транзакций - порядок (1-10блоков), транзакции по времени от одного процесса распределены случайно и равномерно (в терминах непрерывного времени процесса). Распределение по размеру аналогичное. Evgeny_CD(97 знак., 14.06.2009 12:14)
- очереди для приоритетов доступа к девайсу записи. не путайте. можете 32 клиента обслуживать 1-й очередью - Vit(14.06.2009 12:53)
- Так и есть. Очередь одна. - Evgeny_CD(14.06.2009 12:56)
- очереди для приоритетов доступа к девайсу записи. не путайте. можете 32 клиента обслуживать 1-й очередью - Vit(14.06.2009 12:53)
- zero copy тогда не получится. Получится промежуточное копирование из локальных данныъх процесса в большую очередь, а это время. - Evgeny_CD(14.06.2009 13:14)
- Проще поставить дескриптор рекорда (задание на транзакцию) в очередь и подождать флага окончания записи, занимаясь другими делами. Ведь процессу важно не рулить буфером, о котором ему по-хорошему вообще знать не нужно (не его это дело), а приготовить Vit(1350 знак., 14.06.2009 11:47)
- А как проще-то? Вот и размышлюя публично :) - Evgeny_CD(14.06.2009 10:54)
- а как блок из неготовых стал готов сразу стек ворочать? чё-т мудрено - Vit(14.06.2009 09:59)
- В дексрипторе блока есть маркер - готово. Как только прерывание закончило выгребать блок n, оно берет дескриптор n++, смотрит - готов ли он. if !ready смотрим другой и т.д. Но неготовый заносим в стек неготовых, и его просматриваем после каждого Evgeny_CD(15 знак., 14.06.2009 01:59)
- Ну а выгребающей стороне как знать, что буфер не только аллоцирован частями, но и в него полезности уже записаны? - Vit(14.06.2009 01:55)
- Есть указатель на начало свободного места. Идем туда, проверям дескриптор - а не заховал ли его кто, а указатель не перестаивили. Дескриптор свободен. Пока. Пишем сигнатуру и размер. Проверям - вдруг нас прервали, и кто-то его уже заховал. Проверили - Evgeny_CD(429 знак., 14.06.2009 01:45)