理解io
发布日期:2021-10-19 19:33:00 浏览次数:1 分类:技术文章

本文共 747 字,大约阅读时间需要 2 分钟。

1, I/O:

 I/O:顾名思义,数据的读取和写入

上图简单描述了数据从外部磁盘向运行中进程的内存区域移动的过程。

进程使用read( )系统调用,要求其缓冲区被填满,内核随即向磁盘控制硬件发出指令,要求其从磁盘读取数据,磁盘控制器直接把数据写入内核空间的缓冲区,这一步是通过DMA完成,无需CPU协助,一旦内核缓冲区被装满,内核即把缓冲区里面的临时数据拷贝到用户进程所指定的缓冲区

JVM属于常规进程,无特权,不能直接访问硬件设备,内核代码有特权,能与设备控制器通讯,控制着用户区域进程的运行状态,所有I/O都直接或间接的通过内核空间

当用户执行I/O请求读取数据时,若所需要数据已经存在于内核空间,则简单拷贝出来即可,而不存在,则需要挂起用户进程,将数据装载到内存

Q1:为什么不直接将数据从磁盘控制器读取到用户空间呢?

a1:1,硬件通常无法直接访问用户空间

        2,磁盘这种基于块存储的硬件设备操作的是固定大小的数据块,而用户请求的可能是任意大小的或非对齐的数据块,在数据往来于用户空间和存储设备中,内核负责数据的分解再组合工作,充当二者之间的中间人

发散读取:

虚拟地址:使用虚假地址代替物理(RAM)内存地址

内存映射:

内存映射文件:

传统的文件I/O是通过用户进程发布read( ),write( )系统调用来传输数据的。为了在内核空间的文件系统页和用户空间的内存区之间移动数据,一次以上的拷贝操作几乎总是免不了的。这是因为,在文件系统页与用户缓冲区之间往往没有一一对应关系

用户内存到文件系统页的映射

文件锁定:

某个进程要读取文件,则需要获取该文件部分区域的《共享锁》,某个进程要写文件,则需要获取该文件部分区域的《独占锁》

一般而言,读取进程和写入进程会相互阻止 对文件的操作

转载地址:https://blog.csdn.net/u013494310/article/details/19400769 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:理解 java 缓冲区
下一篇:DataNode内幕(一):数据存储和它的小伙伴们

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月24日 05时39分33秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

spring boot 与 Ant Design of Vue 实现修改按钮(十七) 2019-04-27
spring boot 与 Ant Design of Vue 实现删除按钮(十八) 2019-04-27
spring boot 与 Ant Design of Vue 实现角色管理布局以及角色的列表(十九) 2019-04-27
spring boot 与 Ant Design of Vue 实现新增角色(二十) 2019-04-27
spring boot 与 Ant Design of Vue 实现修改角色(二十一) 2019-04-27
spring boot 与 Ant Design of Vue 实现删除角色(补二十一) 2019-04-27
spring boot 与 Ant Design of Vue 实现组织管理布局的实现(二十二) 2019-04-27
spring boot 与 Ant Design of Vue 实现左侧组织树(二十三) 2019-04-27
spring boot 与 Ant Design of Vue 实现新增组织(二十四) 2019-04-27
spring boot 与 Ant Design of Vue 实现修改组织(二十五) 2019-04-27
spring boot 与 Ant Design of Vue 实现删除组织(二十六) 2019-04-27
spring boot 与 Ant Design of Vue 实现获取用户列表(二十七) 2019-04-27
spring boot 与 Ant Design of Vue 实现新增用户(二十八) 2019-04-27
spring boot 与 Ant Design of Vue 实现修改用户(二十九) 2019-04-27
spring boot 与 Ant Design of Vue 实现删除用户(三十) 2019-04-27
spring boot 与 Ant Design of Vue 鉴权体系登录的实现(三十一) 2019-04-27
spring boot 与 Ant Design of Vue 鉴权体系获取用户信息的实现(三十二) 2019-04-27
Druid连接池实现自定义场景的多数据库的连接 2019-04-27
CentOs7命令行(静默)的方式安装oracle数据库 2019-04-27
基于VMware安装CentOs7的镜像 2019-04-27