操作系统-物理结构

news2025/5/15 12:44:55

操作系统使用read系统调用,将逻辑地址转(对于用户来说逻辑地址容易计算,因为各个逻辑块都相邻)成了逻辑块号和块内偏移量,并根据分配存储方式,将逻辑块号转成物理块号和块内偏移量

对于用户来说的文件的一个个字符,对于操作系统来说就是一堆二进制文件,并根据1个磁盘块存储1KB的数据,将文件数据分别存储到为0、1、2、3、等若干逻辑块,这些逻辑块号相邻,具体的物理块号是否相邻,要看采取的分配存储方式,是连续存储(逻辑上相邻的物理上也相邻)、链接分配还是索引分配方式

顺序文件

1.无结构文件

2.有结构文件:顺序文件、索引文件、索引顺序文件【有结构文件就是一条条记录】

顺序文件

过程如下:

用户视角每个学生记录(每个struct结构体)占64B原因:number--int类型4B,name--char类型30个字符长度30B(那应该1个字符1B),major--char类型30个字符长度30B,总共30+30+4=64B,也可用sizeOf(Student_info)函数来直接计算该struct结构体的大小

先将N个学生记录写入文件对象:

采用w写的形式使用fopen函数打开students.info文件,并返回fp文件对象,即fp指针指向students.info文件,然后分配student[N]数组空间用来存放N个学生记录,最后调用fwrite函数写入student,fwrite函数中的参数student表示要写入数据的起始地址即数组的起始地址,sizeof(Student_info)即一个学生记录的所占的空间大小,参数N表示要写入几条记录,fp表示要将数据写入的文件对象,调用fwrite函数中这N个struct结构体数据就被保存到磁盘里边

读出第5个学生的信息:

使用fopen函数并且采用r读的形式打开students.info文件,返回文件对象让fp指针指向该文件对象,再使用fseek函数会让文件读写指针从开头位置算起(即学生0位置)偏移5*sizeof(Student_info)位置,即第5个指针(学生5)存放的起始位置,再使用fread函数可以读出参数为1即1条记录的sizeOf(Student_info)大小,然后把读出的记录赋给sut变量,这样就从fp文件里读出了5号学生对应的记录

对于用户来说,每条学生记录是连续存放的,并且每条记录所占的空间大小是相同的,这样就很容易算出要读出记录的逻辑地址(是因为知道第一个记录的地址,所以因为连续存放和大小相同能够很快地计算出要读出记录的逻辑地址?)

对于操作系统来说,是把整个文件的大小按照1块磁盘块的存储文件的大小,分成了多个磁盘块,即一个个相邻的逻辑块,然后在读到内存的过程中,又使用了逻辑块和物理块号的映射(具体如何映射跟开篇说得一样看采用了什么分配存储方式)

链接分配

 过程:因为是链接分配,即各个记录并不是连续存放(是离散存放),所以添加了next指向下一条记录的指针来确定下一条记录的位置,这个要找到第i条记录的位置(第i条记录逻辑地址)需要把第i-1条记录位置都找到,即不支持直接随机访问(直接访问),但是顺序存储支持

但是在用户的角度来看,即使实际是离散存放,这些记录还是占用了一整片的连续空间

对于操作系统来说,即使是链式存储的顺序文件,也会被拆分成一个个磁盘块,这些物理块在磁盘的存储方式可能操作系统采用的是连续分配或者链接分配

文件的逻辑结构的链式存储是由用户实现,即文件的内部这些记录的先后顺序。需要用户来关心

文件的物理结构即操作系统把文件分成了一个个逻辑块,这些逻辑块在磁盘存储的时候,操作系统会用链接的方式来记录这些逻辑块的先后顺序,物理块的存储如链接分配是由操作系统实现,用户不需要关心

 

索引分配

过程:定义一个索引项的结构体IndexTable,并把它使用fopen函数的w写形式写到文件里,字段是学号和学生记录逻辑地址,一个index table对应一个索引项,然后再建立一个学生记录的struct,把各个学生记录建立一个Student_info数组,各个索引项会建立起学号和各个学生信息的映射关系(每个索引项都有Student_info的逻辑地址 addr),比如一个文件的前1MB存放索引项,剩下空间用来存放一条条学生信息,当要根据学号找到某个学生金鸡路时,可先把1M索引项读入内存,找到目标学生索引项,再根据目标学生的IndexTable里的addr信息找到学生记录逻辑地址,再去读取这个逻辑地址对应的学生信息

