操作系统课程设计实验报告剖析

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

西安郵電大學操作系统课程设计报告书院系名称:计算机学院学生姓名:专业名称:班级:学号:时间:1实验目的操作系统是控制和管理计算机硬件和软件资源的虚拟机,其中的文件系统是对软件和设备进行管理的系统,文件系统是操作系统中非常重要的一个模块,它的实现占用了操作系统源码的最大编码量,其好坏也直接影响着用户对操作系统的感受程度。通过对操作系统课程设计的实践,进一步加深对文件系统的认识和理解,并在此基础上培养学生的工程应用能力。实验分别从用户态和内核态两个层次实践文件系统的部分功能。2实验任务2.1ls实现在linux下编程实现带参数的shell命令ls,ls命令必须支持如下功能。1.基本要求(1)支持-l参数;(2)输出结果按字典排序;(3)列出“.”文件,支持-a参数,在没有-a时候不显示隐藏文件;(4)显示记录总数。2.高级要求(1)支持对给定的目录进行操作,如ls/tmp;(2)输出结果分栏排序,每栏的宽度由这一栏最长的文件名决定,显示的栏数还受终端显示器的宽度影响,每一列尽可能的等宽;(3)正确显示文件特殊属性suid、sgid和sticky,参见联机帮助确保程序能处理各种情况;(4)支持标准的ls支持选项-R,它的功能是递归地列出目录中所有的文件包含子目录中的文件;(5)支持标准的ls支持选项-u,它会显示出文件的最后访问时间,如果用了-u而不用-l,会有什么结果?;(6)当关掉一个文件的读权限,就不能打开这个文件来读。如果从一个终端登录,打开一个文件,保持文件的打开状态,然后从另外的终端登录,去掉文件的读权限,这时有什么事情会发生?编写一个程序,先用open()打开一个文件,用read()读一些内容,调用sleep()等待20s以后,再读一些内容,从另外的终端,再等待的20s内去掉文件的读权限,这样会有什么结果?。2.2编写内核模块显示目录或文件的信息。(1)使用内核模块编程;(2)调试《Linux操作系统原理与应用》第8章文件系统P215的例子;(3)练习给内核模块传入参数,参考关于带参数的模块编程;(4)给内核模块传入参数path,其中path为绝对路径;1)当path为目录时,显示目录对应的dentrey结构中的相关信息(可打印的信息);2)当path为文件时,显示文件对应的indoe结构中的相关信息(可打印的信息);3)当路径错误时,有错误提示信息。3开发环境开发环境如下表2.3-1:设备名称设备类型配置类型参数PC-201309291634Pc机硬件配置内存:4G。64位操作系统软件配置Ubuntu虚拟机其他配置无表2.3-14测试环境设备名称设备类型配置类型参数PC-201309291634Pc机硬件配置内存:4G。64位操作系统软件配置Ubuntu虚拟机其他配置无5总体设计5.1功能组织图Ls命令的功能组织图如下图5.1-1:Ls命令运行Ls命令Ls-l命令显示文件特殊属性修改文件权限Ls-a命令Ls指定目录Ls-u命令从一个终端登录,打开一个文件,保持文件的打开状态,然后从另外的终端登录,去掉文件的读权限输出结果按字典排序,输出结果分栏排序,每栏的宽度由这一栏最长的文件名决定,显示的栏数还受终端显示器的宽度影响,每一列尽可能的等宽打印内核信息的功能组织图如下图5.1-2:内核模块传入参数的功能组织图如下图5.1-3:开始运行Sb_block加锁遍历super_block打印文件系统所在主设备号和次设备号打印文件系统名称遍历超级块中节点号打印超级块中节点号给内核传入参数当path为目录时,显示目录对应的dentrey结构中的相关信息当path为文件时,显示文件对应的indoe结构中的相关信息当路径错误时,有错误提示信息5.2原理linux解释:Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统linux下c编程与windows下c编程的区别:C标准都是一样的,但是不同的操作系统下有不同的系统API调用,也有不同的编译器!如果只是做简单的练习,不需要调用系统函数的话,是完全一样的,但是在WINDOWS下编译生成的可执行文件在LINUX下是运行不起来的,要在LINUX下运行必须用LINUX下的编译器,比如GCC,这种编译器可以找到WINDOWS版本的,但是编译出来的就在WINDOWS下运行不了!简单说就是不同操作系统下的可执行文件是不能通用的,因为不同的操作系统有不同的进程结构.文件系统原理:opendir函数的参数为一个绝对路径或者相对路径,返回值为结构体dirent类型的数值或者空值。结构体dirent中包含d_name选项,d_name中是文件名称。Stat函数参数1是文件的绝对路径,参数2是structstat结构体的一个参数,ststat(,&info);返回目录的相关信息,st_mode文件类型st_uid用户(id)st_gid组(id),st_size文件大小st_nlike文件连接数,st_mtime文件最后修改时间st_atime最后访问时间,st_ctime文件属性最后改变时间。在sys/stat.h有如下定义:#defineS_IFMT0170000记录文件的类型#defineS_IFREG0100000regular#defineS_IFDIR0040000directory#defineS_IBLK0060000特殊块#defineS_IFCHR0020000字符块#defineS_IFIFO0010000fifo#defineS_IFLNK0120000文件连接数#defineS_IFSOCK0140000通道if(S_ISDIR(mode))str[0]='d';是设备if(S_ISCHR(mode))str[0]='c';字符设备if(S_ISDIR(mode))str[0]='b';块设备if(S_IRUSR&mode)str[1]='r';可读if(S_IWUSR&mode)str[2]='w';可写if(S_IXUSR&mode)str[3]='x';可执行if(S_IRGRP&mode)str[4]='r';可读if(S_IWGRP&mode)str[5]='w';可写if(S_IXGRP&mode)str[6]='x';可执行if(S_IROTH&mode)str[7]='r';可读if(S_IWOTH&mode)str[8]='w';可写if(S_IXOTH&mode)str[9]='x';可执行。Structpasswd结构体中pw_name用户名,pw_passwd用户密码,pw_uid用户id,pw_gid组id,pw_gecos真是名称pw_dir用户目录pw_shellshell命令。6详细设计6.1.1模块一ls命令实现1.功能①ls-l:每个文件单独占一行,显示文件的详细属性信息②ls-a:显示包括隐藏文件在内的所有文件③ls-u:显示出文件的最后访问时间④ls:显示的文件名按字典顺序排序⑤ls/指定目录:显示当前目录下的内容⑥ls-lu:每个文件单独占一行,显示文件的详细属性信息,并且显示出文件的最后访问时间⑦ls-la:显示包括隐藏文件在内的所有文件的详细属性信息⑧ls-lua:显示包括隐藏文件在内的所有文件的详细属性信息,并且显示出文件的最后访问时间⑨chmod权限文件名:修改文件的权限,并且显示出此文件是否受suid,sgid和sticky的控制⑩chmod权限(3位)在一终端运行程序,读取文件信息,在另一终端修改文件权限,看结果。6.1.2模块一ls命令实现①编写内核模块,打印super_block结构中一些域的值。(课本上的例子)遍历系统中的超级块:list_head结构类型的字段名称为s_list。list_entry宏通过指向list_head节点的地址来得到外部超级块的首地址。获取系统中个超级块的地址,获得某个子进程的地址,打印文件系统所在的主设备号和次设备号和文件系统名。遍历打印每个超级块中的所有索引节点号,打印索引结点。②给内核模块传入参数path,其中path为绝对路径path=路径时,显示如下信息:1.哈希表2.目录项名3.短目录名4.目录项标志5.目录项长度6.目录项计数器的引用path=文件时,显示如下信息:1.版本号2.用户组ID3.用户ID4.硬链接数5.引用记数6.文件大小7.文件的块数8.文件类型和权限9.索引节点的状态10.以位为单位的块大小11.文件索引节点的数量12.指定文件系统的读写访问标志2.算法/流程图实现ls命令功能流程图如下:ls命令输入参数lsls-als-lls-uls-rLs指定目录修改文件权限输出结果按字典排序输出当前目录文件,下级目录输出当前目录所有文件目录输出当前目录,详细信息输出当前目录,及下级目录显示文件的最后访问时间输出指定目录从一个终端登录,打开一个文件,保持文件的打开状态,然后从另外的终端登录,去掉文件的读权限Ls命令结束内核模块:打印super_block结构中的一些域的值。否是给内核模块传入参数path流程图,其中path为绝对路径;当path为目录时,显示目录对应的dentrey结构中的相关信息;当path为文件时,显示文件对应的indoe结构中的相关信息;当路径错误时,有错误提示信息。开始加锁遍历节点打印文件系统所在设备的主设备号和次设备号打印文件系统名遍历,打印索引节点号结束尾节点否是否是开始输入的是目录打印dentrey结构体信息输入的是目录错误打印dentrey结构体信息打印错误信息结束3.运行结果(一)lsls-l(1):ls-l以长格式的形式查看当前目录下所有文件ls-a(2):ls-a将隐藏文件显示出来,并按照字典进行排序ls-R(3):ls-R递归地列出目录中所有的文件包含子目录中的文件ls-u(4):ls-u根据文件最后显示时间列出对给定目录进行操作:1)如./ls/tmp(5)2)对绝对路径目录进行操作:./ls/home/weiyue/linux(6)3)对相对路径目录进行操作:./ls../linux(7)读权限:1)先显示正常情况下:(8)2)再执行一次,然后在另外一个终端里修改文件的权限:chmod000abc.txt(9)然后观察结果:再执行一次,观察结果:(11)(二)内核测试结果:1)调试P215,观察数据结构中的数据:(12)进行内核操作时要在root权限下2)给内核模块传入参数path,其中path为绝对路径:1.当path为目录时,显示目录对应的dentrey结构中的相关信息(可打印的信息);2.当path为文件时,显示文件对应的indoe结构中的相关信息(可打印的信息);3.当路径错误时,有错误提示信息4.模块使用的主要函数、数据类型和宏(1)主要函数说明1)函数do_ls();原型;voiddo_ls(chardirname[],intchoose,intabcd)功能:输出当前目录,或者指定目录(默认当前目录)的所有文件的信息,结果按字典排序。先按文件名称长度排序,相等长度的名称的按字典排序,无论中文名称的长度是多少,统一排在最后一个英文名称的文件后面,中文名称的文件名称按长度排序,相等长度的按字典排序。参数:chardirname[],含有文件名称的字符串,abcd,选项选择输出详细信息或不输出相信信息返回值:void2)函数do_ls();原型:voiddo_ls(char*);功能:根据参数进行ls命令功能实现返回值:void3)函数file_info();原型:voidfile_info(char*filename,structstat*info_p)功能:

1 / 17
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功