操作系统入门到成神系列 二】磁盘比内存慢几万倍?

简介: 操作系统入门到成神系列 二】磁盘比内存慢几万倍?

磁盘比内存慢几万倍?

内存和硬盘都属于计算机的存储设备,断电后内存中的数据会丢失的,而硬盘不会,因为硬盘是一个 持久化的存储设备,也是一个 I/O 设备。

我们CPU内部也有存储数据的组件,比如:寄存器、CPU L1、L2、L3 Cache 也属于存储设备。

那问题来了,我们这些存储设备,谁的速度最快,谁的速度又最慢呢?

一、引言

本文参考 小林coding 的《图解操作系统》,也是我十分喜欢的一个公众号博主,为他打 call

老读者知道我之前再写 Kafka 的博文,为什么突然开始写操作系统的呢?

原因在于:当我看到 Kafka 服务端的一些 IO 操作时,我发现我看不懂了,了解之后发现这里 Netty 的概念。


当我尝试了解 IO 时,我发现一些内存、磁盘的交换,搞的我焦头烂额,于是,想静下心来从头开始。


当我把 小林coding 的 《图解操作系统》看完之后,我发现对操作系统的理解更上一层楼。

用一段话,作为今天的开场白:

读书的根本目的,未必是解决现实问题,它更像一场心灵的抚慰。

一个喜欢读书的人,可能不会记得自己读过哪些书。

但是那些看过的故事、收获的感悟、浸染过的气质,就像一颗种子,会在你的身体里慢慢发芽长大,不断提升你的认知,打开你的视野。

二、存储器的层次结构

大学准备考试了,你去图书馆临时抱佛脚。那么在看书的时候,我们的大脑会思考问题,也会记忆知识点。另外,我们通常也会把常用的书摆在自己的桌子上,当我们找一本不常用的书时,需要去书架进行寻找。

图书馆的例子对比我们的存储结构:

  • 大脑思考问题:寄存器
  • 记忆知识点:L1、L2、L3 Cache
  • 常用的书:内存
  • 书架的书:磁盘



25f007c9e5e5cb40d0af1c72cadaa258.png

对于存储器,它的速度越快、能耗会越高、而且材料的成本也是越贵的,以至于速度快的存储器的容量都比较小。

存储器的级别一般如下:


  • 寄存器
  • CPU Cache
  • L1-Cache
  • L2-Cache
  • L3-Cache
  • 内存
  • SSD/HDD 硬盘

1. 寄存器

寄存器的数量通常在几十到几百之间,寄存器的访问速度非常快,一般在半个CPU时钟周期完成读写。

比如 2 GHz 主频的CPU,时钟周期 = 1 / 2G = 0.5ns(纳秒)

  • 32 位的寄存器可以存储 4 个字节
  • 64 位的寄存器可以存储 8 个字节

2. CPU Cache

CPU Cache 使用的是一种 SRAM 的芯片,只要有电,数据就可以一直存在,而一旦断电,数据就会丢失。

一个 SRAM 芯片。一个 bit 的数据,通常需要 6 个晶体管。

CPU Cache 可以分 L1、L2、L3 三级高速缓存:


2.1 L1 高速缓存

时间:2-4 个时钟周期

大小:32KB + 32KB

组成:指令缓存和数据缓存

2.2 L2 高速缓存

时间:10-20 个时钟周期

大小:256KB

组成:数据缓存

2.3 L3 高速缓存

时间:20-60 个时钟周期

大小:3M

组成:数据缓存

3. 内存

内存使用的是 DRAM 的芯片,一个 bit 的数据,只需要一个晶体管和一个电容就能存储。内存速度大概在 200-300 时钟周期。

4. SSD/HDD 硬盘

SSD 我们常说的固态硬盘,相对内存最大的优点是:断电后可以保存数据。内存读写速度比SSD快 10-1000 倍。

DD 我们常说的机械硬盘,内存的读写速度比HDD快 10W 倍。

三、存储器的层级关系

CPU 不会和每一种存储器设备打交道,每一种存储器只会和他们相邻的存储器设备打交道。

比如:CPU Cache 的数据是从内存加载过来的,写回数据的时候也只写回到内存,

,CPU Cache 不会直接把数据写到硬盘,也不会直接从硬盘加载数据,而是先加载到内存,再从内存加载到 CPU Cache 中。


所以,每个存储器只和相邻的一层存储器设备打交道,并且存储设备为了追求更快的速度,所需的材料成本必然也是更高,也正因为成本太高,所以 CPU 内部的寄存器、L1、L2、L3 Cache 只好用较小的容量,相反内存、硬盘则可用更大的容量,这就我们今天所说的存储器层次结构

