Linux 基础IO(2)磁盘文件

news2024/11/17 11:00:07

文章目录

    • 1.磁盘文件
    • 2.文件系统
    • 3.软硬链接
      • 1.软链接
      • 2.硬链接
    • 4.动静态库
      • 1.静态库
      • 2.动态库

1.磁盘文件

在这里插入图片描述
在这里插入图片描述

  1. 扇区:整个盘片分成不同的区块,每一个区块就是一个扇区。
    扇区是磁盘IO的基本单位,一般为512Byte4KB,一般磁盘都是512Byte
  2. 磁道:同一半径一圈区域是磁道

磁盘读写依靠的是磁头,盘面高速旋转,磁头来回摆动。
首先,确定在那个盘面,也就是磁头 head
其次,磁头来回摆动定位磁道 cylinder
然后,盘面高度旋转定位扇区 sector
这样在就可以定位在哪个盘面,哪个磁道的哪个扇区
这样的方法叫做CHS定址法

2.文件系统

扇区是磁盘IO的基本单位,把整个磁盘想象成一个数组,每个元素就是一个扇区,节点下标就是这个扇区的编号
在这里插入图片描述
OS认为一次访问一个扇区,单位太小了,所以操作一次读取4KB的数据块(8个扇区)
在这里插入图片描述
同时,我们把这种地址叫做逻辑区块地址(LBA)

LBA地址怎么转换成CHS呢
首先,设当前LBA = n, 将LBA地址转换为扇区编号区间[8 * n, 8 * n + 7]
扇区编号转CHS:

  1. 盘面c = x / 一个盘面的扇区个数 x %= 一个盘面的扇区个数
  2. 在哪个磁道:x / 一个磁道上扇区个数
  3. 在哪个扇区 : x % 一个磁道上扇区个数

我们使用笔记本/台式机经常会听到分区,但实际上我们的硬盘不会被分成几块,只是划分成了几个区域
在这里插入图片描述
在这里插入图片描述

1.Boot Block(启动块):它的大小是确定的,即1KB,用来存储磁盘分区信息和启动信息。Boot Block的主要作用是引导计算机启动,将操作系统载入内存中
2. inode Table:存放文件属性,如文件大小,所有者,最近修改时间等
3. inode Bitmap:比特位的位置表示第几个inode,比特位的内容表示该inode是否被使用
4. Data blocks:存放文件内容
5. Block Bitmap:比特位的位置表示块号,比特位的内容表示对应的块是否被使用
6. GDT(Group Descriptor Table):块组描述符,描述块组属性信息,管理分组
7. Super Block:存放文件系统本身的结构信息,管理分区

linux系统中每个文件都有它对应的inode,OS只认inode。每个inode占128Byte, inode分区内唯一。
linux中,文件内容和属性分开存储,文件名不属于文件属性。
目录本身也是一个文件,拥有自己的inode和数据块,数据块中保存的是当前目录下的文件名和文件inode的对应关系。
对一个文件,进行增删查改都和文件所处的目录有关系,所以在内核中,都要逆向递归般得到/,从根目录开始进行路径解析
所以之前权限时讲到目录的权限,如果没有r,就无法读取目录下的文件,本质就是无法访问目录数据块的内容,如果没有w,就无法修改当前目录下的文件,因为无法增加或删除或更改存储在目录数据块中的文件名和inode的映射关系。

3.软硬链接

1.软链接

在这里插入图片描述
软链接本质是一个独立的文件,有独立的inode和数据块,软链接的内容中存放着目标文件的路径,相当于快捷方式
可以为目录建立软连接
在这里插入图片描述

2.硬链接

在这里插入图片描述
硬链接的本质是在指定目录下插入新的文件和和inode的映射关系,同时让inode的引用计数(硬链接数)++
在这里插入图片描述
我们不能为目录建立硬链接,除非操作系统自己建立
在这里插入图片描述
一个目录下有多少个子目录:硬连接数 - 2

4.动静态库

在Linux下,静态库的后缀是 .a,动态库的后缀是 .so
在Window下,静态库的后缀是 .lib,动态库的后缀是 .dll
libc.so库名去掉前缀lib,去掉后缀.a/.so就是库的名字

1.静态库

生成静态库
生成.o文件:在这里插入图片描述
打包生成静态库:在这里插入图片描述
ar:打包 -r:replace -c:create
使用静态库:在这里插入图片描述
gcc 选项: -l:指定库名 -L:指定库路径 -I:指定头文件路径
静态库编译生成成功,运行时就不需要了
在这里插入图片描述

