操作系统课程设计

发布 2022-10-05 11:05:28 阅读 2084

西安郵電大學。

报告书。1 实验目的。

操作系统是控制和管理计算机硬件和软件资源的虚拟机,其中的文件系统是对软件和设备进行管理的系统,文件系统是操作系统中非常重要的一个模块,它的实现占用了操作系统源码的最大编码量,其好坏也直接影响着用户对操作系统的感受程度。通过对操作系统课程设计的实践,进一步加深对文件系统的认识和理解,并在此基础上培养学生的工程应用能力。实验分别从用户态和内核态两个层次实践文件系统的部分功能。

2 实验任务。

2.1 ls实现。

在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 开发环境。

4 测试环境。

5 总体设计。

5.1功能组织图。

图1-1ls是用来列出目录下的文件。

ls-l列出文件的详细信息,如创建者,创建时间,文件的读写权限列表等等。

ls-a列出文件下所有的文件,包括以“.“开头的隐藏文件(linux下文件隐藏文件是以。开头的,如果存在。代表存在着父目录)

ls-l-a和ls-a-l列出文件的详细信息,如创建者,创建时间,文件的读写权限列表等等,包括以“.“开头的隐藏文件。

ls-r将目录下所有的子目录的文件都列出来,相当于我们编程中的“递归”实现。

ls-u显示访问时间但根据名称排序。

5.2原理。

文件是文件系统对数据的分割单元。文件系统用目录来组织文件,予文件以上下分级的结构。在硬盘上实现这一分级结构的关键,是使用inode来虚拟普通文件和目录文件对象。

在linux文件管理中,我们知道,一个文件除了自身的数据之外,有一个附属信息,即文件的元数据(metadata)。这个元数据用于记录文件的许多信息,比如文件大小,拥有人,所属的组,修改日期等等。元数据并不包含在文件的数据中,而是由操作系统维护的。

事实上,这个所谓的元数据就包含在inode中。我们可以用$ls -l filename来查看这些元数据。正如我们上面看到的,inode所占据的区域与数据块的区域不同。

每个inode有一个唯一的整数编号(inode number)表示。

在保存元数据,inode是“文件”从抽象到具体的关键。正如上一节中。

到的,inode储存由一些指针,这些指针指向存储设备中的一些数据块,文件的内容就储存在这些数据块中。当linux想要打开一个文件时,只需要找到文件对应的inode,然后沿着指针,将所有的数据块收集起来,就可以在内存中组成一个文件的数据了。

6 详细设计。

6.1 模块一参数处理。

1.功能。处理输入的参数。

2.算法/流程图。

3.运行结果。

4.模块使用的主要函数、数据类型和宏。

1)主要函数说明。

1)函数一。

原型:main(int ac, char ***)

功能:用来列出目录下的文件。

参数:无。返回值:void

6.2 模块二 ls

1.功能:具体实现ls

2.算法/流程图。

首先,我们使用opendir函数打开目录a,返回指向目录a的dir结构体c。

接着,我们调用readdir( c)函数读取目录a下所有文件(包括目录),返指向目录a下所有文件的dirent结构体d。

然后,我们遍历d,调用stat(d->name,stat *e)来获取每个文件的详细信息,存储在stat结构体e中。

3.运行结果。

ls-r4.模块使用的主要函数、数据类型和宏。

1)主要函数说明。

1)函数一。

原型:void ls(char)

功能:用来列出目录下的文件。

参数:char

返回值:void

2)数据类型。

1)数据类型1

名称:maxlen

类型:int

含义:最长文件名。

2)数据类型2

名称:fn类型:int

含义:文件数量。

3)数据类型3

名称:le**e_len

类型:int

含义:文件名长度。

3)宏。名称:filemaxsize

含义:文件名长度。

名称:maxrowlen

含义:输出宽度。

2)函数二。

原型:void ls_r(char)

功能:用来列出目录下的所有文件。

参数:char

返回值:void

2)数据类型。

1)数据类型1

名称:direntp

类型:struct dirent *

含义:目录流指针。

2)数据类型2