当然,由于存储器的和相邻的存储器打交道,我们的CPU访问内存数据的时候,会先访问寄存器,寄存器找不到会去 L1 Cache 以此类推。


四、存储器之间的实际价格和性能差距










相关文章
|
22天前
|
自然语言处理 运维 前端开发
OS Copilot-操作系统智能助手-新手小白入门必选~
作为一名安卓开发工程师,我日常专注于前端和移动端开发。然而,在项目推进中偶尔需要部署服务端,这对不熟悉Linux的我来说颇具挑战。每次用命令行工具操作时,常需频繁查阅命令及参数,效率低下。 幸运的是,我发现了阿里云推出的OS Copilot智能助手。它通过自然语言问答功能,让命令行操作变得轻松流畅,帮助我快速定位并解决问题,显著提升了工作效率。安装简单,配置便捷,支持单命令模式和命令行模式,极大简化了Linux操作,成为我得力的开发利器。 总结而言,OS Copilot让我这个Linux小白也能高效处理服务端任务,操作体验焕然一新,是不可多得的智能助手。
|
3月前
|
Java 数据库连接 测试技术
SpringBoot入门 - 添加内存数据库H2
SpringBoot入门 - 添加内存数据库H2
129 3
SpringBoot入门 - 添加内存数据库H2
|
3月前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
68 4
SpringBoot入门(4) - 添加内存数据库H2
|
4天前
|
消息中间件 存储 缓存
kafka 的数据是放在磁盘上还是内存上,为什么速度会快?
Kafka的数据存储机制通过将数据同时写入磁盘和内存,确保高吞吐量与持久性。其日志文件按主题和分区组织,使用预写日志(WAL)保证数据持久性,并借助操作系统的页缓存加速读取。Kafka采用顺序I/O、零拷贝技术和批量处理优化性能,支持分区分段以实现并行处理。示例代码展示了如何使用KafkaProducer发送消息。
|
2月前
|
C语言 开发者 内存技术
探索操作系统核心:从进程管理到内存分配
本文将深入探讨操作系统的两大核心功能——进程管理和内存分配。通过直观的代码示例,我们将了解如何在操作系统中实现这些基本功能,以及它们如何影响系统性能和稳定性。文章旨在为读者提供一个清晰的操作系统内部工作机制视角,同时强调理解和掌握这些概念对于任何软件开发人员的重要性。
|
2月前
|
Linux 调度 C语言
深入理解操作系统:从进程管理到内存优化
本文旨在为读者提供一次深入浅出的操作系统之旅,从进程管理的基本概念出发,逐步探索到内存管理的高级技巧。我们将通过实际代码示例,揭示操作系统如何高效地调度和优化资源,确保系统稳定运行。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开一扇了解操作系统深层工作原理的大门。
|
2月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
191 7
|
2月前
|
开发框架 .NET PHP
网站应用项目如何选择阿里云服务器实例规格+内存+CPU+带宽+操作系统等配置
对于使用阿里云服务器的搭建网站的用户来说,面对众多可选的实例规格和配置选项,我们应该如何做出最佳选择,以最大化业务效益并控制成本,成为大家比较关注的问题,如果实例、内存、CPU、带宽等配置选择不合适,可能会影响到自己业务在云服务器上的计算性能及后期运营状况,本文将详细解析企业在搭建网站应用项目时选购阿里云服务器应考虑的一些因素,以供参考。
|
3月前
|
算法 调度 开发者
深入理解操作系统:从进程管理到内存分配
本文旨在为读者提供一个深入浅出的操作系统知识之旅,从进程管理的基础概念出发,探索内存分配的策略与技巧。我们将通过实际代码示例,揭示操作系统背后的逻辑与奥秘,帮助读者构建起对操作系统工作原理的直观理解。文章不仅涵盖理论知识,还提供实践操作的指导,使读者能够将抽象的概念转化为具体的技能。无论你是初学者还是有一定基础的开发者,都能在这篇文章中找到有价值的信息和启发。
|
3月前
|
算法 调度 C++
深入理解操作系统:从进程管理到内存分配
【10月更文挑战第42天】本文将带你进入操作系统的神秘世界,探索其核心概念和关键技术。我们将从进程管理开始,了解操作系统如何协调和管理多个程序的运行;然后,我们将深入研究内存分配,看看操作系统如何有效地分配和管理计算机的内存资源。通过这篇文章,你将获得对操作系统工作原理的深入理解,并学会如何编写高效的代码来利用这些原理。