`
waterlife
  • 浏览: 65915 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

系统调用mmap()

 
阅读更多

一个进程可以通过系统调用mmap(),将一个已打开的内容映射到他的用户空间。内核中实现这个函数是sys_mmap2()。

 

具体的映射是动态的,时常在变。所谓文件与虚存之间的映射包含着两个环节:一是物理页面与文件映像之间的换入,换出;二是物理页面与虚存页面之间的映射。

 

1. 当区间中的一个页面首次收到访问时,会因为页面无映射,发生缺页异常,相应的页面异常处理函数为do_no_page()。分配一个内存页面并从文件读入相应的页面。

 

2.建立映射之后,对页面的写操作会使页面变脏,但是页面的内容并不立即写回文件中,而是由内核线程bdflush()周期性的运行page_launch()将页面写回文件。如果页面很长时间没有被访问,则会耗尽它的寿命,从而在一次try_to_swap_out中被解除映射而转入不活跃状态。对于文件映射到页面和普通页面的处理不同在于前者解除页面映射,并把页面表项设置成0;而后者则是断开页面映射,使页表表项指向盘上页面。

 

3.解除映射的页面再次受到访问又会发生缺页异常,仍旧因页面无映射,进入do_no_page(),而不像换入/换出页面进入do_swap_page()。

分享到:
评论

相关推荐

    Linux内核源代码情景分析 (上下册 高清非扫描 )

    2.13 系统调用mmap() 第3章 中断、异常和系统调用 3.1 X86 CPU对中断的硬件支持 3.2 中断向量表IDT的初始化 3.3 中断请求队列的初始化 3.4 中断的响应和服务 3.5 软中断与Bottom Half 3.6 页面异常的进入和返回 ...

    LINUX内核源代码情景分析

    2.13 系统调用mmap() . 第3章 中断、异常和系统调用 3.1 X86 CPU对中断的硬件支持 3. 2 中断向量表IDT的初始化 3. 3 中断请求队列的初始化 3. 4 中断的响应和服务 3. 5 软中断与Bottom Half 3.6 页面异常...

    Linux内核情景分析(二级标题).pdf

    2.13 系统调用mmap() 第3章 中断、异常和系统调用 第4章 进程与进程调度 第5章 文件系统 第6章 传统的Unix进程间通信 第7章 基于socket的进程间通信 第八章 设备驱动 第9章 多处理器的SMP系统结构 第10章 系统的...

    mmap使用分析.pdf

    mmap的使用分析和约束原理,系统调用原理,使用系统调用mmap, mmap2,本文档分析注重关键点的分析,省去了一些mmap内核部分的详细代码分析,省去的部分网上相关文档很多感兴趣可以自己搜索学习。本文档测试验证是在...

    LINUX内核源代码情景分析(上).part1.rar

    2.13 系统调用mmap() . 第3章 中断、异常和系统调用 3.1 x86 cpu对中断的硬件支持 3. 2 中断向量表idt的初始化 3. 3 中断请求队列的初始化 3. 4 中断的响应和服务 3. 5 软中断与bottom half 3.6 页面异常...

    linux内核源代码情景分析

    2.13 系统调用mmap() 第3章 中断、异常和系统调用 3.1 X86 CPU对中断的硬件支持 3.2 中断向量表IDT的初始化 3.3 中断请求队列的初始化 3.4 中断的响应和服务 3.5 软中断与Bottom Half 3.6 页面异常的进入和...

    linux 内核源代码分析

    2.13 系统调用mmap() 第3章 中断、异常和系统调用 3.1 X86 CPU对中断的硬件支持 3. 2 中断向量表IDT的初始化 3. 3 中断请求队列的初始化 3. 4 中断的响应和服务 3. 5 软中断与Bottom Half 3.6 页面异常的...

    Linux内核情景分析(非扫描版)

    2.13 系统调用mmap() 第3章 中断、异常和系统调用 3.1 X86 CPU对中断的硬件支持 3. 2 中断向量表IDT的初始化 3. 3 中断请求队列的初始化 3. 4 中断的响应和服务 3. 5 软中断与Bottom Half 3.6 页面异常的进入和...

    Linux内核情景分析

    2.13 系统调用mmap() 第3章 中断、异常和系统调用 3.1 X86 CPU对中断的硬件支持 3. 2 中断向量表IDT的初始化 3. 3 中断请求队列的初始化 3. 4 中断的响应和服务 3. 5 软中断与Bottom Half 3.6 页面异常的进入和...

    linux mmap文件内存映射机制

    mmap系统调用并不是完全为了用于共享内存而设计的。它本身提供了不同于一般对普通文件的访问方式,进程可以像读写内存一样对普通文件的操作。而 Posix或系统V的共享内存IPC则纯粹用于共享目的,当然mmap()实现共享...

    linux驱动层mmap创建页表流程

    由于操作系统事先并没有创建这块物理地址与虚拟地址的映射关系,因此在驱动层的mmap接口中,需要在页表中建立这块物理地址与虚拟地址的映射关系。其中,内核会在进程的虚拟空间查找一块连续的虚拟地址并把虚拟地址的...

    行业文档-设计装置-一种解决内核mmap调用失败的系统和方法.zip

    行业文档-设计装置-一种解决内核mmap调用失败的系统和方法.zip

    嵌入式系统/ARM技术中的Linux系统调用例程system_call和参数传递

    系统调用接口调用“int $Ox8O”指令进入内核并准各了相关参数后,剩下的工作就由系统调用例程来进行。...例如,内核服务例程mmap()除系统调用号之外还需要6个参数。  传递参数的任务是由处理器的寄存器来完成的。

    操作系统中期考核之一

    Linux下brk系统调用研究 Linux下mlock系统调用研究 Linux下mmap系统调用研究 Linux下proc文件系统内存管理相关文件研究 Linux设备文件研究 操作系统引导过程研究 硬盘分区表结构研究

    windows 操作系统课程设计

    任务 I/O系统调用开销比较任务目的: 本任务主要目的在于了解I/O系统调用的特点并通过性能测试对此有直观的认识。任务要求:在LINUX平台用C编程逆序一个文本文件,注意显示逆序结果的必须是原文件名。如文件原内容为...

    Python3 mmap内存映射文件示例解析

    内存映射通常可以提供I/O性能,因为使用内存映射是,不需要对每个访问都建立一个单独的系统调用,也不需要在缓冲区之间复制数据;实际上,内核和用户应用都能直接访问内存。 内存映射文件可以看作是可修改的字符串或...

    linux 系统源码全面剖析

    系统调用 文件系统 虚拟文件系统 MINIX文件系统 通用块层 直接I/O 原生异步I/O inotify源码分析 进程间通信 信号处理机制 共享内存 网络 Socket接口 Unix Domain Socket TUN/TAP设备原理与实现 LVS原理与实现 - 原理...

    UNIX 高级教程系统技术内幕

    2.4.1 系统调用接口 2.4.2 中断处理 2.5 同步 2.5.1 阻塞操作 2.5.2 中断 2.5.3 多处理器 2.6 进程调度 2.7 信号 2.8 新进程和程序 2.8.1 fork 和exec 2.8.2 进程创建 2.8.3 fork 优化 2.8.4 执行一个新程序 2.8.5 ...

    Linux高性能服务器编程

    13.5.1 信号量原语 13.5.2 semget系统调用 13.5.3 semop系统调用 13.5.4 semctl系统调用 13.5.5 特殊键值IPC_PRIVATE 13.6 共享内存 13.6.1 shmget系统调用 13.6.2 shmat和shmdt系统调用 13.6.3 shmctl系统...

    rualloc:迟钝的无用分配器

    所有分配都是通过调用mmap,munmap和mremap完成的。 如果使用make编译,该库将使用glibc包装器进行系统调用。 您可能不希望这样做,而应使用make raw PLATFORM=x86_64 (或其他一些PLATFORM ) make raw PLATFORM=...

Global site tag (gtag.js) - Google Analytics