如何查看linux块大小

1.fdisk -l 查看块大小:

[root@localhost alice]# fdisk -l
Disk /dev/sda:300 GiB,322122547200 字节,629145600 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xece8cb44

2.

[root@localhost alice]# stat /文件:/大小:237       	块:0          IO 块:4096   目录
设备:fd00h/64768d	Inode:128         硬链接:17
权限:(0555/dr-xr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:root_t:s0
最近访问:2023-11-30 07:49:27.453607895 -0500
最近更改:2023-11-12 03:27:36.961555919 -0500
最近改动:2023-11-12 03:27:36.961555919 -0500
创建时间:-

3.

[root@localhost alice]# blockdev --getbsz /dev/sda
4096

查到上述结果后,我不仅要问:他m的到底一个块多大?512kb byte or 4096 byte?

         系统中能够随机(不需要按顺序)访问固定大小数据片(chunks)的硬件设备称作块设备,这些固定大小的数据片就称作块。最常见的块设备为硬盘,其他的还有软盘驱动器、闪存等,它们都是以安装文件系统的方式使用的。

        另一种基本的设备类型是字符设备。字符设备按照字符流的方式被有序访问,像串口和键盘就属于字符设备。

        对于这两种类型的设备,它们的区别在于是否可以随机访问数据。内核对块设备的管理需要有一个专门提供服务的子系统,对字符设备的管理则不需要。

一、剖析一个块设备

        块设备中最小的可寻址单位是扇区。扇区大小一般是 2 的整数倍,最常见的是 512 字节。扇区的大小是设备的物理属性。

        在软件层面上,最小逻辑可寻址单元为块。块是文件系统的一种抽象,只能基于块来访问文件系统。虽然物理磁盘寻址是按照扇区进行的,但是内核执行的所有操作都是按照块进行的。所以块不能比扇区还小,只能倍数于扇区大小。

        总之,扇区是设备的最小寻址单元,也被称为 “硬扇区” 或 “设备块”;同样地,块是文件系统的最小寻址单元,也被称为 “文件块” 或 “I/O 块”。

二、缓冲区和缓冲区头

        当一个块被调入内存时(在读入后或等待写出时),它要存储在一个缓冲区中。每个缓冲区与一个块对应,它相当于是磁盘块在内存中的表示。一个页可以容纳一个或多个内存中的块。由于内核在处理数据时需要一些相关的控制信息(比如一个块属于哪个块设备,块对应于哪个缓冲区等),所以每一个缓冲区都有一个对应的描述符 buffer_head 结构体,称为缓冲区头,定义在 <linux/buffer_head.h>,它包含了内核操作缓冲区所需要的全部信息:

        但是,将缓冲区头作为 I/O 操作单元带来了两个弊端:

        缓冲区头是一个很大且不容易控制的数据结构体,而且缓冲区头对数据的操作既不方便也不清晰。

        它仅能描述单个缓冲区,缓冲区头会促使内核八大块数据的 I/O 操作分解为多个 buffer_head 结构体进行操作。

所以后面为块 I/O 操作引入了一种新型、灵活并轻量级的容器——bio 结构体。

三、bio 结构体

        目前内核中块 I/O 操作的基本容器由 bio 结构体表示,定义在 <linux/bio.h>。该结构体代表了正在活动的以片段(segment)链表形式组织的块 I/O 操作。一个片段是一小块连续的内存缓冲区,而片段链表可以使一个缓冲区分散在内存的多个位置上,bio 结构体能对内核保证 I/O 操作的执行,像这样的向量 I/O 就是所谓的聚散 I/O。

        bio 结构体定义于 <linux/bio.h> 中:

        使用 bio 结构体的目的主要是代表正在现场执行的 I/O 操作,所以该结构体中的主要域都是用来管理相关信息的:

        bi_io_vec 域指向一个 bio_vec 结构体数组,该结构体链表包含了一个特定 I/O 操作所需要使用到的所有片段。每个 bio_vec 结构都是一个形式为 <page, offset, len> 的向量,它描述的是一个特定的片段:片段所在的物理页、块在物理页中的偏移位置、块长度。

        总之,每一个块 I/O 请求都通过一个 bio 结构体表示,每个请求包含一个或多个块,这些块存储在 bio_vec 结构体数组中,bio_vec 结构体描述了每个片段在物理页中的实际位置,并且像向量一样被组织在一起。

        bio 结构体代表的是 I/O 操作,它包含内存中的一个或多个页;而 buffer_head 结构体代表的是一个缓冲区,它描述的仅仅是磁盘中的一个块。

四、请求队列

        块设备将它们挂起的块 I/O 请求保存在请求队列中,该队列由 request_queue 结构体表示,定义在文件 <linux/blkdev.h> 中,包含一个双向请求链表以及相关控制信息。

        队列中的请求由结构体 request 表示,一个请求可能要操作多个连续的磁盘块,所以每个请求可以由多个 bio 结构体组成。

五、I/O 调度程序

        磁盘寻址是整个计算机中最慢的操作之一,为了缩短寻址时间,Linux 引入了 I/O 调度程序。

        I/O 调度程序将磁盘 I/O 资源分配给系统中所有挂起的块 I/O 请求。I/O 调度程序通过两种方法减少磁盘寻址时间:合并与排序。

           合并指将两个或多个请求结合成一个新请求,即如果两个请求访问的磁盘扇区相邻,那么可以把两个请求合并为一个请求,这样可以将 I/O 多次请求的开销压缩成一次请求的开销。

           排序指将整个请求队列按扇区增长方向有序排列,通过保持磁盘头以直线方向移动,从而缩短所有请求的磁盘寻址时间。这种 I/O 调度程序也被称为电梯调度。

Linux 实际使用的 I/O 调度程序有如下几种:

    Linux 电梯

    最终期限 I/O 调度程序

    预测 I/O 调度程序

    完全公正的排队 I/O 调度程序

    空操作的 I/O 调度程序

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

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

相关文章

go使用aes加密算法

工具代码 package toolimport ("bytes""crypto/aes""crypto/cipher" )// AES加密函数 var key []byte []byte("0#3456789ABCDEF") //todo 记住这个长度只能是16 24 32 如果不是的话话会报错 func Encrypt(data []byte) ([]byte, er…

说一说MySQL中的锁机制

说一说MySQL中的锁机制 按粒度大小从大到小分为 全局锁 全局锁 全局锁是对整个数据库的锁&#xff0c;最常用的全局锁就是读写锁 读锁 阻止其他用户更新数据&#xff0c;允许其他用户读数据写锁 阻止其他用户更新和读数据 修改一些大量的数据&#xff0c;并且不希望其他用户…

Java语法之字符串类型

String类 在Java中&#xff0c;使用String类定义字符串类型&#xff0c;如下&#xff1a; String s1"hello";System.out.println(s1); 字符串拼接 只要s1s2即可 在字符串中&#xff0c;如果俩个字符串进行相加&#xff0c;那他就是字符串拼接的意思 补充 如上&am…

ARM架构基础简介

目录 一、概述 二、关于ARM架构 三、我们所说的架构是什么意思? 四、系统架构

c++异常介绍

一 . C语言传统的处理错误的方式 1. 终止程序&#xff0c;如assert&#xff0c;缺陷&#xff1a;用户难以接受。如发生内存错误&#xff0c;除0错误时就会终止程序。2. 返回错误码&#xff0c;缺陷&#xff1a;需要程序员自己去查找对应的错误。 二 . C异常概念及使用 当一个…

6.7 Windows驱动开发:内核枚举LoadImage映像回调

在笔者之前的文章《内核特征码搜索函数封装》中我们封装实现了特征码定位功能&#xff0c;本章将继续使用该功能&#xff0c;本次我们需要枚举内核LoadImage映像回调&#xff0c;在Win64环境下我们可以设置一个LoadImage映像加载通告回调&#xff0c;当有新驱动或者DLL被加载时…

Android监听用户的截屏、投屏、录屏行为

Android监听用户的截屏、投屏、录屏行为 一.截屏 方案一&#xff1a;使用系统广播监听截屏操作 ​ 从Android Q&#xff08;10.0&#xff09;开始&#xff0c;Intent.ACTION_SCREEN_CAPTURED_CHANGED字段不再被支持。这是因为Google在安卓10 中引入了一个新的隐私限制&#…

zookeeper实操课程Acl 访问权限控制,命令行测试

本系列是zookeeper相关的实操课程&#xff0c;课程测试环环相扣&#xff0c;请按照顺序阅读测试来学习zookeeper。阅读本文之前&#xff0c;请先阅读----​​​​​​zookeeper 单机伪集群搭建简单记录&#xff08;实操课程系列&#xff09;。 阅读本文之前&#xff0c;请先阅读…

Oauth2.0 学习

OAuth 2.0 服务器端通常通过验证每次请求中的访问令牌&#xff08;access token&#xff09;的方式来确保其合法性和有效性。以下是一些通常采用的验证方法&#xff1a; Token Validation Endpoint: OAuth 2.0 规范允许实现一个专门的令牌验证端点&#xff0c;称为 Token Valid…

ipvlan介绍

最近使用docker&#xff0c;涉及到需要跨多台物理机部署系统&#xff0c;查了好多资料&#xff0c;最后查到了ipvlan。那什么是vlan&#xff0c;什么又是ipvlan。 交换机层面的vlan&#xff0c;是按802.1Q规范&#xff0c;在链路层中加了4字节的标识vlan的数据&#xff0c;交换…

YUVRGB

一、直观感受 根据上面的图片&#xff0c;不难看出&#xff1a; RGB的每个分量&#xff0c;是对当前颜色的一个亮度值Y分量对呈现出清晰的图像有着很大的贡献Cb、Cr分量的内容不太容易识别清楚YUV将亮度信息&#xff08;Y&#xff09;与色度信息&#xff08;UV&#xff09;分离…

深入理解原码、反码、补码(结合C语言)

一、引出问题 在学习C语言单目操作符中~按位取反的过程中&#xff0c;对这样一段代码的结果产生了疑惑&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h>int main() {int a 0;int b ~a;//按位取反printf("%d\n", b);return 0; }输出结果…

TypeScript 变量声明详细教程

文章目录 前言var 声明作用域规则变量获取怪异之处let 声明块作用域重定义及屏蔽块级作用域变量的获取const 声明let vs. const解构数组对象解构属性重命名后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;vue.js &#x1f431;‍&#x…

【MySQL】视图 + 用户管理

视图 前言正式开始视图用户管理user表创建新用户修改用户密码权限管理给用户赋权剥夺权限 前言 本篇所讲的视图和我上一篇事务中所讲的读视图不是一个东西&#xff0c;二者没有任何关系&#xff0c;如果看过我前一篇博客的同学不要搞混了。 其实视图和用户管理本来是想着分开…

华为OD机试真题-虚拟游戏理财-2023年OD统一考试(C卷)

题目描述: 在一款虚拟游戏中生活,你必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局。现有一家Bank,它提供有若干理财产品m,风险及投资回报不同,你有N(元)进行投资,能接受的总风险值为X。 你要在可接受范围内选择最优的投资方式获得最大回报。 说明: 在虚拟游戏中…

CAPL通过在函数内改变全局变量的值

CAPL通过&在函数内改变全局变量的值 先定义一个全局变量。 variables {int tiancihaoche; }再定义一个函数如下: void change_1(int test) {test=555; }测试下: on key 2 {

大数据Doris(三十二):Doris高级功能

文章目录 Doris高级功能 一、​​​​​​​表结构变更

VMware Workstation Pro 17及 Windows 11 虚拟机的安装与激活

六点钟&#xff1a; 吃晚饭吗 不吃&#xff0c;胖胖 十点钟&#xff1a; 阿昊要吃夜宵对不对 ——CSDN&#xff0c;记录牛马生活 本文是在学习 Linux 期间&#xff0c;使用 VMware 时顺带学习 Windows 11 虚拟机的安装与激活 VMware Workstation Pro 17及 Windows 11 虚拟机…

Java Throwable

如图展示了 Java 整个异常体系的关系。 Throwable 的 Java 异常体系的基类, 他的直接子类有 Error 和 Exception 2 个。 1 Error Error 表示的是由于系统错误, Java 虚拟机抛出的异常, 例如 Java 虚拟机崩溃, 内存不够等, 这种情况仅凭程序自身是无法处理的, 在程序中也不会…

JTag 刷写TC397 的Flash

本文实现一个Trace32脚本的示例&#xff0c;用于连接JTAG端口并刷写基于TC397芯片的Flash&#xff1a; /SILENT /NOQUIET /OPENDEBUGGER /VERSION /IFCONNECTION JTAG /CPU TC397 ; 根据具体芯片的型号选择正确的CPU类型 /CONNECT /PROTOCOL JTAG /FREQUENCY 10000000 …