I/O的相关概念

1、I/O

I/O即Input和Output,用户进程执行I/O操作,归结起来,也就是向操作系统发出请求,读请求就把数据填到缓冲区里,写数据就把缓冲区里数据排干,目的地可以是磁盘也可以是其他通道。进程通过这种方式处理所有数据的读写。
I/O可以分为广义的两大类别:File I/O和Stream I/O。
所以了解缓冲区,以及缓冲区如何工作,是所有I/O的基础。

2、缓冲区

缓冲区可以被看作是一块真实物理内存中的区域,用于临时存储数据。
读取时数据先进入缓冲区,写入时数据先从缓冲区发出。它能减少频繁的磁盘操作,提高效率。
因为直接操作内存比操作磁盘要快的多。

3、用户空间、内核空间、磁盘

下图是 用户进程读磁盘数据的流程。
在这里插入图片描述
可以看到数据要先被读取到内核空间缓冲区、再复制到用户空间缓冲区这样程序才能看得到数据。

把数据从内核空间拷贝到用户空间似乎有些多余。为什么不直接让磁盘控制器把数据送到用户空间的缓冲区呢?
这样做有几个问题。
首先,硬件通常不能直接访问用户空间。
其次,像磁盘这样基于块存储的硬件设备操作的是固定大小的数据块,而用户进程请求的可能是任意大小的字节或非对齐的数据块。
在数据往来于用户空间与存储设备的过程中,内核负责数据的分解、再组合工作,因此充当着中间人的角色。

操作系统为什么要分为 用户空间和内核空间?

主要是为了 安全性、稳定性 和 效率。
用户空间(User Space):程序员写的应用程序运行的空间,比如我们写的 Java、Python、C 程序。
内核空间(Kernel Space):操作系统的核心部分(内核)运行的空间,包括内存管理、文件系统、网络协议、硬件控制等功能。

举个例子:
如果不分开,任何程序都能访问内核资源,那系统崩溃或被攻击就太容易了。
用户程序 不能直接操作硬件,只能通过系统调用让内核代为处理。如果不加限制,一个有 bug 或恶意的程序可能会改乱内存、读写设备、破坏系统。

4、虚拟内存

虚拟内存要和 物理内存的swap交换空间区分开。

概念本质位置作用
虚拟内存(Virtual Memory)一种地址映射机制(虚拟地址 → 物理地址)CPU 看到的是虚拟地址把程序运行时看到的内存空间抽象成一个连续的大空间
Swap(交换空间)硬盘上的一块区域磁盘当物理内存不够用时,把一部分内存内容临时“换出去”

虚拟内存可以大致理解为是给程序看的 大块连续地址空间(假的,操作系统管理的)。

所有现代操作系统都使用虚拟内存。
虚拟内存意为使用虚假(或虚拟)地址取代物理(硬件RAM)内存地址。
这样做好处颇多,总结起来可分为两大类:
1.一个以上的虚拟地址可指向同一个物理内存地址。
2.虚拟内存空间可大于实际可用的硬件内存。

上面图片中读取流程、设备控制器不能通过DMA直接存储到用户空间,但通过利用多个虚拟地址映射同一个物理地址,则可以达到相同效果。把内核空间地址与用户空间的虚拟地址映射到同一个物理地址,这样,DMA硬件(只能访问物理内存地址)就可以填充对内核与用户空间进程同时可见的缓冲区

5、分页技术

分页(paging)是一种虚拟内存的实现机制。它的核心含义是:
将虚拟地址空间划分成固定大小的“页”(page),而物理内存同样划分为“页框”(page frame),通过页表把虚拟页映射到物理页框。
换句话说:分页是一种地址映射策略。

虚拟内存 = 看起来比你实际内存多得多的“假内存”。
但你电脑真的只有 8G 内存怎么办?装不下了!
当物理内存不够用时,操作系统会将某些不活跃的页临时存放到磁盘中(swap),等需要时再调回,这个过程叫做页置换(page replacement),是基于分页机制实现的。

6、文件I/O和流I/O

特性文件 I/O流 I/O
操作对象文件任意数据流(文件、网络、内存、管道)
访问方式支持随机访问(seek)只能顺序访问
抽象层次底层字节块操作高层数据抽象(可以处理字符、对象)
使用场景本地文件操作更广泛:网络、IO管道、系统输入输出等

