操作系统应该提供一个
// 映射
void *mmap(void *addr, size_t length, int prot, int flags,
int fd, off_t offset);
int munmap(void *addr, size_t length);
// 修改映射权限
int mprotect(void *addr, size_t length, int prot);
本质:在状态机状态上增加/删除/修改一段可访问的内存
MAP_ANONYMOUS
),也可以把文件 “搬到” 进程地址空间中它们的确好像没有什么区别
Example 1: 申请大量内存空间
Example 2: Everything is a file
with open('/dev/sda', 'rb') as fp:
mm = mmap.mmap(fp.fileno(),
prot=mmap.PROT_READ, length=128 << 30)
hexdump.hexdump(mm[:512])
但我们好像带来了一些问题……
请查阅手册,看看操作系统是如何规定这些操作的行为的
msync (2)