Pergunta

A minha pergunta é sobre a passagem de dados do kernel para um programa de espaço do usuário. Eu quero implementar uma chamada de sistema "get_data (tamanho, char * lustre, char ** meta_buf)". Nesta chamada, lustre é atribuído pelo programa de espaço do usuário e seu comprimento é passado no argumento tamanho. No entanto, meta_buf é um buffer de comprimento variável que é alocado (em páginas vm do programa de espaço de usuário) e preenchido pelo kernel. programa de espaço do usuário irá libertar esta região.

(Eu não posso alocar dados no espaço do usuário como o programa de espaço do usuário não sabe o tamanho da meta_buff. Além disso, o programa de espaço do usuário não pode alocar uma quantidade fixa de memória e chamar a chamada de sistema novo e de novo para ler os metadados inteiras. meta_data tem que ser devolvidos em uma chamada única do sistema)

  1. Como faço para alocar memória para um programa de espaço do usuário a partir de fios kernel? (Eu mesmo apreciar se você pode me apontar para qualquer outra chamada de sistema que faz uma operação similar - alocar no kernel e liberando no espaço do usuário)
  2. É este interface certa ou há uma maneira melhor de fazer isso?
Foi útil?

Solução

Não tente alocar memória para userspace do núcleo - esta é uma grande violação de camadas de abstração do kernel. Em vez disso, considere algumas outras opções:

  • Tem Userspace perguntar quanto espaço ele precisa. aloca espaço de usuário, então pega a memória do kernel.
  • têm páginas userspace MMAP propriedade de seu driver diretamente em seu espaço de endereço.
  • Definir um limite superior na quantidade de dados necessários. Apenas alocar muito.

É difícil dizer mais sem saber por isso tem que ser atômica. Na verdade alocação de memória vai precisar para ser de qualquer maneira interruptível (ou você é improvável ter sucesso), por isso é improvável que sair de e volta para o kernel vai doer muito. Na verdade, qualquer gravação para a memória do espaço do usuário deve ser passível de interrupção, como há o potencial de falhas de página que requerem IO.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top