当前位置: 首页 > news >正文

一、I/O的相关概念

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

相关文章:

  • JavaScript之Webpack的模块加载机制
  • es数据导出
  • Unity Post Processing 小记 【使用泛光实现灯光亮度效果】
  • 第2讲、Tensor高级操作与自动求导详解
  • gradle eclipse [.project .classpath .settings]
  • 【有啥问啥】深入理解 Layer Normalization (LayerNorm):深度学习的稳定基石
  • 【物理学】电磁学——电动势
  • 说一下Drop与delete区别
  • Kafka批量消费部分处理成功时的手动提交方案
  • 页面需要重加载才能显示的问题修改
  • openstack热迁移、冷迁移、疏散
  • SQL注入原理及防护方案
  • 基于BenchmarkSQL的OceanBase数据库tpcc性能测试
  • Java异常处理全面指南:从基础到高级实践
  • [MCU]SRAM
  • 路由协议基础
  • 【JS-Leetcode】2621睡眠函数|2629复合函数|2665计数器||
  • 2025上海车展 | 移远通信重磅发布AR脚踢毫米波雷达,重新定义“无接触交互”尾门
  • C++之异常
  • (云计算HCIP)HCIP全笔记(九)本篇介绍操作系统基础,内容包含:操作系统组成、分类和定义,Linux的特性结构和Linux版本分类
  • 一张老照片里蕴含的上海文脉
  • 新任浙江省委常委、杭州市委书记刘非开展循迹溯源学习调研
  • 上海市委常委会传达学习总书记重要讲话精神,研究张江科学城建设等事项
  • 多地征集农村假冒伪劣食品违法线索,全链条整治“三无”产品
  • 江西省宁都县政协原二级调研员谢亦礼被查
  • 文旅部副部长饶权出任国家文物局局长