NIO-内存映射文件-理论篇

一、内存映射文件的由来

1.1 基于缓冲区的 I/O 操作

I/O 的基础是缓冲区,所谓“输入/输出”简单来说就是把数据移进或移出缓冲区。

数据从外部磁盘向运行中的进程的内存区域移动的过程大致如下:

  1. 进程使用 read()系 统调用,要求其缓冲区被填满。
  2. 内核随即向磁盘控制硬件发出命令,要求其从磁盘读取数据。
    • 磁盘 控制器把数据直接写入内核内存缓冲区,这一步通过 DMA 完成,无需主 CPU 协助。
    • 一旦磁盘控 制器把缓冲区装满,内核即把数据从内核空间的临时缓冲区拷贝到进程执行 read( )调用时指定的缓 冲区。

1.2 缓冲区在哪里?

通过上图,可清晰看到内核空间用户空间的缓冲区其实都是在物理内存中,此处会有疑问为什么要分要分两个空间,要 2 个缓冲区?

这是因为操作系统的设计,要求内核空间和用户空间必须隔离,以保护内核空间。而磁盘和内存之间的数据复制操作的也只能发生在内核空间中,所以会发生 2 次数据拷贝:

  1. 磁盘中的数据先拷贝到内核空间的物理内存中
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值