热门标签 | 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()函数来把输入的目录改写成一个完整的目录,每次从根目录打开文件夹,避免使用...文件项。


推荐阅读
  • Linux 基础命令详解
    本文介绍了在 Linux 系统中常见的命令及其用法。当用户登录系统后,默认提示符会显示为 [root@localhost ~]# 或 [user@localhost ~]$,其中 # 表示当前用户为 root,$ 表示普通用户。我们将深入探讨一些常用的 Linux 命令,帮助初学者更好地理解和使用这些工具。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 解决微信电脑版无法刷朋友圈问题:使用安卓远程投屏方案
    在工作期间想要浏览微信和朋友圈却不太方便?虽然微信电脑版目前不支持直接刷朋友圈,但通过远程投屏技术,可以轻松实现在电脑上操作安卓设备的功能。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文详细介绍了如何在 Spring Boot 应用中通过 @PropertySource 注解读取非默认配置文件,包括配置文件的创建、映射类的设计以及确保 Spring 容器能够正确加载这些配置的方法。 ... [详细]
  • 本文介绍如何在QT框架中使用QWebSocket和QTcpSocket实现SSL加密通信,涵盖单向认证设置。单向认证常见于Web通信场景,其中客户端验证服务端证书,而服务端不验证客户端证书。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
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社区 版权所有