这里是我的问题:我想从运行在Linux内核空间中的代码中对数据文件的一部分进行内存映射。我想稍后也从Linux内核空间中运行的代码中撤销相同的内存映射。如何执行这些操作?它们与在用户空间中使用mmap(2)/munmap(2)有何不同?
我试图在没有用户进程的内核空间中做到这一点。
我浏览了网络搜索和Linux内核书籍,包括Bovet和Cesati的"Understanding the Linux Kernel“。一本好书,但没有回答我的问题。
一个linux内核的新手问题。
mmap手册页说明".. otherwise, it shall return a value of MAP_FAILED and set errno to indicate the error... "
我在/usr/src/linux/mm/mmap.c下查找了mmap的内核代码,但我找不到mmap返回MAP_FAILED的位置。
谁能告诉我在哪里可以找到同样的东西。
谢谢
如何解决这个问题?/var/crash/virtualbox-来宾-dkms.0。崩溃包含:
ProblemType: Package
DKMSBuildLog:
DKMS make.log for virtualbox-guest-6.1.10 for kernel 5.8.0-36-generic (x86_64)
Sun 10 Jan 11:53:48 EET 2021
make: Entering directory '/usr/src/linux-headers-5.8.0-36-generic'
CC [M] /var/lib/dkms/virtual
例如,对于在Redhat linux中运行的进程,根据/proc/{pid}/stat的驻留页面*页面大小=> 30 GB 根据malloc_stats() => 2.5 GB 知道为什么会这样吗? Arena 0:
system bytes = 465162240
in use bytes = 465037200
Arena 1:
system bytes = 1003520
in use bytes = 980656
Arena 2:
system bytes = 8065024
in use bytes
我的问题不限于mmap(),而是在内核空间代码和用户空间代码中使用的所有函数(从userspace调用--一个系统调用)。例如,如果我从用户空间调用mmap(),其中包括一个上下文开关(SYSENTER / INT 80H),但是如果我从内核调用mmap,则不需要这样做。我的问题是,mmap()函数在内核或用户空间中是相同的吗?如果是相同的,那么如果从内核调用mmap实现是否能够不执行SYSENTER / INT 80H?