在用户来看文件依然是连续存储的,但是实际操作系统会把大文件分成一个个磁盘块(逻辑块),这些逻辑块存放在磁盘里,然后可以用连续分配、链接分配、索引分配等方式来记录这些磁盘块的先后顺序,即索引分配,操作系统会维护一个索引表来记录各个逻辑块号到物理块号的映射关系

文件的逻辑结构的索引文件: 用来记录文件记录的关键字到记录存放的逻辑地址的映射关系,由用户自己建立

索引分配索引表:

总结

总结:对于用户来说文件占用连续的逻辑地址空间,要访问某块的数据就提供某块的逻辑地址,操作系统要考虑这么大个文件是怎么存储的,在用户提供了逻辑地址之后,操作系统负责将逻辑地址转成逻辑块号,并将逻辑块号转成物理块号 

有些记录可能有问题,,,,,,

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

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

相关文章

《AI大模型应知应会100篇》第64篇:构建你的第一个大模型 Chatbot

第64篇:构建你的第一个大模型 Chatbot 手把手教你从零开始搭建一个基于大模型的聊天机器人 摘要 你是否想过,自己也能构建一个像 ChatGPT 一样能对话、能思考的聊天机器人(Chatbot)?别担心,这并不需要你是…

STM32 片上资源之串口

STM32 片上资源之串口 1 串口介绍1.1 初步介绍1.2 主要特性1.2.1 USART特性1.2.2 UART特性 1.3 主要寄存器1.4 波特率计算1.5 常用工作模式1.5.1 轮询模式:1.5.2 中断模式:1.5.3 DMA模式: 1.6 常见应用1.7 注意事项 2 软件层面协议2.1 基本概…

职坐标IT培训:互联网行业核心技能精讲

在互联网行业高速迭代的今天,掌握全链路核心技能已成为职业发展的关键突破口。职坐标IT培训聚焦行业需求,系统拆解从需求分析到系统部署的完整能力模型,助力从业者构建多维竞争力。无论是产品岗的用户调研与原型设计,还是技术岗的…

FlashInfer - 介绍 LLM服务加速库 地基的一块石头

