操作系统课程设计 模拟FAT文件系统的设计与实现

news2025/3/15 20:28:46

一、 目的与要求

1.研究FAT文件系统的物理布局。
2.掌握FAT文件系统中目录的结构与目录项定义。
3.掌握文件操作如建立目录,建立文件,删除文件,复制文件时,对FAT和目录的操作步骤。
4.合理设计文件系统布局与数据结构(直接用数组模拟磁盘布局或建立一个文件模拟磁盘布局)。
4.编制程序模拟FAT文件系统,加深理解文件系统的功能及实现机理。

二、 主要内容

1.文件系统布局
简易FAT文件系统,可以划分为如表1所示布局。
在这里插入图片描述

其中:
a.特征块:存放文件系统特征信息。如设计者姓名,版本号,根目录位置,盘块大小,盘块总数,剩余空闲盘块总数,当前目录等。(根据需要自己设定)
b.FAT表:在FAT文件系统中,FAT表有两个重要作用。1、描述数据块的分配状态。2、标明文件或目录的下一块号 。

c.数据块:
数据块存放两种文件:1、目录文件。2、字符文件(文本文件)。可以将数据块描述为byte类型的数组。每块的大小必须是2的n次幂。(自己设定块的大小,必须是目录项长度的整倍数)。

在这里插入图片描述

2.实现功能

a.命令提示符
当前路径+>为命令提示符,光标在>后闪烁提示输入命令。
进入系统时,创建文件系统和根目录,并以根目录为当前路径,如
/>
当前路径改变后,命令提示符随之改变如
/user/li>

b.列文件目录
命令形式:dir , dir<路径名>
dir 列当前目录的与文件或指定路径的目录与文件。如
/>dir 列根目录下目录和文件
/user/zhang>dir 列/user/zhang下的目录和文件
/>dir /user 当前目录是根,列/user目录下的目录和文件

以/>dir /user为例
(1)打开根目录所在盘块,逐项查找目录项,找到user目录项,根据目录项中的数据块指针和FAT表找到user目录的一系列盘块。
(2)读入盘块,查找user目录下所有目录项,并列出。如果路径含有多层目录,则需要顺序查找每一层,如在任何一层没有发现对应名,则提示“没有这个目录”。注意相对目录的使用。

c.创建目录
命令形式 md <目录名>,md<路径/目录名>
创建当前目录下的子目录或者创建已知路径下的子目录,如
/user/zhang>md data 在/user/zhang下创建子目录data
/user/zhang>md …/li/data 在/user/li下创建子目录data
/user/zhang>md data为例,
(1)在FAT中查找可用的新块,将FAT表项此项从0改为文件尾标志。
(2)在新块中记录.和…目录项。
(3)在父目录块中添加新的目录项,名字为目录名,起始块为新块号。

d.删除目录
命令形式 rd <目录名>,rd<路径/目录名>
删除当前目录下的子目录或者删除已知路径下的子目录,如
/user/zhang>rd data 删除/user/zhang下的子目录data
/user/zhang>rd user/li/data 删除/user/li下的子目录data
我们只要求删除空目录即可,非空目录不允许删除。如目录非空,则提示目录非空,无法删除。
/user/zhang>rd data为例,
(1)在FAT中查找可data目录占用的块,标记为0。
(2)在zhang目录中删除data目录项。

e.改变当前目录
命令形式 cd <目录名>,cd<路径/目录名>
修改当前目录,如
/user>cd zhang 改变当前目录为/user/zhang
/user/zhang>cd … 改变当前目录为/user
/user/zhang>cd /user/li 改变当前目录为/user/li
(1)将当前目录写入特征块
(2)改变命令提示符

f.创建文件
命令形式 new <文件名>,new<路径/文件名>
创建一个新文件,如
/user/zhang>new hello.txt,创建当前目录下的新文件
/user/zhang>new data/hello.txt,创建当前目录下一级目录data下的新文件
/user/zhang>new /user/li/hello.txt ,创建绝对路径下的新文件
两种实现方式,第一种,创建一个空文件,占一个数据块。第二种,创建文件后立即输入文件内容,根据文件的尺寸申请相应的数据块。
例如,第一种方式/user/zhang>new hello.txt。
(1)在FAT中查找可用新块,表项标记为文件尾。
(2)在当前目录块中添加新的目录项,名字为文件名,起始块为新块号。

g.删除文件
命令形式 del <文件名>,del<路径名/文件名>
/user/zhang>del hello.txt 删除当前目录中的文件
/user/zhang>del …/li/hello.txt 删除相对路径下的文件
(1)根据文件目录项的文件首块和FAT表找到hello.txt的所有数据块,FAT表项改为0。
(2)在目录中删除目录项。

