操作系统课程设计解析.docx
- 文档编号:9071740
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:17
- 大小:246.30KB
操作系统课程设计解析.docx
《操作系统课程设计解析.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计解析.docx(17页珍藏版)》请在冰豆网上搜索。
操作系统课程设计解析
课程设计报告
2015~2016学年第一学期
操作系统综合实践课程设计
实习类别
课程设计
学生姓名
李旋
专业
软件工程
学号
130521105
指导教师
崔广才、祝勇
学院
计算机科学技术学院
二〇一六年一月
起止周
18~19
周数
2
实习地点
南研1213实验室
课程设计目的:
操作系统是计算机专业的核心专业课,“操作系统课程设计”是理解和巩固操作系统基本理论、原理和方法的重要的实践环节。
操作系统课程主要讲述的内容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。
本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,掌握操作系统基本理论与管理方式。
在算法基础上,解决实际的管理功能的问题,提高学生实际应用、编程的能力。
主要任务是实现操作系统和相关系统软件的设计,其中涉及进程创建,同步,进程间的通信,存储管理,文件系统等操作系统概念。
课程设计要求:
模拟Linux文件系统。
在任一OS下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的模拟Linux文件系统。
1.在现有机器硬盘上开辟20M的硬盘空间,作为设定的硬盘空间。
2.编写一管理程序对此空间进行管理,以模拟Linux文件系统,具体要求如下:
(1)要求盘块大小1k正规文件存文件
(2)i结点文件类型目录文件(共1byte)
块设备管道文件物理地址(索引表)共有13个表项,每表项2byte
文件长度4byte联结计数1byte
(3)0号块超级块栈长度50
空闲盘块的管理:
成组链接(UNIX)
位示图法(Linux)
(4)每建一个目录,分配4个物理块文件名14byte
(5)目录项信息i结点号2byte
(6)结构:
0#:
超级块1#-20#号为i结点区
20#-30#号为根目录区
3.该管理程序的功能要求如下:
(1)能够显示整个系统信息,源文件可以进行读写保护。
目录名和文件名支持全路径名和相对路径名,路径名各分量间用“/”隔开。
(2)改变目录:
改变当前工作目录,目录不存在时给出出错信息。
(3)显示目录:
显示指定目录下或当前目录下的信息,包括文件名、物理地址、保护码、文件长度、子目录等(带/s参数的dir命令,显示所有子目录)。
(4)创建目录:
在指定路径或当前路径下创建指定目录。
重名时给出错信息。
(5)删除目录:
删除指定目录下所有文件和子目录。
要删目录不空时,要给出提示是否要删除。
(6)建立文件(需给出文件名,文件长度)。
(7)打开文件(显示文件所占的盘块)。
(8)删除文件:
删除指定文件,不存在时给出出错信息。
4.程序的总体流程为:
(1)初始化文件目录;
(2)输出提示符,等待接受命令,分析键入的命令;
(3)对合法的命令,执行相应的处理程序,否则输出错误信息,继续等待新命令,直到键入EXIT退出为止。
进度安排及主要内容:
第一周:
总体有一个方向,大体设计出函数及其实现
第二周:
详细设计,将各功能完善,完成实验报告
成绩:
指导教师(签字)
年月日
1、概述
一个目录文件是由目录项组成的。
每个目录项包含16B,一个辅存磁盘块(512B)包含32个目录项。
在目录项中,第1、2字节为相应文件的外存i节点号,是该文件的内部标识;后14B为文件名,是该文件的外部标识。
所以,文件目录项记录了文件内、外部标识的对照关系。
根据文件名可以找到辅存i节点号,由此便得到该文件的所有者、存取权、文件数据的地址健在等信息。
UNIX的存储介质以512B为单位划分为块,从0开始直到最大容量并顺序加以编号就成了一个文件卷,也叫文件系统。
UNIX中的文件系统磁盘存储区分配图如下:
0#
1#
2#
…
K#
K+1#
K+2#
K+3#
…
n#
本次课程设计是要实现一个简单的模拟Linux文件系统。
我们在内存中开辟一个虚拟磁盘空间(20MB)作为文件存储器,并将该虚拟文件系统保存到磁盘上(以一个文件的形式),以便下次可以再将它恢复到内存的虚拟磁盘空间中。
文件存储空间的管理可采用位示图方法。
2、设计的基本概念和原理
2.1设计任务
多用户、多级目录结构文件系统的设计与实现。
可以实现下列几条命令
login
用户登录
logout
退出当前用户
dir
列文件目录
creat
创建文件
delete
删除文件
open
打开文件
close
关闭文件
read
读文件
write
写文件
mkdir
创建目录
ch
改变文件目录
rd
删除目录树
format
格式化文件系统
Exit
退出文件系统
2.2设计要求
1)多用户:
usr1,usr2,usr3,……,usr8(1-8个用户) 2)多级目录:
可有多级子目录;
3)具有login(用户登录) 4)系统初始化(建文件卷、提供登录模块)
5)文件的创建:
create(用命令行来实现) 6)文件的打开:
open
7)文件的读:
read 8)文件的写:
write
9)文件关闭:
close 10)删除文件:
delete
11)创建目录(建立子目录):
mkdir 12)改变当前目录:
cd
13)列出文件目录:
dir 14)退出:
logout
新增加的功能:
15)删除目录树:
rd
16)格式化文件系统:
format
2.3算法的总体思想
本课程设计是要求我们模拟Linux文件系统功能设计一个虚拟文件系统,依据Linux文件系统的特点,其设计思想是:
申请1M的内存空间来虚拟文件系统,将其以512B每块划分2048块,采用位示图管理文件系统的方法,利用其原理将第1块作为位图区(512B),共有对i节点区和数据块区分别建立位图;每个i节点占16B,每块有512/16=32个i节点,用2、3共两块作为i节点,总共有64个i节点,在位图区占用8B;其余2045块作为数据区,在位图区占用接近256B。
文件系统存储区分配图如下:
位图区
i节点区
数据区
位图:
用0表示未使用,1表示使用;
i节点:
文件控制块(FCB),描述文件信息的一个数据结构;
数据区:
存放用户数据,包括目录文件。
位示图用以反映整个存储空间的分配情况,由若干字节构成,每个字节中的每一位对应文件存储器中的一块,“1”状态表示相应块已占用,“0”状态表示该块为空闲。
存储块分配时,只要把找到的空闲块所对应的位由"0"改为"1",而在释放时,只要把被释放的物理块所对应的位由"1"改为"0"即可。
分配和释放都可以在内存的位示图上完成,而且速度较快。
磁盘i节点利用在内存中生成链表或者数组的方法来生成,并且限制磁盘节点数的最大值。
同样内存i节点利用链表的方法在内存中生成。
同时在往文件中写或者读的时候我们都是对内存中有内容进行读写。
在该文件系统中,规定一个文件最多只能占用2个数据块,这两个数据块可以是不连续的,其块号记录在一个索引块中,该索引块称为inode结构。
读入一个文件时,先根据目录找到相应的i节点号,将i节点读入主存i节点,建立打开文件表指向该主存i节点,再将文件内容读入主存数据区。
3、总体设计
3.1系统总体框架图
3.2系统总体流程图
3.3各模块功能说明
format模块
功能:
格式化文件系统,即初始化文件系统,相当于硬盘的格式化。
将其中原有的用户及用户下的文件系统全部还原初始状态,即没有任何用户和目录、文件,也就是按设计的文件系统格式重建新的文件系统。
get_blknum和release_blk模块
功能:
实现i节点的分配和回收;
算法:
当一个新的文件被建立时,在给该文件分配磁盘存储区之前,应为该文件分配存放该文件的说明信息的磁盘i节点。
反之,当从文件系统中删除某个文件时,则要首先删除它的i节点项。
init()模块
功能:
进入文件系统
算法:
初始化用户打开文件系表。
在内存中申请一个虚拟存储空间,此空间必须大于或等于可格式化时的空间。
将文件系统文件读入虚拟磁盘。
exit()模块
功能:
退出文件系统函数exit()
算法:
将虚拟磁盘内容保存到磁盘上。
释放虚拟磁盘所占据的空间。
撤消用用户打开文件表。
Create()模块
功能:
创建文件
用法:
creatfilename
算法:
分配一空目录项,分配磁盘块。
可用位示图。
填写该空目录项。
如文件长度(0),文件名,类型等。
分配一个用户打开文件表项,并填写相关目录,读写指针=0。
open()模块
功能:
打开文件open()
用法:
openfilename
算法:
if(该文件已打开or该文件不存在)报错(出错信息)。
分配一个用户打开文件表项。
close()模块
功能:
关闭文件close()
用法:
closefilename
算法:
释放该文件的用户占据的内存空间。
清空该文件的用户打开文件表目。
write()模块
功能:
写文件write(fd,buf,len)
用法:
writefilename,需要先打开文件。
算法:
指定写入内容长度。
buf。
修改打开文件表读/写指针。
修改目录项中的文件长度。
read()模块
功能:
read(fd,buf,len)
用法:
readfilename,需先打开文件。
算法:
文件信息.修改读/写指针。
delete()模块
功能:
删除文件delete()
用法:
deletefilename
算法:
若文件不存在,报错。
回收磁盘空间。
回收目录项。
四、详细设计
4.1该文件系统的数据结构和申明函数
typedefstruct
{
charuser_name[10];//用户名
charpassword[10];//密码
}User;
typedefstruct
{
shortinum;//文件i节点号
charfile_name[10];//文件名
chartype;//文件类型
charuser_name[10];//文件所有者
shortiparent;//父目录的i节点号
shortlength;//文件长度
shortaddress[2];//存放文件的地址
}Inode;
//打开文件表
typedefstruct
{
shortinum;//i节点号
charfile_name[10];//文件名
shortmode;//读写模式(1:
read,2:
write,3:
readandwrite)
shortoffset;//偏移量
}File_table;
//申明函数
voidlogin(void);用户登录,如果是新用户则创建用户
voidinit(void);程序初始化,将所有i节点读入内存
intanalyse(char*);输入参数分析,分析用户命令
voidsave_inode(int);将num号i节点保存到虚拟磁盘文件hd.dat
intget_blknum(void);申请一个数据块
voidread_blk(int);将i节点号为num的文件读入temp
voidwrite_blk(int);将temp的内容写入hd.dat的数据区
voidrelease_blk(int);释放文件块号为num的文件占用的空间
voidpathset();打印当前路径
voiddeltree(intinnum);实现删除目录树函数
intcheck(int);检查用户权限
//用户命令处理函数
voidhelp(void);命令提示帮助函数
voidcd(void);改变当前目录
voiddir(void);显示当前目录下所有文件和目录
voidmkdir(void);创建目录
voidrd(void);删除目录
voidcreat(void);创建文件
voidopen(void);打开
voidread(void);读文件
voidwrite(void);写文件
voidclose(void);关闭文件
voiddel(void);删除文件
voidlogout(void);用户注销
voidcommand(void);命令管理函数
voidformat(void);格式化虚拟磁盘
4.2程序设计与实现
4.2.1主要函数列表
函数原型
功能
入口、出口参数说明
voidlogin(void)
用户登陆
voidinit(void))
程序初始化
intanalyse(char*)
输入参数分析
命令行字符串
voidsave_inode(int)
保存i节点到虚拟磁盘文件
i节点号
intget_blknum(void)
分配一个磁盘块
voidread_blk(int)
读磁盘快内容
i节点号
voidwrite_blk(int)
写磁盘块
i节点号
voidrelease_blk(int)
释放一个磁盘块
i节点号
voidpathset();
打印当前路径
voiddeltree(intinnum);
实现删除目录树函数
i节点号
intcheck(int);
检查用户权限
i节点号
voidhelp(void)
命令提示帮助函数
voiddir(void)
显示当前目录下所有文件和目录
voidmkdir(void)
创建目录
voidcreat(void)
创建文件
voidopen(void)
打开文件
voidread(void)
读文件
voidwrite(void)
写文件
voidclose(void)
关闭文件
voiddel(void)
删除文件
voidlogout(void)
用户登出
voidcommand(void)
命令管理函数
voidrd(void)
删除目录
voidformat(void);
格式化虚拟磁盘
4.2.2函数之间的关系
5.使用说明
1.本程序首次运行(假设当前硬盘目录下还未建立user.txt和hd.dat文件)时会提示找不到user.txt文件,虚拟文件系统不存在,此时程序会提示你是否要建立文件系统,得到你的确认后程序将格式化虚拟磁盘建立虚拟文件系统,并在磁盘当前目录里生成这两个文件。
文件系统建立后便出现用户登录提示。
2.系统首次登录时,当输入用户名和密码后,则提示是否要新建用户。
得到用户确认后即建立了该用户并登录到该用户目录下。
即可在该用户下输入命令进行文件、目录的操作。
3.当文件系统建好后,也有了新的用户,以后就可以用用户名和密码登录该文件系统了。
当再次登录系统时,若输入的用户名不存在,则提示是否要新建用户,得到用户确认后就可以建立新的用户。
当要使用其他用户时,则需要先使用注销用户命令logout退出当前用户,再按提示输入新的用户名和密码进入新的用户。
4.当想要清除该文件系统中所有内容时,可以使用format命令,该命令会象DOS里的format命令一样将你系统中的所有信息全部消除,包括所有用户和所有文件及目录,因此该命令要慎用。
5.以下是实现建立、查看、进入、退出、删除子目录的功能:
6.以下是实现新建、打开、读、写、关闭、删除文件的功能:
7.本文件系统实现了权限管理,任何用户只能访问自己创建的目录和读写自己创建的文件,禁止其他用户访问。
8.exit命令直接退出程序。
(该程序操作要点说明:
要先打开一个文件,然后才能往该文件中写内容。
)
6、总结
模拟实现了Linux文件系统,较好地实现了课程设计的任务和要求及各个功能。
本系统的功能较完善,实现了文件系统的初始建立,格式化操作,用户的切换,用户权限管理,删除目录树等新增加的功能(改进),完整地实现了课程设计所要求的基本功能:
新建用户、文件、目录,删除文件、目录,进入、退出目录,文件的打开、读、写、关闭等。
在检查时,很好的实现了完整地删除目录树的功能,命令提示符中能显示当前的用户和路径,用dir命令查看时能查看文件类型、长度,能统计当前目录下的文件个数及总大小、剩余空间和目录个数,还实现了切换用户的功能、格式化文件系统的功能。
经过两周的共同努力,终于将程序按要求修改完善,使其能实现课程设计要求的基本功能并增加了新的功能(权限管理)。
操作系统是计算机科学与技术专业中的一门重要基础课,目的是让我们了解操作系统的基本概念,理解计算机系统的资源如何组织,操作系统如何有效地管理这些系统资源,用户如何通过操作系统与计算机系统打交道。
通过课程设计,可以进一步理解在计算机系统上运行的其它各类操作系统,并懂得在操作系统的支持下建立自己的应用系统。
操作系统课程设计,对于训练我们掌握程序设计、熟悉上机操作和程序调试技术都有重要作用。
重点培养我们的思维能力、创新能力和排错能力。
通过课程设计,进一步融会贯通教材内容,掌握程序各功能模块的工作原理,相互联系和来龙去脉,完整地建立系统的概念。
激发我的学习热情和主动性,培养我的独立工作能力,在实践活动中,将所学知识综合运用,增长才干,并积累经验。
对编程语言C又有了更深一层次的认识,并对其的编程能力有所加强,但还是很多的不足有待改进,对于编程来说还需要大量的实践,才能在发现问题和解决问题中前进与提高。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 解析