首页 > 其他分享 >lab5实验报告

lab5实验报告

时间:2023-03-14 16:44:53浏览次数:47  
标签:文件 FSREQ struct int lab5 磁盘 实验报告 define

lab5实验报告

一、实验思考题

Thinking5.1

/proc是一种由软件创建的特殊的伪文件系统,通过特殊的接口来访问内核。每一个文件对应于内核中的函数,其中大部分文件时只读的,但可以通过临时设置来改变内核的设置。用户在读取文件时,通过该函数可以动态生成文件的内容。

Windows分盘设计,驱动器之下有自己的根目录,通过提供系统调用接口来实现。

这种文件系统对系统调用进行了抽象,可以对用户隐藏更多细节,但缺点是需要长期装载在内存中,消耗空间。

Thinking5.2

内核存放于kseg0,一般需要通过cache访问,如果设备的写入缓存到cache中,外部设备更新后,已经缓存的部分没有被更新,可能导致之后的访问错误写入设备的内容。

Thinking5.3

最大块1024 * 4KB = 4MB

Thinking5.4

一个文件控制块256B,一个磁盘块4KB,一块最多存4KB / 256B = 16块。

一个目录最大为4MB,则最多4MB / 256B = 16K个文件。

Thinking5.5

kseg1区域来映射磁盘,最多处理1GB

Thinking5.6

结构体FIlefd中的第一个成员类型是struct Fd*,所以转化出来实际上是匹配的struct Filefdstruct Fd,转化后可以访问struct Filefd中的其他变量。

Thinking5.7

  • Fd结构体对应文件描述符
    • fd_dev_id对应设备id
    • fd_offset对应相对于文件开头的偏移量
    • fd_omode对应文件打开的模式

对文件进行读写和管理,做一些内存的记录,不对应物理实体。

  • Filefdfile + fd,文件与文件描述符的组合
    • file_fd是文件描述符
    • f_fileid记录文件id
    • f_file文件控制块

有记录文件信息和文件所在磁盘块的指针,对应于磁盘的物理实体,包含内存数据。

  • Open存储文件相关信息
    • o_file文件控制块
    • o_fileid文件再opentab数组中查找的有关索引值
    • o_mode记录文件打开模式
    • o_ff对应的Filefd结构体

Thinking5.8

这是一个后台进程,没有接收请求时就等待,接收到文件系统调用才继续执行,所以不会导致整个内核进入panic状态

二、实验难点图示

设备

设备部分主要有三种,调用syscall_write_devsyscall_read_dev

  • console范围0x10000000 - 0x20,控制台终端
  • IDE范围0x13000000 - 0x4200,磁盘
  • rtc范围0x15000000 - 0x200,时钟终端

文件系统结构

File结构

struct File {
	u_char f_name[MAXNAMELEN];
	u_int f_size;
	u_int f_type;
	u_int f_direct[NDIRECT];
	u_int f_indirect;

	struct File *f_dir;
	u_int f_printcount;
	u_int f_modifycount;
	u_char f_pad[BY2FILE - MAXNAMELEN - 4 - 4 - NDIRECT * 4 - 4 - 4 - 4 - 4];
};

磁盘块Block

struct Block {
    uint8_t data[BY2BLK];
    uint32_t type;
};

磁盘,存放Block的数组

struct Block {
    uint8_t data[BY2BLK];
    uint32_t type;
} disk[NBLOCK];

创建文件

create_file函数,需要分情况判断

  • 没有block正在使用,创建全新
  • 存在block且其中有一个空的文件控制块位置
  • 存在block但没有空的位置,创建新的

文件系统用户接口

系统调用IPC机制实现有相应的请求号

#define FSREQ_OPEN	1
#define FSREQ_MAP	2
#define FSREQ_SET_SIZE	3
#define FSREQ_CLOSE	4
#define FSREQ_DIRTY	5
#define FSREQ_REMOVE	6
#define FSREQ_SYNC	7

经过对应的处理之后,进入fsipc函数

三、体会与感想

文件系统部分关于磁盘的读写和设备驱动思考了比较久,在磁盘上需要先理解各个位置所对应的内容。磁盘由仿真设备Gxemul模拟器提供,指导书中有相关的提示。

物理地址转换为内核虚拟地址,调用read_sector函数。

位图bitmap用于标识磁盘中块的使用情况。

经过本次实验,对于文件系统有了进一步的了解,内存结构、IPC也很本次内容紧密相关,理清思路需要阅读大量代码,是一个很好的锻炼。

标签:文件,FSREQ,struct,int,lab5,磁盘,实验报告,define
From: https://www.cnblogs.com/ddl789/p/17215447.html

相关文章

  • CS144 LAB5~LAB6
    CS144lab5~6最后两个lab了,虽然很多大佬都说剩下的两个lab比起TCP的实现,“简直太简单了”,但是我认为做这两个之前需要补充一些额外的网络知识,不然直接上手去做的话,难度也......
  • python学习-第三方库综合程序设计实验报告
    目录实验四: Python综合程序设计实验名称:Python综合程序设计              指导教师:      实验日期:2022年 12 月 5 日......
  • 实验报告
    一.实验目的解析SSM框架?2.SpringBoot框架功能特性?3.SpringBoot工作生命周期?4.SSM框架和SpringBoot框架的对比?5.Maven框架的jar管理方式? 二.......
  • NEMU PA 4 实验报告
    一、实验目的在前面的PA123中,我们分别实现了基本的运算单元,实现了各种指令和程序的装载,实现了存储器的层次结构。而在PA4中,为了让NEMU可以处理异常情况以及和外设交互,我们......
  • NEMU PA 3-3 实验报告
    一、实验目的在上一章PA3-2中,我们实现了分段机制,将48位的虚拟地址vaddr转换成了laddr。为什么不是paddr呢?这就要说到这一章要完成的东西:**分页机制**。从80386开始,计算......
  • NEMU PA 3-2 实验报告
    一、实验目的在上一章节我们完成了Cache的实现,但是这只是在速度上提高了取指和存取操作数的效率,而在访问的安全性上没有得到有效提升。在PA3-2中我们要完成的,就是在NEMU......
  • NEMU PA 3-1 实验报告
    一、实验目的在前面的PA1中,我们实现了CPU和FPU,在PA2中我们实现了对指令的解码和对ELF的装载,以及进一步完善了CLI调试器。那么在整个PA3中,我们将要着力于内存的相关处理,如C......
  • NEMU PA 1 实验报告
    课程地址:PA1-1https://www.bilibili.com/video/BV1JE411J7AKPA1-2https://www.bilibili.com/video/BV1EE411J7Y6PA1-3https://www.bilibili.com/video/BV1fE411H7nS......
  • NEMU PA 2-2 实验报告
    课程地址:https://www.bilibili.com/video/BV1f7411D7P6一、实验目的在PA2-1中,我们实现了了解了程序的装载和对指令的解码和执行,在这一章节我们将继续深入了解程序的装......
  • NEMU PA 2-1 实验报告
    课程地址:https://www.bilibili.com/video/BV1TE411P7tq一、实验目的通过PA2-0了解了汇编基础知识和如何去阅读i386手册后,在这个阶段我们就需要:了解程序执行的宏观过......