上图简单描述了数据从外部磁盘向运行中的进程的内存区域移动的过程。进程使用read()系统调用,要求其缓冲区被填满。内核随即想磁盘控制硬件发出命令,要求其从磁盘读取数据。磁盘控制器把数据直接写入内核内存缓冲区,这一步通过DMA完成,无需主CPU协助。一旦磁盘控制器把缓冲区填满,内核即把数据从内核空间的临时缓冲区拷贝到进程执行read()调用时制定的缓冲区。
用户空间是常规进程所在区域。JVM就是常规进程,驻守于用户空间。用户空间是非特权区域:比如,在该区域执行的代码就不能直接访问硬件设备。内核空间是操作系统所在的区域。内核代码有特别权力:它能与设备控制器通讯,控制着用户区域进程的运行状态,等等。最重要的是,所有I/O都直接或间接通过内核空间。
当进程请求I/O操作的时候,它执行一个系统调用将控制权转交给内核。C/C++程序员所熟知的底层函数open()、read()、write()、close()要做的无非就是i建立和执行适当的系统调用。当内核以这种方式被调用,它随即采取任何必要步骤,找到进程所需数据,并把数据传送到用户空间内的制定缓冲区。内核试图对数据进行高速缓存或预读取,因此进程所需数据可能已经在内核空间里了。如果是这样,该数据只需要简单的拷贝出来即可。如果数据不在内核空间,则进程被挂起,内核着手把数据读进内存。
- 大小: 13 KB
分享到:
相关推荐
Java I/O学习笔记: 磁盘操作 字节操作 字符操作 对象操作 网络操作 NIO & AIO Java I/O Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,意味着可以在不同的操作系统上运行...
nio 学习 demo 解决沾包问题 处理因缓冲区满导致写入失败问题 处理因缓冲区满导致写入失败问题 ,代码里面应该在写文件结束后取消掉注册的事件
Many serious Java programmers, especially enterprise Java programmers, consider the new I/O API--called NIO for New Input/Output--the most important feature in the 1.4 version of the Java 2 Standard ...
NULL 博文链接:https://sharong.iteye.com/blog/1569883
nio4r, ruby的新 I/O 注意:这是 2.x的稳定分支。 对于 1.x 的旧版分支,请参见: https://github.com/socketry/nio4r/tree/1-x-stable为 ruby ( nio4r ) 添
Java I/O, NIO, and NIO.2 is a power-packed book that accelerates your mastery of Java's various I/O APIs. In this book, you'll learn about classic I/O APIs (File, RandomAccessFile, the stream classes ...
JDK 1.4 中引入的新输入输出 (NIO) 库在标准 Java 代码中提供了高速的、面向块的 I/O。本实用教程从高级概念到底层的编程细节,非常详细地介绍了 ...您还将了解只能通过 NIO 来完成的工作,如异步 I/O 和直接缓冲区。
Nio学习笔记
java学习笔记1(java io/nio)设计模式
JDK 1.4 中引入的新输入输出 (NIO) 库在标准 Java 代码中提供了高速的、面向块的 I/O。本实用教程从高级概念到底层的编程细节,非常详细地介绍了 ...您还将了解只能通过 NIO 来完成的工作,如异步 I/O 和直接缓冲区。
NIO 入门 JDK 1.4 中引入的新输入输出 (NIO) 库在标准 Java 代码中提供了高速的、面向块的 I/O。本实用教程从高级概念到底层的编程细节,非常详细地...您还将了解只能通过 NIO 来完成的工作,如异步 I/O 和直接缓冲区。
本资源转载自网络,如有侵权,请联系上传者或csdn删除。 本资源转载自网络,如有侵权,请联系上传者或csdn删除。 本资源转载自网络,如有侵权,请联系上传者或csdn删除。
Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的 Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了 如何才能充分利用新的 I/O ...
NIO是一种基于通道和缓冲区的I/O方式,它可以使用Native函数库直接分配堆外内存(区别于JVM的运行时数据区),然后通过一个存储在java堆里面的DirectByteBuffer对象作为这块内存的直接引用进行操作。这样能在一些...
NULL 博文链接:https://haifeng0730.iteye.com/blog/1507931
除了学习诸如缓冲区和通道这样的关键 I/O 元素外,您还有机会看到在更新后的库中标准 I/O 是如何工作的。您还会了解只能通过 NIO 来完成的工作,如异步 I/O 和直接缓冲区。 在本教程中,我们将使用展示 NIO 库的...
New I/O (NIO), and NIO.2 categories. You learn what each category offers in terms of its capabilities, and you also learn about concepts such as paths and Direct Memory Access. Chapters 2 through 5 ...
IO 是主存和外部设备 ( 硬盘、终端和网络等 ) 拷贝数据的... IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成。 所有语言运行时系统提供执行 I/O 较高级别的工具。 (c 的 printf scanf,java 的面向对象封装 )
NIO 的创建目的是为了让 Java 程序员可以实现高速 I/O 而无需编写自定义的本机代码。NIO 将最耗时的 I/O 操作(即填充和提取缓冲区)转移回操作系统,因而可以极大地提高速度。