【自用】王道文件管理强化笔记

文章目录

      • 操作系统引导:
      • 磁盘初始化
        • 文件打开过程角度1
        • 文件的打开过程角度2
      • 内存映射的文件访问

操作系统引导:

①CPU从一个特定主存地址开始,取指令,执行ROM中的引导程序(先进行硬件自检,再开机)
②)将磁盘的第一块–主引导记录读入内存,执行磁盘引导程序,扫描分区表
③从活动分区(又称主分区,即安装了操作系统的分区)读入分区引导记录,执行其中的程序
④从根目录下找到完整的操作系统初始化程序(即启动管理器)并执行,完成“开机”的一系列动作

在这里插入图片描述

磁盘初始化

在这里插入图片描述
磁盘初始化:
step1:进行低级格式化(物理格式化),将盘的各个磁道划分为扇区。一个扇区通常可分为头、数据区域(如512B大小)、尾三个部分组成。管理扇区所需要的各种数据结构一般存放在头、尾两个部分,包括扇区校验码(如奇偶校验、CRC循环冗余校验码等,校验码用于校验扇区中的数据是否发生错误)
Step2:将磁盘分区,每个分区由若干柱面组成(即分为我们熟悉的C盘、D盘、E盘)
Step3:进行逻辑格式化,创建文件系统。包括创建文件系统的根目录、初始化存储空间管理所用的数据结构(如位示图、空闲分区表)

在这里插入图片描述
ROM:
ROM中只存放很小的“自举装入程序”
开机时计算机先运行“自举装入程序”,通过执行该程序就可找到引导块。并将完整的“自举程序”读入内存,完成初始化。

FCB和inode指针之间的关系
在这里插入图片描述
inode->对应的是struct结构体=>inode a[V],连续存储

引导块:引导操作系统初始化的一系列操作
超级块:包含一些重要的文件系统管理信息,如:魔数(是用来告诉操作系统这个文件的类型的,魔数magic number是计算机(或者说是BIOS)用来判断此设备是否包含引导程序的),磁盘转速,磁道数,扇区数。
位示图
注1:位示图中,每个bit对应一个磁盘块,因此,若磁盘块共有n个则位示图也至少要有 nbit。
注2:这里只用了一个磁盘块存储位示图一个磁盘块大小为4KB,即 32K bit,因此这个位示图能支持的磁盘大小上限为 32K 个块。如果需要支持更多磁盘块,则需要扩充位示图的大小
inode区
注:“inode结点"就是“索引节点”。在Unix文件系统中,所有的索引结点集中存放。用于表示“文件物理结构"的“混合索引表"被包含在inode结点中,通过“混合索引表”,即可找到一个文件中每个块存储的物理位置

注1:在Unix文件系统中,每个文件必须对应一个inode结点,而inode结点的总数量是有上限的。如:该示意图中,仅用两个磁盘块,即8KB作为inode区,假设每个inode大小为64B,则该文件系统最多只能存储8KB/64B=128个inode结点,相应地,该系统最多只能支持128个文件。
注2:当一个进程通过open系统调用打开某个文件时,操作系统需要将该文件对应的inode结点读入主存。

根目录:存储在磁盘的固定位置
注1: 根目录的信息存储在磁盘的固定位置,这样可以保证开机时,能够找到根目录,再从根目录出发找到其他信息
注2: 开机时,根目录的内容通常会被加载到内存,并一直常驻内存
注3: 由于Unix文件系统采用了“索引节点”,因此每个目录项只需包会“文件名、inode号”、文件的具体属性包含在 inode 中
挂4: 每个目录文件中默认包含两个目录项,分别是“…“和"…“。”.“表示当前目录,”…“表示上一级目录。根目录比较特殊,没有所谓的“上一级目录”,因此它的目录项”."指向自身。

问题1:为什么根目录要存放在磁盘的固定位置?
回答1:因为开机的时候,需要从根目录出发,找到操作系统初始化相关的各种文件。因此,将根目录存放在固定位置,那么开机时候取这个固定位置读入根目录的数据即可

