Мой вопрос касается передачи данных из ядра в программу пространства пользователя. Я хочу реализовать системный вызов "get_data (size, char * buff, char ** meta_buf)". В этом вызове buff выделяется программой пользовательского пространства, а его длина передается в аргументе size. Однако meta_buf - это буфер переменной длины, который выделяется (на страницах vm программы пользовательского пространства) и заполняется ядром. Пользовательская космическая программа освободит этот регион.
(Я не могу выделить данные в пространстве пользователя, так как программа пространства пользователя не знает размер meta_buff. Кроме того, программа пространства пользователя не может выделить фиксированный объем памяти и снова и снова вызывать системный вызов для чтения всех метаданных. meta_data должна быть возвращена за один системный вызов)
- Как выделить память для программы пространства пользователя из потока ядра?
(Я был бы даже признателен, если бы вы указали мне на любой другой системный вызов, который выполняет аналогичную операцию - выделение в ядре и освобождение в пользовательском пространстве)
- Этот интерфейс правильный или есть лучший способ сделать это?