h.编辑文件
命令形式 edit<文件名>,edit<路径名/文件名>
重新编辑文件,如有内容先清空。
/user/zhang>edit hello.txt 编辑当前目录中的文件
/user/zhang>edit /user/li/hello.txt 编辑绝对路径下的文件
(1)如果文件有内容,则在FAT中将此文件所有盘块号表项标记为0。
(2)输入文件内容,计算盘块数。
(3)根据FAT表重新申请盘块,修改FAT。
(4)修改文件目录项的初始块(因为可能已经变化)。
(5)文件内容写入到数据块。

i.查看文件
命令形式 type<文件名>,type<路径名/文件名>
/user/zhang>type hello.txt 查看当前目录中的文件
/user/zhang>type /user/li/hello.txt 查看绝对路径下的文件
(1)根据FAT链,打开文件的数据块
(2)把字符组装成字符串后输出

j.复制文件
命令形式 copy <文件名> <文件名>
copy <路径名/文件名> <文件名>
copy <文件名> <路径名/文件名>
copy <路径名/文件名> <路径名/文件名>
/user/zhang>copy hello.txt hi.txt 复制当前目录下文件为新文件
/user/zhang>copy /user/li/a.txt b.txt 复制某路径下的文件到当前目录并改名
/user/zhang>copy a.txt /user/li/a.txt 复制当前目录文件到某路径
/user/zhang>copy data/a.txt …/user/li/b.txt 复制一个路径下文件到另一路径
我们都给出了文件名,DOS命令中可以不给出文件名,默认复制过去的文件名是相同的。
/user/zhang>copy data/a.txt …/user/li/b.txt为例
(1)在目标文件目录创建一个新文件 new …/user/li/b.txt
(2)读取源文件内容
(3)用源文件内容编辑目标文件 edit …/user/li/b.txt

k.设置文件属性
命令形式 attr <文件名>+r –r +h -h ,attr <路径名/文件名>+r –r +h -h
/user/zhang>attr hello.txt +r -h 修改当前目录中的文件属性
/user/zhang>attr /user/li/hello.txt -r 修改绝对路径下的文件属性
修改文件的目录项内容即可。
文件属性将影响一些命令的效果,如隐藏属性的dir命令,只读属性文件不允许编辑和删除等。

l.退出系统
命令形式 exit

代码下载链接

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

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

相关文章

Day_49归并排序

目录 一. 归并排序的思想 1.归并排序的过程 2. 两种实现方式&#xff1a; 2.1 非递归实现方式 2.2递归实现方式 二. 归并排序的代码实现 1. 数组的辅助空间及初始化 2. 核心代码 2.1每个小组的基本设置 2.2小组内部的排序 三. 代码展示 四. 运行结果 五. 总结 一. 归并排序…

Android逆向环境搭建

逆向工具 手机root Android逆向必要条件是你需要有个Root的手机&#xff0c;最好是真机。没有root的手机&#xff0c;逆向工作很难继续下去&#xff0c;手机的话&#xff0c;能解锁OEM的都可以。手机Root的话一般有以下几步&#xff1a; 解锁OEM解锁BootLoader安装Magisk制作…

Win11的两个实用技巧系列之夜间模式怎么定时、如何卸载重装应用商店?

Win11如何卸载重装应用商店? Win11删除重装Microsoft Store的命令 Win11如何卸载重装应用商店&#xff1f;Win11中的应用商店想要卸了重装&#xff0c;该怎么操作呢&#xff1f;下面我们就来看看Win11删除重装Microsoft Store的命令 Microsoft Store也就是微软的应用商店&…

Redis的主从复制和哨兵机制详解

目录 一、CAP 原理二、Redis主从同步1、主从同步是什么能干嘛&#xff1f;2、Redis是如何实现数据同步的&#xff1f;2.1.增量同步2.2.快照同步2.3.无盘复制2.4.通过Wait 指令保证强一致性 3、搭建Redis 1主2从3.1.安装Redis3.2.创建1主2从配置文件3.3.启动Redis3.4.验证主从同…

算法分析和大O简介

在本文中&#xff0c;我们将讨论如何分析算法以及为什么这样做很重要&#xff01; 为什么要分析算法&#xff1f; 在我们开始之前&#xff0c;让我们澄清一下什么是算法。在本文中&#xff0c;算法只是解决问题的过程或公式。有些问题非常有名&#xff0c;以至于算法都有名字…

JMeter参数化4种实现方式

目录 前言&#xff1a; 1 参数化释义 2 参数化实现 CSV实例 注意事项 前言&#xff1a; 在使用JMeter进行测试时&#xff0c;参数化允许您模拟不同的用户、不同的数据、不同的操作等&#xff0c;从而增加了测试的灵活性和复用性 1 参数化释义 什么是参数化&#xff1f;…

软件系统开发包括哪些步骤?

在传统的理解中&#xff0c;企业内数字化应用的开发和迭代应该是 IT 部门的工作&#xff0c;但事实并非如此。一方面&#xff0c;激烈的市场竞争和反复出现的疫情给数字化提出了新的要求&#xff1b;另一方面&#xff0c;五花八门的零代码、低代码工具正如雨后春笋一般出现&…

NB-lot和LoRa真正的差别在哪里?