索引表和inode 的关系:索引表是inode的一部分,红色框出来的部分是inode
在这里插入图片描述

在这里插入图片描述

思考1:如何确定目录文件A需要占多少个块?
回答1:(目录项的数量*每个目录项的大小)/块大小

文件打开过程角度1

思考2:如果从根目录开始查找,要将文件“/A/Dm”读入内存,描述背后发生了什么?
回答2:根目录文件常驻内存,首先查内存中的根目录,找到目录项A–根据目录项A可知,文件A对应 1号inode结点,因此要将1号inode结点从磁盘读入内存–根据刚读入的1号inode结点,可知文件A的索引信息,也就是知道了文件A的每一个块存储在什么位置,接下来可读入目录文件A的第一块(6号物理块)–尝试查找目录项Dm,如果没找到,那么还需要读入目录文件A的第二块(7号物理块)–找到目录项Dm之后,根据目录项记录的inode号,将Dm的inode结点从磁盘读入内存(前面属于open系统调用的内容)|–根据Dm的inode结点,读入Dm的第一块(m号物理块)、第二块(k号物理块)

每个进程一个用户打开文件表(PCB中,通过PCB,操作系统可以访问和管理进程的打开文件表。),用于记录该进程已经打开的文件。表中每一项都对应一个已打开的文件,并通过一个文件描述符(fd)来标识。文件描述符是一个整数,用于在用户进程的打开文件表中唯一标识一个已打开的文件。当进程通过系统调用(如open)打开文件时,系统会为该文件分配一个文件描述符,并返回给进程。

系统打开文件表独一份,用于记录所有已打开的文件。表中每一项都包含了文件的各种信息,如文件的inode节点指针(指向内存中已读入的inode信息)、打开该文件的进程数等。

文件的打开过程角度2

当一个进程通过open系统调用打开文件时,系统会首先查找文件的inode节点(如果尚未在内存中,则先从磁盘读取,以块为单位进行检索),并将其信息存储在系统级的打开文件表中。
然后,在用户进程的打开文件表中创建一个新的表项,指向系统级打开文件表中的相应项,并分配一个文件描述符。
最后,将文件描述符返回给进程,以便后续的文件读写操作。

TIPS:
如果多个进程同时打开同一个文件,每个进程都会在自己的打开文件表中创建一个表象,但这些表象都指向系统级打开文件表中的同一个项。
系统级打开文件表中的“打开该文件的进程数”字段会相应增加,以记录有多少个进程正在使用该文件。

在这里插入图片描述

内存映射的文件访问

解决读写文件效率低下的中心思想是:把磁盘访问变成内存访问。实现这种访问转变的手段就是内存映射的文件访问

内存映射的文件访问原理:把需要访问的文件映射到一个进程的虚拟地址内,这样访问该虚拟地址就相当于访问文件。

内存映射的文件访问目的:是为了文件的共享,即可以将同一个文件映射到两个或多个进程的虚拟地址空间。

文件的访问类型:顺序访问和随机访问

  • 文件的实现要解决如下问题:
    • 给文件分配磁盘空间

    • 记录这些磁盘空间的位置

    • 将文件内容存放在这些空间

      非连续存放方式通过链表方式实现,在每个数据块里面留出一个指针的空间,用来存放下一个数据块所在的地址。
      把所有指针从单个数据块抽取出来,全部放在一起,形成一张表。称为文件分配表(File Allocation Table)


FAT数据结构是静态链表
问题1:FAT表中,每个表项的大小对文件系统有什么影响?
回答1:①对文件系统支持的最大磁盘块数有影响,如:每个FAT表项16bit,则最多只能表示2^16个块号;②)对FAT表的总大小有影响,每个表项的大小*表项的数量=FAT表的大小