Java中的IO、NIO

参考下面两篇博客
IO
https://blog.csdn.net/qq_37883866/article/details/140047819
NIO
https://blog.csdn.net/qq_37883866/article/details/140047866

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/77891.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/77891.shtml
英文地址,请注明出处:http://en.pswp.cn/web/77891.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

出现Invalid bound statement (not found)问题的原因可能有哪些

1.全局配置文件没配好? 检查全局配置文件application.properties或application.yml是否配置扫描mapper包的文件路径 #mybatis配置mapper文件路径 #mybatis.mapper-locationsclasspath:/mapper/*.xml #mybatis-plus配置mapper文件路径 mybatis-plus.mapper-locatio…

第十节:文本编辑

理论知识 文本编辑器的基本概念:文本编辑器是用于创建和编辑文本文件的工具。在 Linux 系统中,常见的文本编辑器有 vi、vim、nano 等。vi 和 vim 编辑器:vi 是一款经典的文本编辑器,vim 是 vi 的增强版,提供了更多的功…

部署一个自己的Spring Ai 服务(deepseek/通义千问)

Spring Boot 无缝接入 DeepSeek 和通义千问请求日志记录及其ip黑白名单 SpringBoot版本 3.2.0 JDK 版本为17 redis 3.2.0 mybatis 3.0.3 依赖引入 关键依赖 <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-sp…

组装 (DIY) 一台显示器 (4K 屏支持 4 画面分屏 PBP 1080p x4)