就像要把大象装冰箱一样&#xff0c;物联网&#xff0c;万物互联也是要分步骤的。 一、感知层(信息获取层)&#xff0c;即利用各种传感器等设备随时随地获取物体的信息; 二、网络层(信息传输层)&#xff0c;通过各种电信网络与互联网的融合&#xff0c;将物体的信息实时准确地…

[AI语音克隆] 5秒内克隆您的声音并生成任意语音内容

前言 随着人工智能技术的不断发展&#xff0c;语音克隆技术也得到了越来越多的关注和研究。目前&#xff0c;AI语音克隆技术已经可以实现让机器模拟出一个人的声音&#xff0c;甚至可以让机器模拟出一个人的语言习惯和表情。 然而&#xff0c;AI语音克隆技术仍然面临着许多难…

BB84协议:量子秘钥分发

文章目录 为什么需要量子密钥分发通讯工具基本通讯 BB84协议为什么这样做能防止通讯被窃听?在传统信道上的窃听在量子信道上的窃听 内容来源&#xff1a; 为什么需要量子密钥分发 BB84协议是一种“密钥分发协议”&#xff0c;所以从功能上来讲&#xff0c;它要实现的目标与之…

618大促 | 解析平台、商家和消费者必须面对的三大风险

目录 618年中大促的三大风险 商家乐此不疲的“刷单炒信” 消费者无计可施的“薅羊毛” 平台恨之入骨的“恶意爬虫” 618三类欺诈风险的特点 618电商平台的业务安全防控之道 618大促再次开启&#xff0c;各平台及商家的促销大战如火如荼。 2023年618&#xff0c;京东推出…

【状态估计】用于非标量系统估计的最优卡尔曼滤波(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

leetcode数据结构题解(Java实现,第一天和第二天)

文章目录 第一天217. 存在重复元素53.最大子数组和 第二天1. 两数之和88. 合并两个有序数组 第一天 217. 存在重复元素 题解思路&#xff1a;首先题目需要的是判断数组中是否存在相同的数字&#xff0c;存在返回true,不存在就返回false。 那么显然可以这样做&#xff0c;先进行…

内网IM即时通讯软件WorkPlus,快速连接工作的沟通利器

在当今信息高度发达的时代&#xff0c;企业内部沟通的重要性不言而喻。随着企业团队的扩大和分布式办公的兴起&#xff0c;即时通讯软件成为了一种必不可少的工具。通过即时通讯软件&#xff0c;团队成员可以实时交流和协作&#xff0c;快速解决问题&#xff0c;加快决策过程。…

Echarts的地图实现拖拽缩放同步功能(解决多层geo缩放、拖动卡顿问题)

项目场景&#xff1a; 大屏项目显示云南省3D的地图&#xff0c;可拖拽缩放、地图打点、点击图标弹框等等功能 问题描述 多图层拖拽时会上下层会分离&#xff0c;延迟卡顿 原因分析&#xff1a; 1、拖拽时不同图层的中心坐标没有保持一致&#xff0c; 2、卡顿是数据更新动画时…

玩业余无线电时,突然听到有人呼救,该怎么办?

不管是在玩业余无线电还是在其他活动当中&#xff0c;突然遇到有人求救&#xff0c;都是一件非常重要的事情&#xff0c;因为救援行动的效率快慢和是否及时&#xff0c;都有可能影响到别人的生命安全。 下面是河南宝蓝小编给出的一些思考和建议&#xff0c;希望对大家会有一些帮…

软件测试-测试用例

目录 测试用例的四个要素 测试用例设计方法 基于需求进行测试用例的设计 等价类 边界值 判定表 正交表 通过allpirs画正交表 场景设计法 错误猜测法 面试题 如何模拟弱网 接口如何测试 zip命令测试 测试用例万能公式 水杯测试用例 微信发朋友圈 测试用例的四个…

Java实现的五子棋游戏 ~java.awtjava.swing

文章目录 Java实现的五子棋游戏1.实现效果2.实现源码2.1运行主函数main.java2.2 棋盘布局Chessboard.java3.Algorithm算法 点击下载链接&#xff1a;Java实现的五子棋游戏源码下载 Java实现的五子棋游戏 作业要求&#xff1a; &#xff08;1&#xff09;课题代号&#xff1a; …

老Mac电脑安装macOS Ventura实战

前提说明&#xff1a;此实战适用于老旧Mac电脑&#xff08;2015年之前的&#xff0c;无法在系统设置中升级macOS Ventura系统的电脑&#xff09;安装macOS Ventura系统&#xff01; 软件&#xff1a;OpenCore-Patcher-GUI.app.zip 工具&#xff1a;16G U盘、或者移动硬盘&a…

Spring MVC拦截器Interceptor使用(判断用户登录)

文章目录 一 概念二 3步使用三 HandlerInterceptor接口四 代码实现 一 概念 Spring MVC中的拦截器&#xff08;Interceptor&#xff09;类似于Servlet中的过滤器&#xff08;Filter&#xff09;&#xff0c;它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验…