库搜索路径:
-L指定目录下
系统指定目录下/usr/lib

2.动态库

生成.o文件:在这里插入图片描述
gcc 选项: -fPIC:生成与位置无关码
打包生成动态库:在这里插入图片描述
使用动态库:
在这里插入图片描述
运行:在这里插入图片描述
运行时报错:无法找到动态库,所以动态库在编译时需要给gcc/g++搜索路径,同时运行时需要给OS搜索路径
解决方法:

  1. 拷贝.so到系统共享库路径下
    在这里插入图片描述
  2. 更改LD_LIBRARY_PATH环境变量
    将不在系统默认库搜索路径下的库的路径,添加到LD_LIBRARY_PATH
    缺点:bash重启之后需重新配置
    在这里插入图片描述
  3. 在系统库的默认搜索路径下添加软链接
    在这里插入图片描述
    在这里插入图片描述
  4. 系统配置文件/etc/ld.so.conf.d/
    在这里插入图片描述
    ldconfig:让配置文件生效

静态库:程序在编译链接时把库的代码复制到可执行文件中,程序运行时不再需要静态库
动态库:程序在运行时动态链接动态库的代码,多个库共享使用库的代码

  1. 同时提供静态库和动态库,gcc默认使用动态库
  2. 同时提供静态库和动态库,要静态链接,必须使用-static选项
  3. 只提供静态库,可执行程序只能对该库进行静态链接,但程序不一定是静态的,可能会动态链接其他库
  4. 只提供动态库,要静态链接,会发生链接报错

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

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

相关文章

一年期免费SSL证书正在消失?这里还有

在数字化时代,数据安全与隐私保护的重要性不言而喻。SSL(Secure Sockets Layer)证书作为保障互联网通信安全的关键工具,其有效期一直是业界关注的焦点。近年来,我们见证了免费一年期SSL证书向三个月有效期的转变&#…

【LeetCode刷题记录】24. 两两交换链表中的节点

