计算机存储设备

缓存为啥比内存快

内存使用 DRAM 来存储数据的、也就是动态随机存储器。内部使用 MOS 和一个电容来存储。

需要不停地给它刷新、保持它的状态、要是不刷新、数据就丢掉了、所以叫动态 、DRAM

缓存使用 SRAM 来存储数据、使用多个晶体管(比如6个)就是为了存储1比特

内存编码

内存控制器:作为 CPU 和 内存的中介、为两位提供服务。

CPU 给内存存储空间统一编址、以字节为单位、然后要读取数据的时候直接把地址交给内存控制器、然后内存控制器再映射成内存的哪个芯片哪个分片哪些位置。

后面将这个内存控制器直接集成到 CPU 内部了

NUMA

Non Uniform Memory Access 非一致性内存访问

16 个车间拆分位两部分,成为两个 CPU、组成两个 NUMA 节点。每个 cpu 里面有 8 个核心。

每个节点直接连接一部分内存、两个节点之间有专门的inter-connect(内连接)通道。

各个节点访问自己管理的内存叫作本地访问 Local Access,通过 inter-connect 通道反问其他节点管理的内存叫作远程访问 remote Access。很显然、前者的访问速度要比后者快很多。

操作系统对此的支持

首先是缓存的问题、操作系统的进程和线程调度管理部门需要尽量不要跨 NUMA 节点调度线程、不然都话、缓存都失效了。

还有就是内存亲和性的问题、线程在哪个 NUMA 节点内执行、就把内存分配到那个节点直接连接的内存中、避免跨节点内存访问。

NUMA 节点和物理 CPU 并不是意义对应的、实际情况可能会更复杂

机械硬盘

金属磁粒

磁道、磁头、每个扇区固定存储 512 字节

机械硬盘每次读写都是以扇区作为单位、即使你只想读取一字节、也得把我所在的整个扇区一起读取出去。

操作系统把几个连续的扇区当作一个整体、叫作块、读写都是以块为单位进行的。

最常见的是以 8 个扇区构成的块、也就是4096字节。4kb

块位图

为了知道哪些块是空着的、哪些块是已经使用的、文件系统使用位图进行记录、0表示空闲、1表示占用。

位图放在专门的块中、比如放在第一个块中。

inode

每个文件都有一个 inode 对象

inode 对象中包含文件的大小、所在块的位置、权限、时间等数据、只要拿到 inode 数据就能找到文件了。

inode 对象存在哪?

inode 表、每个 inode 对象都是 128 字节、整整齐齐的列在表格中、每个 inode 对象都哟一个号码、拿着 inode 号码就能查找到 inode 对象、进而找到文件。

那怎么知道 inode 表哪些是空闲的哪些是已经使用了的?

inode 位图块

在这里插入图片描述

目录

有个表格、记录的是文件名和 inode 号的映射关系

可以使用单独一个文件来存储这个表格、并把它叫作目录、里面的每一项都是一个目录项、目录文件里面记录的内容就是属于这个目录下的所有文件、通过这个目录项就能将文件名翻译成 inode 号

如何找到根目录文件?

把它放到 inode 表格开头固定的位置

描述符

inode 对象的大小是 128字节、一个块的大小是 4096、那么可以存放 32 个 inode 对象、但是一个硬盘怎么可能只有 32 个对象

所以只用一个块来做 inode 表肯定不够的、要有多个才行、既然多个、那么就要把它的位置信息记录下来、

那就再拿一个块来记录这些信息吧、叫做描述符、顺便把位图块、inode 位图块的位置信息记录下来。

超级块

一个块才 4k 用它来充当块位图、最多能表示 8 x *4096 = 32768 个数据块、也即是 32768 *x 4k = 128M

硬盘空间肯定会比这个大的。

那就将硬盘空间进行分组、每个块组就是 128M

但是分成多个块组之后、又有一个新的问题、如果想知道所有块组总共使用了多少块、剩余多少块、怎么去统计?

一个个块组去遍历吗?干脆再拿一个块来记录这些全局信息、那就叫它超级块、放在第一个块组的最前面。

这样子之后、一个完整的文件系统存储格局就出来了

引导块、分区DBR 和 MBR

一个硬盘可以有多个分区、每个分区都可以使用不同的文件系统、所以上面所说的规则、只对硬盘的某个分区有效的。

