比如:当内核模块代码或络访问内存时,代码中的地址为逻辑地址,而且对应到真正的物理内存地址,需要地址和它一对一的映射,假设:逻辑地址0xc0000003对应的物理地址为0x3。1、把内存的物理页映射到进程的虚拟地址空间,这个函数用处是:实现进程和内核共享内存。
比如:当内核模块代码或络访问内存时,代码中的地址为逻辑地址,而且对应到真正的物理内存地址,需要地址和它一对一的映射,假设:逻辑地址0xc0000003对应的物理地址为0x3。1、把内存的物理页映射到进程的虚拟地址空间,这个函数用处是:实现进程和内核共享内存。
我们可以讲述mmap和munmap系统调用了.mmap的调用格式是:把映射页面读入内存中.mmap系统调用并不是完全为了用于共享内存而设计的。mmap系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问,不必再调用read(),write()等操作。说明调用mmap把文件映射到内存的方法
当进程申请内存的时候,会为其分配逻辑地址和物理地址,并将逻辑地址和物理地址做一个映射。因为所有物理内存的分配都需要内核程序进行申请,用户进程没有这个权限。调用系统调用的时候,会将其对应的代码和数据运行在内核空间中。读取文件或者网络数据的时候,首先会将数据拷贝到内存空间,然后在将数据从内核空间拷贝到用户空间。
而将较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF)供各个进程使用,称为“用户空间。内核空间中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据。注:这些段只是简单的虚拟内存地址空间范围,与Intel处理器的段没有任何关系。