24 两两交换链表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:head [1,2,…

C++ 编译器中对 use after free 的检查示例

意图&#xff1a;检查源代码中是否存在某些地址&#xff0c;在free掉之后还对其进行了访问。 1, 示例远代码 cat hello_sani.cpp #include <iostream>using namespace std;int main(int argc, char **argv) {int i 1;int *A new int[12];cout <<"newed …

【Unity】AssetBundle加载与卸载

unity官方apiAssetBundle-LoadFromFileAsync - Unity 脚本 API 异步加载AB包 using UnityEngine; using System.Collections; using System.IO;public class LoadFromFileAsyncExample : MonoBehaviour {IEnumerator Start(){var bundleLoadRequest AssetBundle.LoadFromFil…

【执行数据库操作时Tomcat报错但不影响使用】error testWhileIdle is true, validationQuery not set

问题描述 每次重新部署项目后&#xff0c;执行数据库相关操作都会报个“严重error”&#xff0c;之后再查询数据库就不会有了&#xff0c;目前看来没任何其他影响 24-Apr-2024 20:19:15.195 严重 [http-nio-8082-exec-12] com.alibaba.druid.support.logging.JakartaCommons…

stable diffusion webui 使用 SDXL模型

可以去c站上下载别人处理好的模型&#xff0c;从liblib里下载也可以 DreamShaper XL 将下载好的模型复制到/models/Stable-diffusion目录下&#xff0c;webui的界面里选择加载模型 测试了一下&#xff0c;需要注意的是这三个选项 采样器必须设置为DPM SDE Karras &#xf…

java SpringMvc笔记

springMVC M:模型层,包含实体类,业务逻辑层,数据访问层; v: 视图层,html,javascript,vue等 c:控制层,它是用来接收客户端的请求,并返回响应客户端的组件,Servelet组件 SpringMVC 1、轻量级&#xff0c;基于MVC的框架 2、具备IOC和AOP 3、完全基于注解开发 client(客户端)-&am…

用友 GRP-U8 fastjson远程代码执行漏洞复现(XVE-2024-8863)

0x01 产品简介 用友GRP-U8R10行政事业内控管理软件是用友公司专注于国家电子政务事业,基于云计算技术所推出的新一代产品,是我国行政事业财务领域最专业的政府财务管理软件。 0x02 漏洞概述 用友 GRP-U8 R10系列版本 VerifyToken 接口存在低版本fastjson反序列化漏洞,未经…

分布式与一致性协议之CAP(一)

CAP理论 概述。 在开发分布式系统的时候&#xff0c;会遇到一个非常棘手的问题&#xff0c;那就是如何根据业务特点&#xff0c;为系统设计合适的分区容错一致性模型&#xff0c;以实现集群能力。这个问题棘手在当发生分区错误时&#xff0c;应该如何保障系统稳定运行而不影响…

高精度加法及乘法

目录 字符串的高精度加法 为什么需要高精度加法&#xff1f; 怎么进行高精度加法&#xff1f; 链表的高精度加法 翻转链表&#xff08;带虚拟头节点&#xff09; 字符串的高精度乘法 字符串的高精度加法 大数加法_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.co…

超详细神仙级Python入门教程,从零基础入门到精通,从看这篇开始

一、初聊Python 1.为什么要学习Python&#xff1f; 在学习Python之前&#xff0c;你不要担心自己没基础或“脑子笨”&#xff0c;我始终认为&#xff0c;只要你想学并为之努力&#xff0c;就能学好&#xff0c;就能用Python去做很多事情。在这个喧嚣的时代&#xff0c;很多技…

数字积分生态:区块链与电商的未来发展之路

大家好&#xff0c;我是微三云周丽&#xff0c;今天给大家分析当下市场比较火爆的商业模式&#xff01; 小编今天跟大伙们分享什么是区块链与电商的完美结合&#xff1f; 区块链技术作为一种去中心化、不可篡改的分布式账本技术&#xff0c;正逐渐渗透到各行各业&#xff0c;给…

yolov5实现人脸检测与性别分类

自建数据集训练人脸检测模型 自建数据集训练人脸性别分类研判模型 使用代码级联两个模型实现静态识别 动态实时识别 python开发语言&#xff0c;pytorch框架&#xff0c;支持一键部署运行

齐护K210系列教程(十一)_显示摄像头图像

显示摄像头图像 因不同的型号在设计的屏显示方向时不同&#xff0c;我们设计程序时可以通过旋转屏幕或摄像头图像的方式来达到正确的显示方向。 型号Q1及掌机前面还有一个RGB灯可以用于摄像头的补光&#xff0c;这样在比较暗的环境下可以开启&#xff0c;让摄像头图像更清晰。…

云计算技术架构及发展

云计算是指一种将可伸缩、弹性、共享的物理和虚拟资源池以按需自服务的方式供应和管理&#xff0c;并提供网络访问的模式。 云计算服务商利用分布式计算和虚拟资源管理等技术&#xff0c;通过网络将分散的ICT资源集中起来形成共享的资源池&#xff0c;并以动态按需和可度量的方…

mysql buffer pool详解

介绍 缓冲池是InnoDB在访问表和索引数据时缓存的主内存区域。缓冲池允许直接从内存访问频繁使用的数据&#xff0c;这加快了处理速度。在专用服务器上&#xff0c;通常会将多达80%的物理内存分配给缓冲池。 为了提高大容量读操作的效率&#xff0c;缓冲池被划分为可能包含多行…

Ubuntu查看端口状态

完蛋了&#xff0c;好像动心了&#xff0c;近一周吃啥东西都索然无味&#xff0c;这可如何是好&#xff01;&#xff01;&#xff01;不知道在期待什么&#xff0c;恐惧与窃喜—— 在Ubuntu系统中&#xff0c;查看某个端口是否被放行&#xff08;即允许流量通过&#xff09;&am…

AI论文速读 |从图结构角度统一车道级交通预测:基准和基线

题目&#xff1a;Unifying Lane-Level Traffic Prediction from a Graph Structural Perspective: Benchmark and Baseline 作者&#xff1a;Shuhao Li, Yue Cui, Jingyi Xu, Libin Li, Lingkai Meng, Weidong Yang(杨卫东), Fan Zhang, Xiaofang Zhou(周晓方) 机构&#xff…

算法提高 第一期 KMP扩展算法

1## 具体思路&#xff1a; 和KMP算法的是想类似&#xff0c;充分利用已经比较字符性质来减少冗余的字符比较次数。KMP的思想是充分的利用模式串中所有前缀字串&#xff08;以模式串为开头的字串&#xff09;的真前缀和真后缀&#xff08;指子串的开始字符与子串的最后字符相等的…

vCenter 物理配置与虚拟机配置对应关系

目录 背景现状概念存储池物理与虚拟资源分配及使用情况汇总 分配cpu内存硬盘VSAN、VM Encryption和VVOL No Requirements厚置备和精简置备 总结cpu内存硬盘建议 背景 现在有三台服务器&#xff0c;需要统计上面所有服务占用的资源情况与总和&#xff0c;目的是看还有多少资源可…