云文档网 - 专业文章范例文档资料分享平台

操作系统大型试验

来源:网络收集 时间:2024-03-29 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xuecool-com或QQ:370150219 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

操作系统 模拟linux文件管理系统

Unix文件系统模拟实验报告

一.实验任务和说明

这次实验是操作系统大型实验,要完成的任务是

模拟unix操作系统中的文件系统功能。在终端界面上用户可以象unix的shell命令一样输入一些命令,如输入ls 显示文件目录,chmod改变文件权限,chown改变文件拥有者,chgrp改变文件所属组,chnam改变文件名,pwd显示当前目录,cd改变当前目录,mkdir创建目录,rmdir删除目录,mk创建文件 ,cp文件拷贝,rm删除文件,cat显示文件内容,login切换用户,passwd修改用户口令 等功能。在后台,要实现混合索引式文件结构,包括用空闲结点号栈管理空闲结点和成组链接发管理空闲盘块。

二.实验需求分析、设计思路和总体方案

1

.基本思路:

用一个文件(disk.txt)模拟一个物理硬盘, 通过对该文件的一系列操作,模拟UNIX文件系统中的文件操作。

2

.理磁盘块的设计

卷盘块数等于100块,每个磁盘块512字节,磁盘块之间用/n隔开,总共是514字节。0#表示超块,1#--10#放索引结点,每个索引结点占64字节,共80个索引结点。初始化是存在根目录root,占用了0#结点和11#盘块。

3

.空闲磁盘块:

采用成组链接法管理。每组10块,12#--99#分为9组,每组的最后一个磁盘块里存放下一组的磁盘号信息。最后一组只有8块,加上0作为结束标志。在超块中用一个一维数组(10个元素)作为空闲磁盘块栈。放入第一组盘块。

4

.空闲

I

结点:

采用混合索引式文件结构。索引结点结构中文件物理地址为六项:四个直接块号,一个一次间址,一个两次间址,其中一次间址和两次间址中一个磁盘块中存放16个磁盘号 。在超块中也用一维数组(80个元素)作为空闲I结点栈,与空闲磁盘块管理不同的是这里不用采用成组链接法,这一维数组中存放所有I结点编号,而且一直保持同一大小秩序。根目录占0#索引结点,由于根目录不会删改,是一直占0#索引结点,所以我并未按实验指导所说,把它写在超块里,不过写进去也无所谓的。

5

操作系统 模拟linux文件管理系统

.超块,

I

结点和目录结构的设计

struct SUPERBLOCK//超块

{

int fistack[80];//空闲结点号栈 setw(3)*80

int fiptr;//空闲结点栈指针(还有多少个) setw(3)

int fbstack[10];//空闲盘块号栈 setw(3)*10

int fbptr;//空闲盘块号指针 setw(3)

int inum;//空闲i结点总数 setw(3)

int bnum;//空闲盘块总数 setw(3)

};

struct INODE//i结点(64B) 已保证了每两个数据之间有空格隔开

{

int fsize;//文件大小 setw(6)

int fbnum;//文件盘块数 setw(6)

int addr[4];//四个直接盘块号(0 ~ 512*4==2048) setw(3)*4

int addr1;//一个一次间址() setw(3)

int addr2;//一个两次间址() setw(3)

char owner[6];//文件拥有者 setw(6)

char group[6];//文件所属组 setw(6)

char mode[11];// 文件类别及存储权限 setw(12)

char ctime[9];//最近修改时间 setw(10)

};

操作系统 模拟linux文件管理系统

struct DIR//目录项(36B)

{

char fname[14];//文件名(当前目录) setw(15) (0 ~ 14)

int index;//i结点号 setw(3) (15 ~ 17)

char parfname[14];//父目录名 setw(15) (18 ~ 32)

int parindex;//父目录i结点号 setw(3) (33 ~ 35)

};

结点结构中的文件盘块数,目录项结构中的父目录名,父目录i结点号,其实可以不要,基本是不用到或是可以不用的,但是当我意识到时,程序已编得差不多了,为了避免牵一发而动全身,只好留着!

6

.用户,密码和组

我的用户组信息是存放在另一个文件

(user.txt)

中的。

三.各个主要功能模块(函数)的说明

1.main.cpp:

是程序的主函数模块

主函数首先会根据控制文件control.txt的头一个位(初始化确定位)来确定是否进行初始化。如果初始化,那么将只有一个根目录。因为一旦初始化后,初始化确定位就会置为0,所以系统只会在第一次进入时初始化,以后都是在前面建立的文件结构上进行操作的。如果一定要系统初始化时,可把control.txt的头一个位置为1,或者使用命令“reset”。

进入系统时,当前路径是根目录。然后是登陆请求。登陆后,超块读入内存(由一个结构对象superblock模拟),进入命令解析层,对用户的不同命令执行不同的操作。退出系统前,把内存的超块再写回disk.txt。

2.head.h:

是程序的所有全局变量、结构、函数声明的模块。也包括了所有要用到的系统库。

3.superblock.h:

是定义有关超块、结点、盘块、目录项的底层操作函数的模块。

1.对结点的操作:

操作系统 模拟linux文件管理系统

int ialloc(void);

申请一个i结点 返回结点号 否则返回-1。

返回的是空闲结点号栈中最小的结点号,结点用完时返回-1,申请失败。

void ifree(int index);

指定一个结点号,回收一个i结点。

先清空结点,然后插入栈中合适位置(必须保持结点号的有序性)。

void readinode(int index,INODE &inode);

读指定的i结点( n#结点,读指针应定位到514+64*n (64B)+2*(n/8) )到INOE inode寄存于对同一结点的大量操作

void writeinode(INODE inode,int index);

百度搜索“yundocx”或“云文档网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,云文档网,提供经典医药卫生操作系统大型试验在线全文阅读。

操作系统大型试验.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.yundocx.com/wenku/1257458.html(转载请注明文章来源)
Copyright © 2018-2022 云文档网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:370150219 邮箱:370150219@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:7 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219