├── Buf.h ├── BufferManager.cpp ├── BufferManager.h ├── Kernel.cpp ├── Kernel.h ├── Makefile ├── demo1.cpp ├── file.cpp ├── file.h ├── filesystem.cpp ├── filesystem.h ├── inode.cpp ├── inode.h ├── openfilemanager.cpp ├── openfilemanager.h ├── readme.md └── user.h /Buf.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sen666666/SecondFileSystem/7600217a45a624ed84fdb54c37eeac30a8913675/Buf.h -------------------------------------------------------------------------------- /BufferManager.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sen666666/SecondFileSystem/7600217a45a624ed84fdb54c37eeac30a8913675/BufferManager.cpp -------------------------------------------------------------------------------- /BufferManager.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sen666666/SecondFileSystem/7600217a45a624ed84fdb54c37eeac30a8913675/BufferManager.h -------------------------------------------------------------------------------- /Kernel.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sen666666/SecondFileSystem/7600217a45a624ed84fdb54c37eeac30a8913675/Kernel.cpp -------------------------------------------------------------------------------- /Kernel.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sen666666/SecondFileSystem/7600217a45a624ed84fdb54c37eeac30a8913675/Kernel.h -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | myshell:demo1.cpp 2 | g++ -o myos -m32 BufferManager.cpp demo1.cpp file.cpp filesystem.cpp inode.cpp Kernel.cpp openfilemanager.cpp -std=c++11 3 | 4 | 5 | 6 | clean: 7 | rm myos 8 | -------------------------------------------------------------------------------- /demo1.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sen666666/SecondFileSystem/7600217a45a624ed84fdb54c37eeac30a8913675/demo1.cpp -------------------------------------------------------------------------------- /file.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sen666666/SecondFileSystem/7600217a45a624ed84fdb54c37eeac30a8913675/file.cpp -------------------------------------------------------------------------------- /file.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sen666666/SecondFileSystem/7600217a45a624ed84fdb54c37eeac30a8913675/file.h -------------------------------------------------------------------------------- /filesystem.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sen666666/SecondFileSystem/7600217a45a624ed84fdb54c37eeac30a8913675/filesystem.cpp -------------------------------------------------------------------------------- /filesystem.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sen666666/SecondFileSystem/7600217a45a624ed84fdb54c37eeac30a8913675/filesystem.h -------------------------------------------------------------------------------- /inode.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sen666666/SecondFileSystem/7600217a45a624ed84fdb54c37eeac30a8913675/inode.cpp -------------------------------------------------------------------------------- /inode.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sen666666/SecondFileSystem/7600217a45a624ed84fdb54c37eeac30a8913675/inode.h -------------------------------------------------------------------------------- /openfilemanager.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sen666666/SecondFileSystem/7600217a45a624ed84fdb54c37eeac30a8913675/openfilemanager.cpp -------------------------------------------------------------------------------- /openfilemanager.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sen666666/SecondFileSystem/7600217a45a624ed84fdb54c37eeac30a8913675/openfilemanager.h -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | 程序设计环境: 2 | 运行平台:@RHEL74-X64 3 | 编 译 器:线程模型:posix 4 | gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) 5 | 6 | 说明:因为是64系统在该版本的gcc编译下,指针将会是8位长度,这和UNIX V6++的设计不同会带来一系列问题,如此时指针类型和int型之间的转化将会截断,C++会认为这是个不安全的操作而报错,所以需要在编译选项中加上 –m32(详细可见Makefile文件) 可能会需要手动安装相应的32位库。特此说明。 7 | 8 | 项目说明: 9 | 二级文件系统用一个宿主机上的大文件模拟磁盘,其管理的所有文件内容及文件系统的元数据存放在宿主机文件的相应位置。该二级文件系统的设计与UNIX V6++的设计完全相同。磁盘文件c.img中按照类ext2中一个分区的格式分布,取消了前200个盘块的引导块和内核信息,直接从SUperBlock开始规划,DiskInode区,数据盘块区。磁盘的块大小设计沿用了UNIX V6++的512字节。 10 | 与UNIX V6++相比不同的是取消了多进程的操作,即取消了锁结构和解决cpu抢占问题的系列操作;取消了设备驱动,整个磁盘文件通过mmap映射到内存,直接用memcpy进行“磁盘”读写;取消了特殊文件的处理,UNIX世界中一切皆文件的设计使得原本的文件系统需要处理很多特殊设备,在本次二级文件系统中只存在数据文件;取消了多设备的各项操作,这意味着本次文件系统中只存在一个缓存队列。 11 | 12 | 文件说明: 13 | Buf.h中定义了myBuf类 14 | BufferManager.h中定义了myBufferManager类 15 | File.h中定义了myFile,myOpenFiles,IOParemeter三个类 16 | Filesystem.h中定义了mySuperBlock,myFileSystem,myDirectoryEntry三个类 17 | Inode.h中定义了myInode,DiskInode两个类 18 | Kernel.h中主要定义了myKernel类 19 | Openfilemanager.h中主要定义了myOpenFIleTable,myInodeTable两个类 20 | User.h中主要定义了myUser类 21 | 22 | 对应的cpp文件是对应头文件的类的实现,而demo.cpp中实现了磁盘的格式化,系统的初始化,和文件操作的API。 23 | 最后make出的可执行文件名为myos 24 | 25 | 执行说明: 26 | 直接将所有文件放入一个文件夹下,执行 make 指令make出可执行文件myos,run ./myos 即可进入文件系统,进入用户界面之后会有更加详细的使用说明,根据提示一步步输入即可, 27 | 实现的主要功能: 28 | a fopen(char *name, int mode) 29 | b fclose(int fd) 30 | c fread(int fd, int length) 31 | d fwrite(int fd, char *buffer, int length) 32 | e flseek(int fd, int position, int ptrname) 33 | f fcreat(char *name, int mode) 34 | g fdelete(char *name) 35 | h ls() 36 | i mkdir(char* dirname) 37 | j cd(char* dirname) 38 | k backDir()--返回上级目录 39 | q 退出文件系统 40 | -------------------------------------------------------------------------------- /user.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sen666666/SecondFileSystem/7600217a45a624ed84fdb54c37eeac30a8913675/user.h --------------------------------------------------------------------------------