首发日期 2025-04-26, 以下为原文内容: 家里的 PC 主机比较多, 如果同时开机, 显示器就不够用了. 因为穷, 窝租住的房间又很小, 放不下很多显示器. 所以, 窝希望买一台支持 分屏 功能的显示器. 最好是 4K 分辨率 (3840x2160) 的屏幕, 然后 4 分屏 (有 4 个 DP 或 HDMI 输入接口…

[Java入门]抽象类和接口

[Java入门]抽象类和接口 1. 抽象类1.1 抽象类的概念1.2 抽象类语法1.3 抽象类特性1.4 抽象类的作用 2. 接口2.1 接口的概念2.2 语法规则2.3 接口使用2.4 接口特性2.5 实现多个接口2.6 接口间的继承2.7 抽象类和接口的区别 3. Object类3.1 获取对象信息3.2 对象比较equals方法 1…

聚焦数字中国|AI赋能与安全守护:Coremail引领邮件办公智能化转型

4月28日&#xff0c;第八届数字中国建设峰会在福州拉开序幕。当天&#xff0c;数字中国新产品新技术发布会开讲&#xff0c;Coremail受邀亮相现场&#xff0c;与与会嘉宾分享AI在邮件产品领域的最新应用成果和实践经验。 Coremail首席客户代表刘子建以《AI赋能与安全守护&#…

Qt官方案例知识点总结(拖放操作——Drag And Drop Robot )

-------------------------------------------------------------------------------------------------------------------------------- QPixmap轮廓剪裁 去掉Pixmap的外围部分&#xff0c;如下&#xff1a; QPixmap pixmap("./img"); //调用createHeuristicMas…

【LLM】MOE混合专家大模型综述(重要模块原理)

note 当前的 MoE 架构就是一个用显存换训练时长/推理延迟的架构MoE 目前的架构基本集中在于将原先 GPT 每层的 FFN 复制多份作为 n 个 expert&#xff0c;并增加一个 router&#xff0c;用来计算每个 token 对应到哪个 FFN&#xff08;一般采用每个 token 固定指派 n 个 exper…

电子病历高质量语料库构建方法与架构项目(临床情景理解模块篇)

引言 随着人工智能技术在医疗健康领域的广泛应用,电子病历(Electronic Medical Records,EMR)作为临床医疗数据的重要载体,已成为医学研究和临床决策支持的关键资源。电子病历高质量语料库的构建为医疗人工智能模型的训练和应用提供了基础支撑,其中临床情境理解模块是连接…

大连理工大学选修课——机器学习笔记(1):概述

机器学习概述 机器学习的本质 机器学习是为了设计解决问题的算法。 为输入与输出建立某种映射&#xff1a; 类似于函数关系&#xff1a; Y f ( X ) Yf(X) Yf(X) 不同的映射方法体现了不同的思想。 相关概念 深度学习是机器学习的一个分支 深度学习是深层次化的神经网…

远程 Debugger 多用户环境下的用户隔离实践

远程 Debugger 多用户环境下的用户隔离实践 在现代分布式开发和云原生环境下&#xff0c;远程 Debugger 的应用愈发普遍。然而&#xff0c;随着多人协作和多租户场景的出现&#xff0c;**远程 Debugger 的“用户隔离”**变得至关重要。只有实现了良好的用户隔离&#xff0c;才…

毕业论文 | 基于C#开发的NMEA 0183协议上位机

以下是基于C#开发的NMEA 0183协议上位机完整实现方案,包含串口通信、数据解析与可视化功能: 基于C#开发的NMEA 0183协议上位机 一、项目结构二、核心代码实现1. 数据模型定义2. 串口通信管理3. NMEA协议解析核心4. 主界面实现(Windows Forms)三、界面设计关键元素(需在窗体…

Qt -DFS可视化

博客主页&#xff1a;【夜泉_ly】 本文专栏&#xff1a;【暂无】 欢迎点赞&#x1f44d;收藏⭐关注❤️ 目录 前言关于如何sleep实现思路Pixmapspixmaps.hpixmaps.cpp MapSquaremapsquare.hmapsquare.cpp dfsthreaddfsthread.hdfsthread.cpprun dfs其他 WidgetUnit其他 Qt -DFS…

RHCSA Linux 系统 文件系统权限

1. 文件的一般权限 &#xff08;1&#xff09;文件权限标识解读 drwxr - xr - x. 12 root root 144 Feb 17 16:51 usr ➤d&#xff1a;文件类型&#xff08;d 表示目录&#xff09; ➤rwx&#xff1a;文件所有者权限&#xff08;读 r&#xff0c;写 w&#xff0c;执行 x&am…

华为云IoT平台与MicroPython实战:从MQTT协议到物联网设备开发

目录 前言 1. 华为云 1.1. 创建实例 1.2. 创建产品 1.3. 编辑服务模型 1.4. 注册设备 1.4.1. 复制设备连接参数 1.5. 连接参考代码 2. micropython版-物联网 2.1. 环境搭建 2.2. 实现步骤 2.3. 示例代码 结语 前言 物联网&#xff08;IoT&#xff09;技术的快速发…

2025-04-30 AIGC-如何做短片视频

摘要: 2025-04-30 AIGC-如何做短片视频 如何做短片视频: 一、画图修图 1.保存视频&#xff08;无水保存&#xff09; 2.文案提取&#xff08;提取文案&#xff09; 3. DeepSeek(提示词&#xff09; 4.小梦Ai&#xff08;图片视频&#xff09; 5.修图Ai 6.扩图Ai 7.养生…

硬件工程师面试常见问题(10)

第四十六问&#xff1a;锁存器&#xff0c;触发器&#xff0c;寄存器三者的区别 触发器&#xff1a;能够存储一位二值信号的基本单元电路统称为 "触发器"。&#xff08;单位&#xff09; 锁存器&#xff1a;一位触发器只能传送或存储一位数据&#xff0c;而在实际工…

外部访问 Kubernetes 集群中 MQ 服务的方案

外部访问 Kubernetes 集群中 MQ 服务的方案 当您在 Kubernetes 集群中部署了消息队列服务&#xff08;如 RabbitMQ、Kafka、ActiveMQ 等&#xff09;后&#xff0c;以下是外部客户端访问这些服务的几种可靠方法&#xff1a; 一、基础访问方案 1. NodePort 方式暴露服务 # M…

论文笔记(八十二)Transformers without Normalization

Transformers without Normalization 文章概括Abstract1 引言2 背景&#xff1a;归一化层3 归一化层做什么&#xff1f;4 动态 Tanh &#xff08;Dynamic Tanh (DyT)&#xff09;5 实验6 分析6.1 DyT \text{DyT} DyT 的效率6.2 tanh \text{tanh} tanh 和 α α α 的消融实验…

软考中级-软件设计师 操作系统(手写笔记)

第一章&#xff1a;基础知识 第二章&#xff1a;进程管理 状态转换图 进程同步机制 信号量机制 信号量题 死锁 第三章&#xff1a;存储管理 基础知识 分页存储管理 分段存储管理 段页式存储管理 页面置换算法 第四章&#xff1a;文件管理 基础知识 索引分配 空闲存储空间的管…