操作系统
课程设计报告。
设计题目:模拟文件管理系统。
班级: 计算机0706
合作者: 朱去非王琳。
李雨桐郭娜。
设计分工。组长姓名及学号:朱去非 20073079
分工:主要负责课程设计总体设计、小组进度安排;主要负责文件创建、文件打开、文件关闭、菜单显示几个模块的实现。系统测试与调试。
组员1学号及姓名:李雨桐 20073075
分工: 主要负责目录操作和管理功能的具体实现,创建子目录、删除子目录、显示当前目录、更改当前目录四个模块。系统测试与调试。
组员2学号及姓名:王琳 20073077
分工:主要负责文件系统的初始化、首次使用文件系统时格式化模块;系统测试与调试。
组员3学号及姓名:郭娜 20073073
分工:主要负责文件读、文件写、文件删除几个模块的实现。系统测试与调试。
本课程设计要求设计一个模拟的多用户多级目录的文件系统。通过具体的文件存储空间的管理,文件物理结构,目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。
同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。
本课程设计主要任务就是在多用户操作系统支持下建立多用户多级文件系统的设计。具体说来,主要是为了达到下述实验目的:
1)了解并掌握文件系统中用于管理所必须的数据结构。
2)了解并掌握主要的文件操作命令的实现方法。
3)通过课程实践掌握课程设计的方法和流程,并总结设计经验,提出更好的改进方法。
多用户多级文件系统模拟设计。
通过课程设计,要求学生主要掌握如下内容:
1.文件的物理结构可以选用顺序分配、链表分配或索引分配。
2.建立文件:从命令中得到文件名,得到该文件的文件长度,建立文件。修改目录表。
3.删除文件:**文件占用的空间,修改目录表。
4.读文件:read [文件名] [显示开始字节] [显示的字节数] ,直接显示所需要的字节数。
5.写文件:write [文件名] [插入的位置] [插入的内容]
6.查询属性:显示文件属性文件名,类型,长度,时间等。
阅读操作系统方面的书籍,了解操作系统的文件系统原理。结合分析课程设计要求,确定实体以及它们之间的关系。实体关系有三张表(磁盘空间分配表、文件表、打开文件表)、一个模拟磁盘的数组、命令服务和用户构成。
用户负责输入命令。命令服务实现命令的解释、命令检查、命令帮助以及调用相关模块执行相应的命令功能。
此课程设计把txt文本作来研究对象来模拟操作系统的文件系统工作过程。所以用一个字符串数组来模拟磁盘空间,顾名思义,模拟磁盘提供字符的存储服务。
磁盘空间分配表,采用链表结构,每个节点保存模拟磁盘的一个逻辑块的信息,包括块的最大长度,文件占用长度,占用标志。如果占用标志为0,即该空间可分配给文件。初始化磁盘空间分配表链表,首先把整个模拟磁盘作来一块,并置占用位为0.
当有进程申请磁盘空间时,从头开始遍历,检查占用位,如果该块为可分配,则检查块大小,若块长度大于或等于申请空间大小,则把块的前一部分(等于申请大小)分配给文件,并置标志位为占用。剩下的大小作来一个新块,作来一个新节点插入到原节点的后边,标志位为可用。这样就实现了模拟磁盘的线性分配。
文件表,由于模拟文件系统的文件数量不多,故文件表采用线性表来存储。线性表每个结点存储一个文件的信息。
打开文件表,采用数组形式存储打开的文件,数组每个元素保存一个打开文件的信息。文件信息和文件表中的文件信息类似。
构造这些实体的关系图,数据流图、程序流程图来进行具体的设计。
通过分析课程设计要求,具体设计出如下数据结构:
1 char disk[10000]; 模拟磁盘空间。
通过一个字符串数组来模拟磁盘空间,数组最大长度设置为10000,即磁盘空间最大容量为节。作为模拟文件系统,主要理解文件系统的原理,可以把文本文件作为对象来研究。故磁盘空间用一个字符串数组来模拟。
2 struct freedisktable //碰盘空间分配表。
int start; /开始位置。
int length; /占用长度。
int maxlength; /最大长度。
int useflag; /使用标志,1为占用,0为空闲。
通过结构体,将磁盘空间使用情况(文件开始位置、占用长度、最大长度、使用标志)结合在一体。一个结构体变量记录磁盘一个块的信息。结构体作为链表的一个节点,设置一个链表将节点连接起来,构成一个磁盘空间分配表。
3 struct filetable //文件表。
char filename[20]; 文件名字。
int start开始位置。
int lengt**件长度。
int maxlength; /最大长度。
char filekind[8]; 文件种类,此默认为txt
struct tm *timeinfo; /文件创建时间。
通过结构体,将文件名字、文件在磁盘的开始位置、文件长度、文件最大长度、文件类型、创建时间结合在一起。文件类型,本模拟程序使用txt类型。设置一个线性表来存储文件。
4 struct openfiletable //打开文件表。
char filename[20]; 文件名字。
char filekind[8]; 文件类型。
int start文件开始位置。
int lengt**件长度。
int maxlength最大长度。
int opencount打开文件的进程数。
struct tm *timeinfo; /文件创建时间。
通过结构体存储打开的文件信息,包括文件名字、文件类型、文件开始位置、文件长度、最大长度、文件打开数和文件创建时间。通过结构体数组存储所有打开文件信息。
struct inode{
struct inode *i_forw;
struct inode *i_back;
char i_flag;
unsigned int i_ino;
unsigned int i_count;
unsigned short di_number;
unsigned short di_mode;
unsigned short di_uid;
unsigned short di_gid;
unsigned short di_size;
unsigned int di_addr[naddr];
内存i节点结构。
struct dinode{
unsigned short di_number;
unsigned short di_mode;
unsigned short di_uid;
unsigned short di_gid;
unsigned long di_size;
unsigned int di_addr[naddr];
磁盘i节点结构。
struct direct{
char d_name[dirsiz];
unsigned int d_ino;
sfd结构。
struct filsys{
unsigned short s_isize;
unsigned long s_fsize;
unsigned int s_nfree;
unsigned short s_pfree;
unsigned int s_free[nicfree];
unsigned int s_ninode;
unsigned short s_pinode;
unsigned int s_inode[nicinod];
unsigned int s_rinode;
char s_fmod;
超级块结构。
struct pwd{
unsigned short p_uid;
unsigned short p_gid;//所在组。
char password[pwdsiz];
口令结构。struct dir{
struct direct direct[dirnum];
int size;//目录所包含的子目录或文件。
目录结构。struct hinode{
struct inode *i_forw;
哈希链结构。
struct file{
操作系统课程设计报告
西安郵電大學。院系名称 计算机学院。专业名称 软件工程。班级 1104 学生姓名 赵大伟。学号 8位 04113124 指导教师 舒新峰。设计起止时间 2013.11.10 2013.11.20 1 通过观察 分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在posix 规范中...
操作系统课程设计报告
课程设计。课程名称操作系统。题目名称多级文件系统 2 学生学院计算机学院 专业班级。学号。学生姓名。指导教师。年月日。目录。一 课程设计 6 二 开发工具及环境 6 三 设计内容 6 四 结构图 8 五 部分 9 六 运行截图 11 七 参考文献 15 八 心得体会 15 本课程设计要求设计一个模拟...
操作系统课程设计报告
实验一进程管理。一 实验目的。1 开发一个函数,建立进程控制块和资源控制块结构,并实现相关数据结构的初始化。2 开发一系列操作,由进程调用这些操作,达到控制进程申请或释放各种资源的目的。通过实验理解进程的概念,进程的组成 pcb结构 进程的并发执行和操作系统进行进程管理的相关原语 主要是进程的创建 ...