问题2:简述操作系统是如何使用FAT表的?
回答2:开机时,就会把整个FAT表读入内存,系统运行过程中,该表会一直常驻内存,也就是说,查FAT表不需要读磁盘,内存里本来就有这个表。系统运行过程中,如果要访问某个文件,则首先要找到这个文件对应的目录项,从目录项中找到文件的起始块号,再根据起始块号查FAT表,从而确认文件的后序那些块存放在哪里。

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

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

相关文章

谷粒商城のRabbitMQ基础篇

文章目录 前言一、Rabbit MQ简介1、基本概念2、组件架构 二、使用步骤1.引入依赖2.application.properties3、docker 安装Rabbit MQ3、使用案例3.1、定义队列3.2、定义交换机3.3、绑定3.4、发送消息3.5、接受消息3.5、自定义消息序列化方式3.6、演示Fanout 交换机模式3.7、演示…

Vue基础(二)

计算属性与监视姓名案例 插值语法实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>姓名案例&l…

用人工智能写作:专业作家利用 ChatGPT 的五种方式 ✍️

用人工智能写作&#xff1a;专业作家利用 ChatGPT 的五种方式 &#x1f3a8;✍️ 在写作领域&#xff0c;人工智能工具如 ChatGPT 正逐渐成为作家们的得力助手。它不仅帮助优化文本&#xff0c;还能激发灵感、完善叙事结构&#xff0c;甚至推动创新。本文将通过五个具体案例&a…

【微服务】服务注册与发现 - Eureka(day3)

CAP理论 P是分区容错性。简单来说&#xff0c;分区容错性表示分布式服务中一个节点挂掉了&#xff0c;并不影响其他节点对外提供服务。也就是一台服务器出错了&#xff0c;仍然可以对外进行响应&#xff0c;不会因为某一台服务器出错而导致所有的请求都无法响应。综上所述&…

实验4 循环结构

1、判断素数 【问题描述】从键盘输入一个大于1的正整数&#xff0c;判断是否为素数 【输入形式】输入一个正整数 【输出形式】输出该数是否为素数 【样例输入】10 【样例输出】10 is not a prime number 【样例说明】样例2 输入&#xff1a;-10 输出&#xff1a;error! #de…

jmeter学习(7)beanshell

beanshell preprocessor 发送请求前执行 beanshell postprocessor 发送请求前执行 获取请求相关信息 String body sampler.getArguments().getArgument(0).getValue(); String url sampler.getPath(); 获取响应报文 String responseprev.getResponseDataAsString(); 获…

北京自闭症寄宿学校大盘点:优质教育资源汇总

北京自闭症寄宿学校大盘点&#xff1a;优质教育资源中的璀璨明珠——兼谈广州星贝育园 在北京&#xff0c;随着社会对自闭症儿童教育的日益重视&#xff0c;越来越多的优质寄宿学校应运而生&#xff0c;为这些特殊的孩子提供了专业的康复与教育环境。然而&#xff0c;当我们把…

【数据结构】【链表代码】随机链表的复制

