从内核线程分配内存的用户空间(Allocating memory for user space fr

2019-09-01 04:25发布

我的问题是有关从内核将数据传递到用户空间程序。 我想实现一个系统调用“GET_DATA(大小,字符* BUFF,字符** meta_buf)”。 在这个调用,BUFF是由用户空间程序分配和它的长度在尺寸参数传递。 然而,meta_buf是分配(在用户空间程序的VM页)和内核填补了可变长度的缓冲器。 用户空间程序会释放此区域。

(我不能分配在用户空间中的数据作为用户空间程序不知道meta_buff的尺寸。此外,用户空间程序不能分配固定的内存量,并再次和再次调用系统调用来读取整个的元数据。meta_data具有在一个单一的系统调用返回)

  1. 如何从内核线程用户空间程序分配内存? (我甚至希望如果你可以点我到任何其他系统调用,它类似的操作 - 在分配内核和用户空间中释放)
  2. 这是界面权利或是否有更好的办法做到这一点?

Answer 1:

不要试图从内核中对于用户空间分配内存 - 这是一个巨大的违规内核的抽象层次感。 相反,考虑其他几个选项:

  • 具有用户空间的要求它需要多大的空间。 用户空间的分配,然后抓起从内核的内存。
  • 有你的驱动直接拥有到其地址空间用户空间的mmap页。
  • 设置上界所需的数据量。 仅分配那么多。

这很难说,更不知道为什么这必须是原子的。 实际上分配内存是怎么回事,无须被中断反正(或你不可能获得成功),因此它不太可能会退出并重新进入内核会伤害太多。 事实上,用户空间内存的任何写操作必须是中断的,因为是需IO页面错误的可能性。



文章来源: Allocating memory for user space from kernel thread