NIO-内存映射文件-理论篇 向右看齐 2024-03-25 20:32 25阅读 0赞 ### 一、内存映射文件的由来 ### #### 1.1 基于缓冲区的 I/O 操作 #### I/O 的基础是缓冲区,所谓“输入/输出”简单来说就是把数据移进或移出缓冲区。 数据从外部磁盘向运行中的进程的内存区域移动的过程大致如下: 1. 进程使用 read()系 统调用,要求其缓冲区被填满。 2. 内核随即向磁盘控制硬件发出命令,要求其从磁盘读取数据。 * 磁盘 控制器把数据直接写入内核内存缓冲区,这一步通过 DMA 完成,无需主 CPU 协助。 * 一旦磁盘控 制器把缓冲区装满,内核即把数据从内核空间的临时缓冲区拷贝到进程执行 read( )调用时指定的缓 冲区。 ![format_png][] #### 1.2 缓冲区在哪里? #### ![format_png 1][] 通过上图,可清晰看到**内核空间**和**用户空间**的缓冲区其实都是在物理内存中,此处会有疑问为什么要分要分两个空间,要 2 个缓冲区? 这是因为操作系统的设计,要求内核空间和用户空间必须隔离,以保护内核空间。而磁盘和内存之间的数据复制操作的也只能发生在内核空间中,所以会发生 2 次数据拷贝: 1. 磁盘中的数据先拷贝到内核空间的物理内存中 [format_png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/25/4bc75b5b5d4c43c8b488d53706f6a1fe.png [format_png 1]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/25/392eea09de084aecb318c8f32425b946.png
还没有评论,来说两句吧...