每个分区的开头、需要一个启动扇区 DBR 安装操作系统的时候、引导程序久被写到这里、所以还需要在分区的最前面准备一个引导块。

最后还要找个地方将所有的分区信息记录起来、它位于硬盘的第一个扇区、同时还肩负着引导操作系统的重要使命、它的名字叫主引导记录 – MBR

上面这个文件系统叫做 ext2

https://book.douban.com/subject/36428782/

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

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

相关文章

RabbitMQ ---- 死信队列

RabbitMQ ---- 死信队列 1. 死信的概念2. 死信的来源3. 死信实战3.1 代码架构图3.2 消息 TTL 过期3.3 队列达到最大长度3.4 消息被拒 1. 死信的概念 死信,顾名思义就是无法被消费的消息,字面意思可以这样解释,一般来说,producer …

python中文版下载安装教程,python中文版下载官网

大家好,本文将围绕python中文版软件下载百度网盘展开说明,python中文版下载安装教程是一个很多人都想弄明白的事情,想搞清楚python中文最新版下载需要先了解以下几个事情。 1、python下载安装教程_百度知道 python下载安装教程:自…

ant 后台自定义左侧菜单的图标

最终达成结果: 操作步骤 1.登录阿里图库新增项目 iconfont-阿里巴巴矢量图标库 ,点击资源管理-我的项目-新增项目,如图所示: 填写项目名称,项目名称随便填,不重要 填写前缀和font family,如上…

create-react-app -V 报错无法将“create-react-app”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

create-react-app -Vcreate-react-app : 无法将“create-react-app”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果 包括路径,请确保路径正确,然后再试一次。 所在位置 行:1 字符: 1 + create-react-app -V + ~~~~~~~~~~~~~~~~+ CategoryInfo …

探索字符与字符串:基本库函数的使用(二)

目录 文章目录 前言 函数模拟实现 strlen strcpy strcat strstr strcmp memcpy memmove 总结 前言 继接上文,本片文章我将带领大家去模拟实现一些基本的库函数。 函数模拟实现 strlen 前文我们已将基本了解了strlen函数是用于计算字符串长度的,那么接…

使用 docker-compose 部署 Jenkins

注:我是在虚拟机(Ubuntu)上部署了 docker-compose,然后才使用 docker-compose 部署 Jenkins! 关于如何在 Ubuntu 部署 docker-compose,可以看我其它的文章。 本文目录 1. 创建 docker_jenkins_compose 目录…

Modbus tcp转ETHERCAT网关modbus tcp功能码

远创智控YC-ECT-TCP网关能够连接到Modbus tcp总线和ETHERCAT总线中,实现两种不同协议设备之间的通讯。这个网关能够大大提高工业生产的效率和生产效益,让生产变得更加智能化。远创智控YC-ECT-TCP 是自主研发的一款 ETHERCAT 从站功能的通讯网关。该产品主…

小程序Url Link跳转怎么获取query参数?

onLoad(options){if (options) {let value1 decodeURIComponent(options.value1)let value2 decodeURIComponent(options.value2)...调用后台接口查询数据} } 我是通过这种方式接收参数的,如果想验证可以通过编译器模拟:

深度学习标量、向量、矩阵、张量之间的区别与联系

文章目录 前言1、张量**注意**: 2、**标量** (scalar):0阶的张量,0个轴,一个单独的数(整数或实数);3、**向量**(vector):1阶的张量,也叫矢量,1个轴,一个数组;…

Openlayers实战:多地图底图切换

在实际的地图项目中,不管是我们看到的百度地图还是高德地图等,都会有地图切换这一项。 在Openlayers实战中,我们用三种地图做demo,分别是谷歌地图。Openstreetmap,stamen地图。 切换的主要原则是设置三个底图层,设定其显示状态,用到了visible这一个属性。 效果图 源代码…

【Visual Studio】在 Windows 上使用 Visual Studio 构建 VTK

知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 编号内容1【Visual Studio】在 Windows 上使用 Visual Studio 构建 VTK2【Visual Studio】在 Windows 上使用 Visual Studio 配合 Qt 构建 VTK3【VTK】VTK 显…

vue3中通过vue-i18n实现国际化

效果图 前言 突然想在vue3项目中使用国际化功能,查阅相关资料后发现和vue2的用法有些出入,记录一下 使用 下载vue-i18n npm i vue-i18n2、准备语言文件 目前我的项目只支持中英文切换,故准备一份中文文件和一份对应的英译文件 创建langur…