【操作系统】实验名称: 实验五 文件系统

实验目的:

1. 掌握文件系统的基本概念和工作机制

2. 掌握文件系统的主要数据结构的实现

3、掌握软件系统实现算法

实验内容:

设计并实现一个虚拟的一级(单用户)文件系统程序

提供以下操作

1、文件创建/删除接口命令

2、目录创建/删除接口命令

3、显示目录内容命令

算法设计与实现(附流程图和源代码):

申明函数

void login(void); 用户登录,如果是新用户则创建用户

void init(void); 程序初始化,将所有i节点读入内存

int analyse(char *); 输入参数分析,分析用户命令

void save_inode(int); 将num号i节点保存到虚拟磁盘文件hd.dat

int get_blknum(void); 申请一个数据块

void read_blk(int); 将i节点号为num的文件读入temp

void write_blk(int); 将temp的内容写入hd.dat的数据区

void release_blk(int); 释放文件块号为num的文件占用的空间

void pathset(); 打印当前路径

void deltree(int innum); 实现删除目录树函数

int check(int); 检查用户权限

用户命令处理函数

void help(void); 命令提示帮助函数

void cd(void); 改变当前目录

void dir(void); 显示当前目录下所有文件和目录

void mkdir(void); 创建目录

void rd(void); 删除目录

void creat(void); 创建文件

void open(void); 打开

void read(void); 读文件

void write(void); 写文件

void close(void); 关闭文件

void del(void); 删除文件

void logout(void); 用户注销

void command(void); 命令管理函数

void format(void); 格式化虚拟磁盘

函数间关系:

流程图:

调试过程及实验结果(附截图):

注册用户

登陆登出

创建/进入目录

创建/打开文件

可以选择打开方式,只读,只写和读写

写文件

初始长度为0,输入想要写入的长度20,以及内容12345678916281294abc

读文件

接下来进行读取,可以看到长度为20,选择起始位置7,选择读取长度10,结果为8916281294,结果正确

删除文件

可以看到,删除文件后,再次打开就会提示文件不存在,而如果输入错命令就会提示指令错误。

删除目录

先输入cd …进入上级目录,删除之前创建的lzh目录,再次进入就会提示文件夹不存在

格式化

格式化后会清空“磁盘”,同时创建一个新的文件系统。

思考题:

  1. 单个文件的大小是否为无限的?受到哪个因素限制?

文件系统的限制: 不同的文件系统对单个文件的最大大小有限制。例如,FAT32文件系统通常限制单个文件大小为4GB,而NTFS或exFAT允许更大的文件大小。

操作系统的限制: 操作系统也可能对单个文件大小设置限制。例如,32位操作系统可能限制单个文件大小为2GB,而64位操作系统可以支持更大的文件。

硬件限制: 存储设备的硬件特性也可能对单个文件大小产生影响。某些文件系统和硬件可能限制文件的最大尺寸。

应用程序的限制: 有些应用程序也可能对单个文件大小有限制,这可能是为了确保更好的性能或适应特定的用途。

  1. 你认为一个设计成功的文件系统应该具备哪些特征?

可靠性: 文件系统应该能够保护数据免受损坏或丢失。这可能包括实现数据冗余、错误检测和纠正等机制。

性能: 文件系统应该提供高效的读写操作,适应不同类型的应用程序和工作负载。

可扩展性: 文件系统应该能够方便地扩展以适应不断增长的存储需求,而无需对整个系统进行大规模更改。

安全性: 文件系统应该提供对数据的访问控制和权限管理,以确保只有授权用户可以访问敏感数据。

兼容性: 文件系统应该能够与多种操作系统和硬件平台兼容,以便用户可以在不同环境中使用。

易用性: 文件系统应该提供用户友好的界面和操作方式,使用户能够轻松管理和使用存储空间。

恢复性: 文件系统应该具备良好的恢复机制,能够在发生错误或故障时快速自愈,以确保数据的完整性和可用性。

实验小结:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

合并 K 个排序链表——Java解答

题目:合并 K 个排序链表 题目描述: 给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例: 假设有以下三个链表: 1->4->5, 1->3->4,…

QUIC在零信任解决方案的落地实践

一 前言 ZTNA为以“网络为中心”的传统企业体系架构向以“身份为中心”的新型企业安全体系架构转变,提供解决方案。随着传统网络边界不断弱化,企业SaaS规模化日益增多,给终端安全访问接入创造了多元化的空间。其中BYOD办公方式尤为突出&#…

SpringBoot使用@DS配置 多数据源 【mybatisplus druid datasource mysql】

项目最近需要使用多数据源,不同的mapper分别读取不同的链接,本项目使用了mybatisplus druid 来配置多数据源,基于mysql数据库。 目录 1.引入依赖 ​2.配置文件 application.yaml 3.Mapper中使用DS切换数据源 4.使用DS的注意事项 1.引入依…

苹果忽略iPhone?2024可穿戴产品或成重心!

一代版本一代神,即便是强如iPhone也有着被忽视的一天,当然,这么说有些夸张。虽然iPhone永远都是苹果最重要的产品,但在明年,苹果的重心将偏向其他产品。 彭博社记者马克古曼(Mark Gurman)在新一…

