`
ryanflyer
  • 浏览: 101055 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

【转载】NIO基本概念

 
阅读更多

慢慢了解的过程中,觉得有必要重新回顾一下IO的基本概念,深入理解一下基础。

 

  • 缓冲区操作
以下内容摘自《Java NIO》:缓冲区,以及缓冲区如何工作,是所有 I/O 的基础。所谓“输入/输出”讲的无非就是把数据移进或移出缓冲区。进程执行 I/O 操作,归结起来,也就是向操作系统发出请求,让它要么把缓冲区里的数据排干(写),要么用数据把缓冲区填满(读)。进程使用这一机制处理所有数据进出操作。操作系统内部处理这一任务的机制,其复杂程度可能超乎想像,但就概念而言,却非常直白易懂。下图简单描述了数据从外部磁盘向运行中的进程的内存区域移动的过程。进程使用 read( )系统调用,要求其缓冲区被填满。内核随即向磁盘控制硬件发出命令,要求其从磁盘读取数据。磁盘控制器把数据直接写入内核内存缓冲区,这一步通过 DMA 完成,无需主 CPU 协助。一旦磁盘控制器把缓冲区装满,内核即把数据从内核空间的临时缓冲区拷贝到进程执行 read( )调用时指定的缓冲区。


 

 

  • 用户空间和内核空间
用户空间是常规进程所在区域,JVM就是常规进程,驻守用户空间。在用户空间执行的代码不能直接访问硬件设备。内核空间是操作系统所在的区域,拥有特权,能够与设备控制器进行通信,控制用户空间进程的状态。所有的I/O都直接或者间接的通过内核空间。让磁盘控制器直接把数据送到用户空间缓冲区岂不是更好?答案是否定的,首先,硬件通常不能直接访问用户空间;其次,磁盘是基于块存储的硬件设备,其操作的是固定大小的数据块,而用户进程请求的可能是任意大小的或者非对其的数据块。因此需要内核空间来负责数据的分解和在组合工作,充当中间人的角色。


 

 

  • 虚拟内存
虚拟内存即使用虚拟地址取代物理内存地址,好处(1)一个以上的虚拟地址可以指向同一个物理内存地址。(2)虚拟内存空间可以大于实际可用的硬件内存。
设备控制器虽然不能通过DMA直接存储到用户空间,但是通过把内核空间地址与用户空间的虚拟地址映射到同一个屋里地址,这样DMA硬件就可以填充对内核和用户空间进程同时可见的缓冲区,省去了磁盘读数据到内核缓冲区,然后从内核缓冲区到用户空间缓冲区的操作。


  •  文件锁定
共享锁:多个共享锁可以多同一个文件进行操作;独占锁:不能有其他锁控制该区域。


 

  • 缓冲区和通道的关系
通道是I/O传输时通过的入口,缓冲区是这些数据传输的来源或者目标。

 

  • 大小: 9.2 KB
  • 大小: 12.4 KB
  • 大小: 12.6 KB
  • 大小: 9.7 KB
分享到:
评论

相关推荐

    Java NIO核心概念总结篇

    这是学习Java NIO过程中总结的核心概念,里面包含了基本的知识点,详细知识点也可以查看我的博客:pcwl_java里的Java NIO篇

    NIO需要了解的一些概念

    NIO需要了解的一些概念NIO需要了解的一些概念

    Java NIO Socket基本

    NULL 博文链接:https://b-l-east.iteye.com/blog/1254693

    JavaNIO chm帮助文档

    Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六)...

    nio入门 IBM教材,pdf格式

    为了最大程度地从这里的讨论中获益,您应该理解基本的 Java 编程概念,如类、继承和使用包。多少熟悉一些原来的 I/O 库(来自 java.io.* 包)也会有所帮助。 虽然本教程要求掌握 Java 语言的工作词汇和概念,但是不...

    Java IO NIO and NIO 2 无水印pdf

    Java IO NIO and NIO 2 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn...

    Java IO NIO and NIO 2 epub

    Java IO NIO and NIO 2 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    NIO 入门.chm,NIO 入门.chm

    NIO入门.chm NIO入门.chm NIO入门.chm

    java NIO 视频教程

    Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java...Java NIO引入了选择器的概念,选择器用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个的线程可以监听多个数据通道。

    新输入输出NIO

    本实用教程从高级概念到底层的编程细节,非常详细地介绍了 NIO 库。您将学到诸如缓冲区和通道这样的关键 I/O 元素的知识,并考察更新后的库中的标准 I/O 是如何工作的。您还将了解只能通过 NIO 来完成的工作,如异步...

    java nio 实现socket

    java nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socket

    java nio ppt

    java nio 相关 ppt,介绍了 java nio 的基本概念以及和其他 io 的区别

    java NIO和java并发编程的书籍

    java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java...

    NIO学习系列:核心概念及基本读写

    NULL 博文链接:https://zhangshixi.iteye.com/blog/679959

    java NIO.zip

    java NIO.zip

    Java NIO 中文 Java NIO 中文 Java NIO 中文文档

    Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的 Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了 如何才能充分利用新的 I/O ...

    Java NIO系列教程(一) Java NIO 概述

    Java NIO系列教程(一) Java NIO 概述

    Java NIO英文高清原版

    Java NIO英文高清原版

    Java NIO核心概念总结篇-附件资源

    Java NIO核心概念总结篇-附件资源

    深入浅出NIO

    NIO 入门笔记 Reactor模式概念介绍

Global site tag (gtag.js) - Google Analytics