名称:dir_ptr

类型:dir *

含义:记录打开的目录的信息。

3)数据类型3

名称:info

类型:struct stat

含义:记录文件的属性。

3)函数三。

原型:void ls_u(char)

功能:显示文件的访问时间。

参数:char

返回值:void

2)数据类型。

1)数据类型1

名称:direntp

类型:struct dirent *

含义:目录流指针。

2)数据类型2

名称:dir_ptr

类型:dir *

含义:记录打开的目录的信息。

3)数据类型3

名称:info

类型:struct stat

含义:记录文件的属性。

4)数据类型4

名称:fullpath

类型:char *

含义:记录文件的绝对路径。

4)函数四。

原型:void ls_a(char)

功能:显示隐藏文件。

参数:char

返回值:void

2)数据类型。

1)数据类型1

名称:direntp

类型:struct dirent *

含义:目录流指针。

2)数据类型2

名称:dir_ptr

类型:dir *

含义:记录打开的目录的信息。

4)数据类型4

名称:fullpath

类型:char *

含义:记录文件的绝对路径。

5)函数五。

原型:void ls_l_a(char)

功能:显示隐藏文件的信息。

参数:char

返回值:void

2)数据类型。

1)数据类型1

名称:direntp

类型:struct dirent *

含义:目录流指针。

2)数据类型2

名称:dir_ptr

类型:dir *

含义:记录打开的目录的信息。

3)数据类型3

名称:info

类型:struct stat

含义:记录文件的属性。

4)数据类型4

名称:fullpath

类型:char *

含义:记录文件的绝对路径。

6)函数六。

原型:void ls_l(char)

功能:显示文件的信息。

参数:char

返回值:void

2)数据类型。

1)数据类型1

名称:direntp

类型:struct dirent *

含义:目录流指针。

2)数据类型2

名称:dir_ptr

类型:dir *

含义:记录打开的目录的信息。

3)数据类型3

名称:info

类型:struct stat

含义:记录文件的属性。

4)数据类型4

名称:fullpath

类型:char *

含义:记录文件的绝对路径。

7)函数七。

原型:void sort(char title[filemaxsize],int n);

功能:对文件名进行字典排序。

参数:char title[filemaxsize],int n

返回值:void

2)数据类型。

1)数据类型1

名称:i,j,k

类型:int

含义:循环变量。

8)函数八。

原型:void dostat(char *fullpath, char *filename);

功能:读取文件属性之前的判断,判断是否可以读取。

参数:char *fullpath, char *filename

返回值:void

2)数据类型。

1)数据类型1

名称:info

类型:struct stat

含义:记录文件的属性。

9)函数九。

原型:void dostat_u(char *fullpath, char *filename);

功能:读取将要显示访问时间的文件属性之前的判断,判断是否可以读取。

参数:char *fullpath, char *filename

返回值:void

2)数据类型。

1)数据类型1

名称:info

类型:struct stat

含义:记录文件的属性。

10)函数十。

原型:void stat(char *fullpath, struct stat *info);

操作系统课程设计

课程设计 河北大学工商学院。装。订。线。操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专 操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专业计算机类 学号 姓名。指导教师。年 6 月 24 日。设备管理 2 2.1设计任务2 2.2设计要求...

操作系统课程设计

银行家算法模拟。系别 班级 组员 银行家算法模拟。1.课程设计目的。通过本次课程设计,加深对最经典的避免死锁的银行家算法的理解,掌握死锁形成必要条件 安全状态等概念的理解,通过用c语言编程模拟该算法,并在windows平台上实现,更好地掌握操作系统的原理及实现方法。2.任务及要求。设n为系统进程的个...

操作系统课程设计

学生实习实训报告。实习类型 操作系统课程设计 学号 0901110005 学生姓名 田兴杰 指导教师 曹春梅 专业班级 信息安全技术0901班 院 部 电子信息系 2011年 1 月 7日。实习实训成绩评定表。目录。目录3 摘要4关键字4 1.1虚拟机简介5 1.1.1 一般意义的虚拟机5 1.1....