《java NIO》缓存区之内核空间、用户空间和虚拟地址
转自
http://blog.csdn.net/hpsysljt/article/details/6179009
IO是基于缓存区来做的,所谓的输入和输出就是从缓存区中移入和移出数据。以IO输入为例,首先是用户空间进程向内核请求某个磁盘空间数据,然后内核将磁盘数据读取到内核空间的buffer中,然后用户空间的进程再将内核空间buffer中的数据读取到自身的buffer中,然后进程就可以访问使用这些数据。
内核空间是指操作系统内核运行的空间,是为了保证操作系统内核的能够安全稳定地运行而为内核专门开辟的空间;而用户空间是指用户程序运行的空间。这里要在磁盘空间和用户空间中加一个内核空间的缓存区的原因有两个:一个是用户空间的程序不能直接去磁盘空间中读取数据,必须由经由内核空间通过DMA来获取;另一个原因是一般用户空间的内存分页与磁盘空间不会对齐,因此需要由内核空间在中间做一层处理。
而目前的操作系统,用户空间和内核空间的区分一般采用虚拟内存来实现,因此用户空间和内存空间都是在虚拟内存中。使用虚拟内存无非是因为其两大优势:一是它可以使多个虚拟内存地址指向同一个物理内存;二是虚拟内存的空间可以大于物理内存的空间。
对于第一点在进行IO操作时就可以将用户空间的buffer区和内核空间的buffer区指向同一个物理内存。这样用户空间的程序就不需要再去内核空间再取回数据,而是可以直接访问,节省内存空间。
对于第二点,当用户程序访问内存地址时,一般的操作如下:首先虚拟内存系统会到物理内存去查找该虚拟地址是否存在。如果存在,如A,则直接从物理内存中读取;如果不存在,如D则会抛出一个信号。这时虚拟内存系统会去磁盘空间中找,找到后再按一定的策略,将其置入到内存中,如将C和D交换。然后由用户程序就可以使用D中的数据。这样就保证了用户程序可以读取一些大型的文件。
- 大小: 3.5 KB
- 大小: 5.8 KB
- 大小: 3.7 KB
分享到:
相关推荐
java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java...
Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六)...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统的I/O模型的新技术。自Java 1.4版本引入NIO后,它为Java开发者提供了更高效的数据传输方式,尤其是在处理大量并发...
NIO在Java 1.4版本引入,提供了更高效的数据处理和通道通信方式,特别适用于高并发、大数据量的系统。Netty是一个基于NIO的高性能、异步事件驱动的网络应用框架,它简化了网络编程,广泛应用于服务器端应用开发。 ...
Java NIO: Channels and Buffers(通道和缓冲区) 标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。 ...
Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的 Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了 如何才能充分利用新的 I/O ...
`NIOServer.java`和`NIOClient.java`这两个文件很可能是用于演示Java NIO服务器端和客户端的基本操作。下面将详细介绍Java NIO的主要组件和工作原理,并结合这两个文件名推测它们可能包含的内容。 1. **Selector...
在Java传统IO中,数据的读写都是通过流来完成,而NIO则引入了通道(Channel)和缓冲区(Buffer)的概念,提供了一种非阻塞的I/O操作方式,极大地提高了Java进行并发I/O处理的能力。 首先,我们来看下NIO的核心组件...
在Java NIO中,"新"主要体现在非阻塞和多路复用这两个特性上,这使得NIO更适合于高并发、低延迟的系统。 **Java IO原理:** Java IO基于流模型,分为输入流和输出流。流是一维数据序列,可以是从源到目标的单向流动...
Java NIO(New Input/Output)是Java标准库中提供的一种I/O模型,与传统的 Blocking I/O(同步阻塞I/O)相对。NIO在Java 1.4版本引入,其设计目标是提供一种更高效、更灵活的I/O操作方式,特别适合处理大量并发连接...
Java NIO提供了ByteBuf、CharBuf、ShortBuf、IntBuf、LongBuf、FloatBuf和DoubleBuf等不同类型的缓冲区,它们都有统一的API,如put()用于写入数据,get()用于读取数据,clear()用于清空缓冲区,flip()用于切换读写...
### Java NIO 处理超大数据文件的知识点详解 ...综上所述,使用Java NIO处理超大数据文件时,关键是利用好内存映射文件技术和合理的数据读取策略,通过适当的分块和数据解析方法,可以有效地提升读取速度和处理能力。
Java NIO(New IO)是Java 1.4版本引入的一个新模块,它提供了一种不同于标准Java IO API的处理I/O操作的方式。NIO的主要特点是面向缓冲区,非阻塞I/O,以及选择器,这些特性使得NIO在处理大量并发连接时表现出更高...
Java NIO提供了字节、字符、短整型、整型、长整型、浮点型和双精度浮点型等类型的缓冲区。缓冲区具有特定的方法,如put和get,用于数据的存取。 3. **选择器(Selector)**:选择器是Java NIO的核心,它可以监视多...
NIO的核心组件包括通道、缓冲区和选择器,这些组件共同构建了一种更灵活、更高效的数据传输模型。 1. **通道(Channel)**:通道类似于流,但有所不同。通道可以读取和写入数据,同时它们可以是双向的,也就是说数据...