LINUX.ORG.RU

copy_to_user() для заданного процесса


0

0


есть: некоторый процесс A и адрес буфера в контексте его адресного пространства.
требуется: скопировать из локального буфера в контексте ядра данные, находясь при этом в другом процессе B (current != A).

короче, нужен аналог copy_to_user(to, from, len) но чтобы при этом можно было задать конкретный task_struct отличный от current, которому принадлежит этот самый to. идеи, предложения?

// wbr

copy_to_user работает следующим образом(IA32):

1) проверяет адрес на валидность (для IA32 <3GB)

2) Просто копирует, никаких проверок.

3) При обработке page fault eip восстанавливается исходя из fixup tables.

т.е. шоб скопировать из другого процесса, надо записать в cr3 его адрес page directory и выполнить copy_to_user.

xnix ★★
()
Ответ на: комментарий от xnix

> т.е. шоб скопировать из другого процесса, надо записать в cr3 его адрес page directory и выполнить copy_to_user.

интересная идея, нужно будет покопаться на досуге.
впрочем, вопрос решился сам собой методом отсечения идеи, основанной на :) anyway это AFAIU мягко говоря нехарактерные прием в ядре Linux.

// wbr

klalafuda ★☆☆
() автор топика
Ответ на: комментарий от Mr_Nobody

> если не секрет - для чего такое понадобилось?

для буферизации данных в контексте ядра нужно иметь буфер. очень большой буфер. запросто что больше, чем размер доступного RAM. была [отчасти бредовая] идея попытаться достучаться до свапа через пользовательский процесс в контексте которого выделяется требуемый буфер, его адрес передается в ядро где запоминается на пару с его task_struct и после на нем строится простейшая очередь. запись в буфер производится только в контексте какого-то процесса, i.e. прерывания и пр. побоку. встал вопрос как записать данные в буфер имея на руках лишь его виртуальный адрес и ссылку на процесс, в контексте которого он валиден.

впрочем, в конце-концов обошлись без подобных извратов.

// wbr

klalafuda ★☆☆
() автор топика
Ответ на: комментарий от klalafuda

>встал вопрос как записать данные в буфер имея на руках лишь его >виртуальный адрес и ссылку на процесс, в контексте которого он валиден.

Вообще, читать и писать из любого файла в ядре в контексте через page cache вы можете без проблем.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.