FlashInfer - 介绍 LLM服务加速库 地基的一块石头 flyfish 大型语言模型服务中的注意力机制 大型语言模型服务(LLM Serving)迅速成为重要的工作负载。Transformer中的算子效率——尤其是矩阵乘法(GEMM)、自注意力(S…

MySQL 学习(七)undo log、redo log、bin log 的作用以及持久化机制

目录 一、前言二、三大日志的概念、作用、存储位置2.1 bin log 二进制执行日志2.2 undo log 事务回滚日志2.3 redo log 快速恢复日志 三、补充说明3.1 补充:为什么使用 buffer pool 而不直接修改磁盘中的数据?3.2 补充:同为操作数据变更的日志…

时间序列预测建模的完整流程以及数据分析【学习记录】

文章目录 1.时间序列建模的完整流程2. 模型选取的和数据集2.1.ARIMA模型2.2.数据集介绍 3.时间序列建模3.1.数据获取3.2.处理数据中的异常值3.2.1.Nan值3.2.2.异常值的检测和处理(Z-Score方法) 3.3.离散度3.4.Z-Score3.4.1.概述3.4.2.公式3.4.3.Z-Score与…

FFmpeg3.4 libavcodec协议框架增加新的decode协议

查看ffmepg下面的configure文件发现,config.h文件;解码协议的配置是通过libavcodec/allcodecs.c文件,通过查找DEC关键字生成的。 1、在libavcodec/allcodecs.c 新增REGISTER_ENCODER(MYCODE, mycode); REGISTER_ENCODER(VP8_VAAPI, vp8_vaapi); …

无人机数据处理与特征提取技术分析!

一、运行逻辑 1. 数据采集与预处理 多传感器融合:集成摄像头、LiDAR、IMU、GPS等传感器,通过硬件时间戳或PPS信号实现数据同步,确保时空一致性。 边缘预处理:在无人机端进行数据压缩(如JPEG、H.265)…

前端面试宝典---js垃圾回收机制

什么是垃圾回收 垃圾回收是指一种自动内存管理机制,当声明一个变量时,会在内存中开辟一块内存空间用于存放这个变量。当这个变量被使用过后,可能再也不需要它了,此时垃圾回收器会自动检测并回收这些不再使用的内存空间。垃圾回收…

IDEA 新建 SpringBoot 项目时,没有高版本 SpringBoot 可选

环境描述 IDEA 2025.1.1JDK17Maven 3.9.9 问题描述 IDEA 新建 SpringBoot 项目时,没有高版本 SpringBoot 可选,可以看到此时的最高版本为 3.0.2: 问题分析 返回上一步,可以发现 Spring Initializr 的服务地址为阿里云&#…

2025年PMP 学习十三 第9章 项目资源管理(9.1,9.2)

2025年PMP 学习十三 第9章 项目资源管理(9.1,9.2) 序号过程过程组9.1规划资源管理规划9.2估算活动资源规划9.3获取资源执行9.4建设团队执行9.5管理团队执行9.6控制资源监控 文章目录 2025年PMP 学习十三 第9章 项目资源管理(9.1,9.2&#xf…

动态规划问题 -- 多状态模型(删除并获得点数)

目录 动态规划分析问题五步曲题目概述预处理阶段 代码编写 动态规划分析问题五步曲 不清楚动态规划分析问题是哪关键的五步的少年们可以移步到 链接: 动态规划算法基础 这篇文章非常详细的介绍了动态规划算法是如何分析和解决问题的 题目概述 链接: 删除并获得点数 预处理阶段…

Jenkins里构建一个简单流水线

前情提要:传送门,我在虚拟机里装了一个Ubuntu,然后在docker里装了一个Jenkins及GitLab! 点击这里下载或fork一个简单的Java项目用于学习Jenkins! 目标:修改代码后,上传到git,在在Jenkins流水线里…

Java Queue 接口实现

Date: 2025.05.14 20:46:38 author: lijianzhan Java中的Queue接口是位于java.util包中,它是一个用于表示队列的接口。队列是一种先进先出(First-In-First-Out, 简称为FIFO)的数据结构,其中元素被添加到队列的尾部,并从…

OpenEvidence AI临床决策支持工具平台研究报告

平台概述 OpenEvidence是一个专为医疗专业人士设计的临床决策支持工具,旨在通过整合各类临床计算器和先进的人工智能技术,提高医生的诊疗决策效率和准确性。作为一款综合性医疗平台,OpenEvidence将复杂的医学计算流程简化,同时提供个性化的临床建议,使医生能够更快、更准…

如何远程执行脚本不留痕迹

通常我们在做远程维护的时候,会有这么一个需求,就是我想在远程主机执行一个脚本,但是这个脚本我又不想保留在远程主机上,那么有人就说了,那就复制过去再登录远程执行不就行了吗?嗯嗯,但是这还不…

Ota++框架学习

一:框架结构 这是一幅展现 Web 应用程序架构的示意图,以下是对图中各部分的详细解释: 外部交互部分 Request(请求):位于架构图的左上角,用黄色虚线框表示 。代表来自客户端(如浏览器…

Chrome安装最新vue-devtool插件

本vue-devtool版本是官方的 v7.6.8版本,兼容性好、功能齐全且稳定。 操作步骤: 方法一: 打开谷歌浏览器 --> 右上角三个点 --> 扩展程序 --> 管理扩展程序 --> 加载已解压的扩展程序, 然后选择解压后的文件夹即可。…

bfs-最小步数问题

最小步长模型 特征: 主要是解决权值为1且状态为字符串类型的最短路问题,实质上是有向图的最短路问题,可以简化为bfs求最短路问题。 代表题目: acwing 845 八数码问题: 八数码题中由于每次交换的状态是由x进行上下左右…

java----------->代理模式

目录 什么是代理模式? 为什么会有代理模式? 怎么写代理模式? 实现代理模式总共需要三步: 什么是代理模式? 代理模式:给目标对象提供一个代理对象,并且由代理对象控制目标对象的引用 代理就是…