如何确保对称密钥管理的存储安全?

确保对称密钥管理的存储安全是保障信息安全的重要一环。以下是一些建议,以确保对称密钥管理的存储安全: 使用安全存储设备:选择使用经过验证的安全存储设备来存储对称密钥。这些设备通常具有高度的物理安全性,可以防止未经授权的访…

使用Umi搭建React项目

环境准备 一、首先确保有 node环境,并确保 node 版本是 14 或以上。(推荐用 nvm 来管理 node 版本,windows 下推荐用 nvm-windows) nvm使用教程 二、然后需要包管理工具。node 默认包含 npm,但也可以选择其他方案&a…

eclipse-安装WindowBuilder,怎么安装

WindowBuilder是Eclipse的一个插件,可以帮助开发者使用Java Swing、JavaFX和SWT快速构建图形用户界面(GUI)。下面是WindowBuilder的安装步骤: 1. 打开Eclipse IDE(请确保已安装JDK)。 2. 点击“Help”菜单…

【MySQL】:表的删除和修改

表的删除和修改 一.update(修改)二.delete(删除)1.删除数据2.截断表 三.插入查询的数据四.聚合函数五.group by 句子的使用1.导入表2.进行操作 一.update(修改) 对查询到的结果进行列值更新 下面有一个表,接下来的操作都是对该表进行操作。 1.将孙悟空同学的数学成绩…

目标跟踪 MOT数据集和可视化

目录 MOT15数据集格式简介 gt可视化 本人修改的GT可视化代码: MOT15数据集格式简介 以下内容转自:【目标跟踪】MOT数据集GroundTruth可视化-腾讯云开发者社区-腾讯云 MOT15数据集下载:https://pan.baidu.com/s/1foGrBXvsanW8BI4eybqfWg?…

100GPTS计划-AI写诗PoetofAges

地址 https://chat.openai.com/g/g-Cd5daC0s5-poet-of-ages https://poe.com/PoetofAges 测试 创作一首春天诗歌 创作一首夏天诗歌 创作一首秋天诗歌 创作一首冬天诗歌 微调 诗歌风格 语气:古典 知识库

嵌入式Linux开发板硬件学习-基于cadence

嵌入式Linux开发板硬件学习-基于cadence 目录原理图网表输出功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创…

本章主要介绍Spring Framework中用来处理URI的多种方式

1.使用 UriComponentsBuilder 构建URi 话不多说 直接上代码 UriComponents uriComponents UriComponentsBuilder.fromUriString("https://example.com/hotels/{hotel}").queryParam("q", "{q}").encode().build();URI uri uriComponents.exp…

js传递json数据过大的解决方案

protobufjs 使用protobuf,定义如下结构 Person.protobuf syntax "proto3";message Person {string name 1;int32 age 2; }Person.thrift namespace java com.example.Personstruct Person {1: required string name,2: required i32 age }使用bench…

Android笔记(十八):面向Compose组件结合Retrofit2和Rxjava3实现网络访问

一、Retrofit2 Square公司推出的Retrofit2库(https://square.github.io/retrofit/),改变了网络访问的方式。它实现了网络请求的封装。Retrofit库采用回调处理方式,使得通过接口提交请求和相应的参数的配置,就可以获得…

3 - Electron BrowserWindow对象 关于窗口

优雅的打开应用~ 当加载缓慢,打开应用的一瞬间会出现白屏,以下方法可以解决 const mainWindow new BrowserWindow({ show: false }) mainWindow.once(ready-to-show, () > {mainWindow.show() }) 设置背景颜色 const win new BrowserWindow({ b…

高德地图画线,适用于在地图上画出各种道路

addPolyline() {let AMap this.AMaplet polyline new AMap.Polyline({// map: this.map,// polyline 路径path: [new AMap.LngLat("119.368904", "30.913423"),new AMap.LngLat("119.382122", "30.901176"),],strokeColor: #F3D930,…

Windows下配置最新ChromeDriver

1、问题 在使用代码调用谷歌浏览器时会出错: from selenium import webdriver driver webdriver.Chrome() SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 114 Current browser versi…

低噪声 256 细分微步进电机驱动MS35776

产品简述 MS35776 是一款高精度、低噪声的两相步进电机驱动芯 片。芯片集成了快速模式与静音模式来满足高速与低速下的不 同应用。芯片内置功率 MOSFET ,长时间工作平均电流可以达 到 1.4A ,峰值电流 2A 。芯片集成了欠压保护、过流保护、短 地…

java中实现定时给微信群中发送每日天气情况

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。 实现效果 这个功能,适用于做私域的朋友,下面是效果,大家可以参考一下; 🔴🟠🟡 大家好!我是…

【工具使用-有道云笔记】如何在有道云笔记中插入目录

一,简介 本文主要介绍如何在有道云笔记中插入目录,方便后续笔记的查看,供参考。 二,具体步骤 分为两个步骤:1,设置标题格式;2,插入标题。非常简单~ 2.1 设置标题格式 鼠标停在标…
最新文章