热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

杭州电子科技大学操作系统课程设计:简单文件系统的实现

本实验的代码地址:https:github.comyjc567HDU_OS_Assignment_2017_SimpleFileSystem,如有需要&

本实验的代码地址:https://github.com/yjc567/HDU_OS_Assignment_2017_SimpleFileSystem,如有需要,欢迎自行取用,但是不建议你拿着这个代码去验收,自己的知识永远是自己的,好好学习才是王道!


emmmm想写一个操作系统的课程设计说明,因为自己写的时候也遇到了好多问题,外加感觉对实验指导书的说明有些疑问,觉得写出来可以给别人看看。但是感觉写出来的东西……没什么好看的。

因为这个系统还是有点复杂,但是自己又没有太多的时间和能力把这个复杂的系统说清楚。


存储功能的接口实现

课程设计的文件系统是个类似fat的文件系统结构。fat的结构可以大致参考一下课程设计书或者上课ppt的内容,如下图。磁盘被分为若干块相同大小的磁盘块,一个文件的fcb会记录一个文件的大小和这个文件对应的fat起始物理块号,fat表会标记出一个物理块号的下一个物理块号,如果是EOF,则表明这个物理块是一个文件的最后一个物理块。这些物理块号的二进制文件串联起来后,就是一个文件的内容。
这里写图片描述

每次文件系统程序运行的时候,程序会申请一个大小为1024000字节的内存空间,作为虚拟的磁盘空间。申请完成后,程序就会试图打开一个名为myfsys的文件,这个文件是上一次程序运行结束时,内存中的虚拟磁盘空间的备份。如果myfsys文件不存在,或者myfsys的前八个字节不是二进制数01010101的话,程序就会进行系统的初始化,反之会通过fread()函数把myfsys读进内存空间。

那么怎么把fcb结构体或字符串写进虚拟磁盘空间或者从虚拟磁盘空间读出fcb结构体或字符串呢?利用memcpy()函数就好了,这个函数可以自行地把各种变量的内存写到其它内存上。因此,如果我们要读出一个目录文件下有哪些文件,只要根据这个目录文件的fcb从虚拟磁盘上读出相应的信息,然后把信息加载到一个个fcb结构体中,就得到了其目录下的fcb文件。


文件系统基础功能的分析和实现


创建文件功能

不管是创建文件夹还是创建文件,其实都是在其父目录对应的文件目录下新增一个新的fcb,只不过fcb的内容稍有不同,所以自己用my_touch()函数来创建对应的文件(其实Linux下就有touch命令,就是用来创建文件的),然后再根据这个文件的类型进行其它的相应操作。


打开文件功能

与上同理,不管是打开文件夹还是打开文件,其实就是打开一个文件fcb并读取相关信息。于是my_cd()函数和my_open()函数其实都是一样的功能,写一个,调用一个就好了。


指导书中的一些问题和疑惑


文件夹fcb中的...文件项有什么用

没用,真的没用,至少我认为用了这两个文件项会出bug,因为当你用./这个目录打开当前目录的时候,当前目录会把./当成自己的父目录,当当前目录发生了修改,需要把修改后的信息写入父目录时,其实际父目录不会发生修改。
然后自己是写了一个rewrite_dir()函数来把输入的目录改写成一个完整的目录,每次从根目录打开文件夹,避免使用...文件项。


推荐阅读
  • Linuxchmod目录权限命令图文详解在Linux文件系统模型中,每个文件都有一组9个权限位用来控制谁能够读写和执行该文件的内容。对于目录来说,执行位的作用是控制能否进入或者通过 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 打开文件管理器_【教程】模组管理器3.1食用指南
    文编:byakko最近有部分小伙伴反应还不会使用unity模组管理器,现在我就给大家讲一下unity模组管理器——从下载到使用。完整视频版以下是无WiF ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Linux磁盘的分区、格式化的观察和操作步骤
    本文介绍了如何观察Linux磁盘的分区状态,使用lsblk命令列出系统上的所有磁盘列表,并解释了列表中各个字段的含义。同时,还介绍了使用parted命令列出磁盘的分区表类型和分区信息的方法。在进行磁盘分区操作时,根据分区表类型选择使用fdisk或gdisk命令,并提供了具体的分区步骤。通过本文,读者可以了解到Linux磁盘分区和格式化的基本知识和操作步骤。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
author-avatar
sawachan_107
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有