dev/mbuff实现。该节点可显示几个录入点,其中包括可将内核空间地址映射到用户空间的mmap()。它还可以利用录入点ioctl()来控制。然而,并不需要复杂的结构及直接调用ioctl。相反,mbuff可为ioctl()调用提供一个包裹,而且仅仅调用两个简单的功能即可配置和释放共享的存储缓冲器。
当然,不能从实时任务调用mbuff驱动程序,因为该驱动程序所调用的虚拟存储器分配功能本身是不确定性操作。分配共享存储器所需的时间依赖于主系统的存储器容量以及CPU速度、磁盘驱动器性能和存储器分配的现有状态。因此,只能从模块的Linux内核一侧来分配共享存储器,比如从init_module()或一个ioctl()请求开始。
那么,一个共享缓冲器到底能分配多少存储器呢?如果不是任务繁重的服务器或图形应用,建议至少为Linux保留8MB存储空间。为了获得优化的配置,可在限制存储器大小的同时测量实时应用程序的性能,以确定需要多少存储空间。
列表2给出了如何从实时任务和用户进程方面访问共享的存储器。内核模块和用户任务采用同样的功能集。当然,要想使用insmod mbuff.o,还必须将之置于Linux内核中。例如,mbuff_alloc("buf_name", size)可将符号名buf_name分配给一个缓冲器,而mbuff_free(页码:[1] [2] [3] [4] [5] [6] [7] 第6页、共7页 |