/*** Definition for a Node.* struct Node {* int val;* struct Node *next;* struct Node *random;* };*/typedef struct Node Node; struct Node* copyRandomList(struct Node* head) {if(headNULL)return NULL;//1.拷贝结点&#xff0c;连接到原结点的后面Node…

猫头虎深度解读:过去2周,AI领域的十大突破事件与未来展望

猫头虎深度解读&#xff1a;过去2周&#xff0c;AI领域的十大突破事件与未来展望 &#x1f680;&#x1f916; 大家好&#xff0c;我是猫头虎技术团队的代表&#xff01;这两周&#xff0c;人工智能领域再次掀起了技术与应用的新浪潮。从立法到技术进展&#xff0c;再到前沿应…

初始爬虫12(反爬与反反爬)

学到这里&#xff0c;已经可以开始实战项目了&#xff0c;多去爬虫&#xff0c;了解熟悉反爬&#xff0c;然后自己总结出一套方法怎么做。 1.服务器反爬的原因 服务器反爬的原因 总结&#xff1a; 1.爬虫占总PV较高&#xff0c;浪费资源 2.资源被批量抓走&#xff0c;丧失竞争力…

交叉熵的数学推导和手撕代码

交叉熵的数学推导和手撕代码 数学推导手撕代码 数学推导 手撕代码 import torch import torch.nn.functional as F# 二元交叉熵损失函数 def binary_cross_entropy(predictions, targets):# predictions应为sigmoid函数的输出&#xff0c;即概率值# targets应为0或1的二进制标…

MathType软件7.7最新版本下载安装教程+使用深度评测

嘿&#xff0c;各位亲爱的朋友们&#xff01;&#x1f44b; 今天我要来给大家安利一个神器——MathType软件&#xff01;&#x1f389; 如果你是一位学生、老师或者需要经常和数学公式打交道的科研工作者&#xff0c;那这个软件绝对是你的不二选择&#xff01;&#x1f60e; M…

ctf.bugku-备份是个好习惯

访问页面得到字符串 这串字符串是重复的&#xff1b; d41d8cd98f00b204e9800998ecf8427e 从前端、源码上看&#xff0c;除了这段字符串&#xff0c;没有其他信息&#xff1b;尝试解密&#xff0c;长度32位&#xff1b;各种解密方式试试&#xff1b; MD5免费在线解密破解_MD5在…

市面上8款AI论文大纲一键生成文献的软件推荐

在当前的学术研究和写作领域&#xff0c;AI论文大纲自动生成软件已经成为提高写作效率和质量的重要工具。这些工具不仅能够帮助研究人员快速生成论文草稿&#xff0c;还能进行内容优化、查重和排版等操作。本文将分享市面上8款AI论文大纲一键生成文献的软件&#xff0c;并特别推…

[git] github管理项目之环境依赖管理

导出依赖到 requirements.txt pip install pipreqs pipreqs . --encodingutf8 --force但是直接使用pip安装不了torch&#xff0c;需要添加源&#xff01;&#xff01; pip install -r requirements.txt -f https://download.pytorch.org/whl/torch_stable.htmlpython 项目中 …

Stable Diffusion绘画 | AI 图片智能扩充,超越PS扩图的AI扩图功能(附安装包)

来到「文生图」页面&#xff0c;输入固定的起手式提示词。 第1步&#xff0c;开启 ControlNet&#xff0c;将需要扩充的图片加载进来&#xff1a; 控制类型选择「Inpaint」&#xff0c;预处理器选择「inpaint_onlylama」&#xff0c;缩放模式选择「缩放后填充空白」&#xff1…

【数据结构】【链表代码】移除链表元素

移除链表元素 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/struct ListNode* removeElements(struct ListNode* head, int val) { // 创建一个虚拟头节点&#xff0c;以处理头节点可能被删除的情况 struct…

代码随想录Day54

今天是国庆假期后的恢复做题的第一天&#xff0c;摆了那么久感觉还是有点没摆够哈哈哈哈&#xff01;今天两道题都是困难题&#xff0c;两道题都去看讲解了&#xff0c;感觉这两道题是高度相似的&#xff0c;接雨水用单调递增栈来做&#xff0c;柱状图中最大的矩形用单调递减栈…

tcp/ip、以太网、mqtt、modbus/tcp复习

1.osi参考模型 2. modbus是应用层报文传输协议&#xff0c;没有规定物理层&#xff0c;只规定了协议帧&#xff0c;但是定义了控制器能够认识和使用的消息结构&#xff0c;不管它们是经过何种网络进行通信的&#xff0c;具有很强的适应性。 一主多从&#xff0c;同一时间主机…

【动态规划-最长公共子序列(LCS)】力扣1035. 不相交的线

在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在&#xff0c;可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线&#xff0c;这些直线需要同时满足&#xff1a; nums1[i] nums2[j] 且绘制的直线不与任何其他连线&#xff08;非水平线&#xff09…