
上图简单描述了数据从外部磁盘向运行中的进程的内存区域移动的过程。进程使用read()系统调用,要求其缓冲区被填满。内核随即想磁盘控制硬件发出命令,要求其从磁盘读取数据。磁盘控制器把数据直接写入内核内存缓冲区,这一步通过DMA完成,无需主CPU协助。一旦磁盘控制器把缓冲区填满,内核即把数据从内核空间的临时缓冲区拷贝到进程执行read()调用时制定的缓冲区。
用户空间是常规进程所在区域。JVM就是常规进程,驻守于用户空间。用户空间是非特权区域:比如,在该区域执行的代码就不能直接访问硬件设备。内核空间是操作系统所在的区域。内核代码有特别权力:它能与设备控制器通讯,控制着用户区域进程的运行状态,等等。最重要的是,所有I/O都直接或间接通过内核空间。
当进程请求I/O操作的时候,它执行一个系统调用将控制权转交给内核。C/C++程序员所熟知的底层函数open()、read()、write()、close()要做的无非就是i建立和执行适当的系统调用。当内核以这种方式被调用,它随即采取任何必要步骤,找到进程所需数据,并把数据传送到用户空间内的制定缓冲区。内核试图对数据进行高速缓存或预读取,因此进程所需数据可能已经在内核空间里了。如果是这样,该数据只需要简单的拷贝出来即可。如果数据不在内核空间,则进程被挂起,内核着手把数据读进内存。

- 大小: 13 KB
分享到:
相关推荐
Java NIO,全称Non-Blocking Input/Output,是非阻塞式输入输出,它是Java从1.4版本开始引入的一种新的I/O模型,为Java程序员提供了处理I/O操作的新方式。NIO的主要特点是其能够使Java程序以更有效的方式处理I/O流,...
《NIO学习笔记》 在Java编程领域,NIO(Non-blocking Input/Output,非阻塞I/O)是一种重要的I/O模型,与传统的BIO(Blocking I/O)相对应。NIO提供了一种新的方式来处理I/O操作,特别是在处理大量并发连接时,它的...
**NIO(Non-blocking Input/Output)**是Java在1.4版本引入的一种新的I/O模型,它提供了与传统I/O不同的数据处理方式。在传统的IO模型中,数据的读写是阻塞式的,即在读取或写入数据时,程序会暂停执行,等待数据...
Java NIO(New Input/Output)是Java标准库在JDK 1.4引入的一组新的I/O API,它提供了一种不同于传统IO的高效、非阻塞的I/O操作方式。NIO的核心概念包括Channel、Buffer和Selector,它们共同构建了一个与操作系统...
在Java编程语言中,NIO(New Input/Output)是一个重要的特性,它为开发者提供了非阻塞I/O操作的能力,极大地提高了程序的性能。本文主要关注的是Java NIO中的ByteBuffer,一个关键的数据容器,用于在通道(Channel)...
### Nio学习笔记:深入理解Java的Buffer机制 在Java的NIO(Non-blocking I/O)框架中,`Buffer`类及其子类扮演着至关重要的角色。这些类提供了处理基本类型数据的能力,使得数据能够在内存和I/O设备之间高效地传输...
- 分散读取(Scattering Read)和聚集写入(Gathering Write)是NIO中的一种高级特性,允许一次操作将数据从多个缓冲区写入通道,或者从通道读取到多个缓冲区。这对于处理多个数据流非常有用,比如在网络通信中发送...
在Netty中,数据的传输是通过`ByteBuf`实现的,这是一个高效且灵活的字节缓冲区,可以避免不必要的内存复制。`ByteBuf`提供了读写指针管理,方便我们处理不同格式的数据。 此外,Netty还提供了许多内置的协议支持,...
深入剖析Mina如何利用NIO和异步I/O机制构建高效网络通信框架,涉及线程模型、缓冲区管理、选择器策略等。 #### 四、Mina实例应用 虽然原文未详述实例部分,但Mina的应用实例通常涵盖: - 实现简单的聊天室功能 - ...
2. **NIO(Non-blocking I/O)**:Java NIO提供了一种更高效的方式来处理I/O操作,特别是当需要处理大量并发连接时。`java.nio`包提供了选择器(Selector)、通道(Channel)和缓冲区(Buffer)等概念,允许程序在多...
6. **I/O流**:掌握输入/输出流的分类和使用,如字节流、字符流、对象流等,以及缓冲区流的使用。 7. **网络编程**:了解套接字编程,如何创建服务器端和客户端,以及TCP和UDP通信的基本原理。 8. **数据库连接**...
在`CoreJava_day21`的学习笔记中,主要探讨了Java中的NIO(New I/O)包及其关键类和接口,包括`ByteBuffer`、`FileChannel`以及网络编程中常用的`ServerSocket`和`Socket`等。NIO自JDK 1.4引入以来,因其高效性和...
Netty4.0学习笔记系列之三是关于构建简单的HTTP服务的教程,这主要涉及网络编程、服务器开发以及Java NIO(非阻塞I/O)的相关知识。Netty是一个高性能、异步事件驱动的网络应用程序框架,它使得开发可伸缩且稳定的...
《NIO+Netty5视频教程与Netty源码剖析视频教程》是一份全面解析网络编程框架Netty的教育资源,旨在帮助学习者深入理解和应用NIO(非阻塞I/O)以及Netty5的核心技术。该教程分为两个主要部分,分别针对理论分析和实战...
在Netty网络框架学习笔记-1中,可能详细介绍了NIO的基本概念,如选择器(Selector)、通道(Channel)和缓冲区(Buffer),以及它们如何协同工作以提高并发处理能力。 2. **Netty入门**:笔记-3和-5探讨了Netty的入门知识...
在这个"Apache MINA2学习笔记DEMO"中,我们很可能会看到如何使用MINA来创建一个自定义协议的示例。自定义协议通常是为了满足特定应用的需求,例如高效的数据传输、安全性或者特定的编码格式。MINA允许开发者定义自己...
总的来说,这个JAVA学习笔记集是一个全面的学习资源,可以帮助初学者逐步建立起扎实的JAVA基础,理解并掌握编程思想、多线程、网络编程以及高效I/O操作等核心技能。通过深入学习和实践这些内容,读者将能够更好地...
博主分享的笔记可能还会深入讨论NIO与传统IO的差异、内存映射文件(MAPPED BUFFER)以及异步非阻塞I/O(AIO)等相关内容,这些都是Java开发者应当掌握的重要技能。 总之,NIO是Java中提升系统性能的重要工具,尤其...
4. MINA的异步I/O:深入理解MINA如何利用NIO(非阻塞I/O)进行高效的网络通信。 5. 实例应用:提供了一些实际的MINA应用示例,帮助初学者快速上手。 《Mina2.0快速入门与源码剖析》这本书可能是MINA 2.0版本的指南...