当前位置: 首页 > news >正文

操作系统实验六 文件管理

★观前提示本篇内容为操作系统实验内容,代码等内容经测试没有问题,但是可能会不符合每个人实验的要求,因此以下内容建议仅做思路参考

目录

        • 一、实验目的
        • 二、实验内容
        • 三、具体实现
        • 四、实验总结

一、实验目的

  1. 理解文件、目录和文件系统等概念。
  2. 理解操作系统中文件系统的内部功能及内部实现。
  3. 掌握常用的文件操作
  4. 设计一个简单的文件系统,加深理解操作系统中的文件管理

二、实验内容

为linux系统设计一个简单的二级文件系统(其中第一级对应于用户账号,第二级对应于用户帐号下的文件)。要求做到以下几点:

  1. 在内存中开辟一个虚拟磁盘空间作为文件存储分区,在其上实现一个简单的基于多级目录的单用户单任务系统中的文件系统。退出该文件系统的使用时,应将该虚拟文件系统以一个Windows
    文件的方式保存到磁盘上,以便下次可以再将它恢复到内存的虚拟磁盘空间中。
  2. 文件存储空间的分配可采用显式链接分配或其他的办法。
  3. 空闲磁盘空间的管理可选择位示图或其他的办法。如果采用位示图来管理文件存储空间,并采用显式链接分配方式,那么可以将位示图合并到FAT中。
  4. 文件目录结构采用多级目录结构。为了简单起见,可以不使用索引结点,其中的每个目录项应包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。
  5. 可以实现下列几条命令(至少4条)。
    login 用户登陆
    dir 列文件目录
    create 创建文件
    delete 删除文件
    open 打开文件
    close 关闭文件
    read 读文件
    write 写文件

三、具体实现

1️⃣实验方案选择及分析

为linux系统设计一个简单的二级文件系统

1、在内存中开辟一个虚拟磁盘空间作为文件存储分区,在其上实现一个简单的基于多级目录的单用户单任务系统中的文件系统。

2、文件存储空间的分配可采用显式链接分配或其他的办法

3、空闲磁盘空间的管理可选择位示图或其他的办法。如果采用位示图来管理文件存储空间,并采用显式链接分配方式,那么可以将位示图合并到FAT中。

4、文件目录结构采用多级目录结构。为了简单起见,可以不使用索引结点,其中的每个目录项应包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。

5、可以实现下列几条命令(至少4条)。

2️⃣详细步骤及程序清单

①编程实现及运行输出

在这里插入图片描述

②创建文件目录file1 mkdir
在这里插入图片描述

③进入文件目录file1 cd

在这里插入图片描述

④创建子文件目录file2 mkdir

在这里插入图片描述

⑤删除子目录file2 rmdir

在这里插入图片描述

⑥在file1下创建t1文件 create

在这里插入图片描述

⑦打开t1文件 open

在这里插入图片描述

⑧向t1文件中写入内容 write

在这里插入图片描述

⑨读取t1文件中写入的内容 read

在这里插入图片描述

⑩退出系统 exit

在这里插入图片描述

四、实验总结

①理解了文件、目录和文件系统等概念、也对操作系统中文件系统的内部功能及内部实现有了一定的认识;
②掌握了常用的文件操作,如mkdir、cd、open、write、exit等;
③成功设计了一个简单的文件系统,加深了自己对操作系统中的文件管理的理解。

2022.9.21记录:Code_流苏(CSDN)
如有任何疑问,评论回复,看到即回,欢迎大家多多交流学习!
★以上实验内容仅供参考。

相关文章:

  • Bert(Bidirectional Encoder Representations from Transformers)
  • oracle使用rman备份实现异机数据恢复
  • 巩固类和对象的知识点——牛客5道题目
  • 黄老板,给我来个亲笔签名,抽显卡~
  • 儿童头部保护玩具CPC认证亚马逊美国站CPC认证
  • CentOS Docker 安装 常用命令
  • C语言中宏定义的盲区有哪些?
  • springboot之redis缓存探索
  • 高并发系统架构设计之微服务篇: 秒杀系统下的服务拆分
  • jieba
  • 学术英语写作(更新中)
  • 关于穿越机FPV视频果冻效应的讨论
  • 顺序表(c++类模板实现)
  • Leetcode 698. 划分为k个相等的子集
  • 开发工具安装
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • C++类中的特殊成员函数
  • C学习-枚举(九)
  • golang中接口赋值与方法集
  • Hibernate【inverse和cascade属性】知识要点
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • leetcode388. Longest Absolute File Path
  • log4j2输出到kafka
  • SOFAMosn配置模型
  • spring学习第二天
  • sublime配置文件
  • WePY 在小程序性能调优上做出的探究
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 首页查询功能的一次实现过程
  • 在Mac OS X上安装 Ruby运行环境
  • 怎么将电脑中的声音录制成WAV格式
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • - 转 Ext2.0 form使用实例
  • # include “ “ 和 # include < >两者的区别
  • (10)ATF MMU转换表
  • (2)(2.10) LTM telemetry
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (五)关系数据库标准语言SQL
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)菜鸟学数据库(三)——存储过程
  • (转)原始图像数据和PDF中的图像数据
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • ??在JSP中,java和JavaScript如何交互?
  • @requestBody写与不写的情况
  • [20180224]expdp query 写法问题.txt
  • [8-27]正则表达式、扩展表达式以及相关实战