Java NIO基本概念

  1. I/O就是把数据移入/出缓冲区,用户(JVM,针对操做系统来讲)进程执行IO操做的大约步骤以下:数组

    JVM进程向操做系统发出请求,让操做系统把缓冲区里的数据排干(写),或把数据填满缓冲区(读),进程使用这一机制处理全部数据进出操做。
    函数

  2. 缓冲区操做图spa

    用户空间是常规进程所在区域,JVM就是常规进程,驻守于用户空间,用户空间是非特权区域,在用户空间执行的代码不能访问硬件设备;操作系统

    内核空间是操做系统所在区域,内核代码的特别的权力,能与设备控制器通信(DMA),控制着用户区域进程的运行状态,全部的IO都直接或间接经过内核空间。进程

    当进程请求IO的时候,它执行一个系统调用,将控制权移交给内核,C/C++调用的底层函数open(),read(),write(),close()就是创建或执行的系统调用,若是内核空间没有数据,则进程先挂起,内核要先把数据读进内存。内存

    磁盘基于块存储,Java I/O使用字符/字节流进行操做(切分块)。it

  3. 虚拟内存 内存管理

    全部现代操做系统都使用虚拟内存。虚拟内存意为使用虚假(或虚拟)地址取代物理(硬件RAM)内存地址。table

  4. 磁盘块大小512字节,操做系统把内存地址空间划分为页,即固定大小的字节数组,内存页的大小老是磁盘块大小化倍数,一般为2次幂,这样能够简化寻址操做,典型的内存页为1,02四、2,04八、4,096字节,虚拟和物理内存页的大小老是相同的。硬件

  5. 操做系统分页技术

    内存页的大小为磁盘块的整数倍,这样内核就可直接向磁盘控制器发布命令,把内存页写入磁盘扇区,在须要的时候再装入。同时也叫内存页面调度或交换。全部的IO都是经过页面调度完成的,磁盘扇区与内存页均可以经过数组来访问。

  6. MMU内存管理单元

    CPU包含一个MMU,逻辑上位于CPU与物理内存之间,MMU负责映射虚拟内存与物理内存。

  7. 操做系统也有个页的概念,大小与基本内存页一致,或是基倍数,典型的操做系统页从2,048至8,192不等,且始终是基本内存页大小的倍数。

    操做系统页(整数倍<=) 虚拟内存页 物理内存页(^2 <=) 磁盘块(扇区)512Byte
  8. 文件I/O属于文件系统范畴,文件系统是更高层次的抽象,其操做磁盘;咱们所写代码没法与磁盘打交道,全部都与文件系统交互。

  9. 文件预读

    大多数操做系统假设进程会继续读取文件剩余部分,于是会预读额外的文件系统页,若是内存争用状况不严重,这些文件系统页可能在至关长的时间内继续有效。

相关文章
相关标签/搜索