操作系统课程设计报告

发布 2022-10-05 12:15:28 阅读 2156

专业: 计算机科学与技术

班级: xxx

学号: xxx

姓名: xxx

指导教师。2023年 12月 20日。

目录。一、设计题目及要求 - 2 -

1.1、题目 - 2 -

1.2、目的 - 2 -

1.3、要求 - 2 -

1.4、任务 - 2 -

二、设计原理 - 3 -

2.1 总体设计思想 - 3 -

2.2 主要使用的系统接口列表: -3 -

2.3 linux中对fat格式文件属性的定义: -4 -

2.4 程序整体流程图: -4 -

三、开发环境与设备 - 4 -

四、测试结果 - 4 -

五、总结及心得 - 8 -

附录 - 8 -

设计一个简单的文件系统。

掌握linux内核编译的基本步骤和设计简单设备驱动程序的方法。

理解操作系统中调度的概念和调度算法。

理解linux文件管理的知识。

1、本课程设计时间为一周,周一到周五半天时间为集中上机调试,其余时间为学生查阅资料、制定设计方案、编写程序。

2、第一题一至两人一组,第二题和第三题可以一至三人一组,选择设计内容中的课题,或自定课题,但须经过指导教师同意。

3、周二提交设计思路,周五检查任务完成情况,最迟下周一提交设计报告。

4、上课不能迟到、早退。

5、请自觉维护实验室清洁,爱护实验设备。

准备一个u盘,在linux下编写一个用户程序,对u盘上的文件进行管理,要求提供如下一组函数:

1) 设计并实现一个目录列表函数(类似linux的shell命令ls)。该函数只需包含基本命令即可,不必想linux中ls那样有很多命令选项。

2) 设计并实现一个改变目录的函数,即把当前目录切换到上一层目录或当前目录的子目录中(无需处理路径名)。

3) 设计并实现一个删除文件的函数,该函数使用要删除的文件名(在当前目录中)作为参数。该函数需要查找文件,遍历fat中的链接。在删除的情况下,要注意文件的隐藏、只读和系统属性,任何具有这些设置的文件都不能删除。

本实验要求对fat格式的u盘文件系统进行管理,而linux本身提供了很多文件管理接口,本设计利用了这些接口函数进行文件管理,相对直接读取磁盘的fat表,这种方法设计较为简单,实现容易。

getcwd() 获取当前目录路径。

opendir() 打开目录。

chdir() 更改路径。

readdir() 读取目录。

closedir() 关闭目录。

lstat() 获取文件相关信息并放入缓冲区中。

open() 打开文件。

ioctl() 控制文件i/o操作。本设计中使用fat_ioctl_get_attributes 扫描fat文件表并获取相关文件的fat属性。

remove() 删除文件。

close() 关闭文件。

除了系统接口和相关调用之外,还使用了自写的shell命令行界面,快速排序算法和各种显示和排版语句等。

#define attr_ro 1 read-only

#define attr_hidden 2 hidden

#define attr_sys 4 system

#define attr_volume 8 volume label

#define attr_dir 16 directory

#define attr_arch 32 archived

linux 操作系统平台 fedora (2.6.35.9)

eclipse 3.5.2集成开发环境 + eclipse cdt 6.0

linux gcc 前端编译器。

格式化为fat格式的u盘。

4.1 创建测试用例。在windows下将u盘格式化,创建测试文件和目录,并设置相关属性。

4.2 将u盘连接到装有linux系统的计算机,在特权状态下启动程序。

4.3 通过"cd" 命令跳转到u盘根目录,测试cdprog()函数,执行结果正确。

4.4 使用"ls"命令测试lsprog()函数,显示结果正确。

4.5 尝试删除文件,测试rmprog()函数,删除测试成功,含有隐藏、只读和系统属性的文件没有被删除。

4.6 再次使用"ls"命令查看删除结果,并退出程序。

4.7 移除u盘,返回windows系统,验证文件是否被删除。结果正确。

测试全部成功。

操作系统课程设计考察了我们对理论知识的掌握程度和应用能力。同时因为要求在linux下编程,而我们平常使用linux较少,学习多多少少有些困难。在eclipse下编写c++程序,和vc多多少少有些不同,这也给程序编写增加了难度。

最关键的难点在于fat扇区的读写,这和我们以前的实验都不相同,需要很多操作系统底层的知识,为此我们花费了大量的时间用于查阅资料和测试**。不过最终我们还是完成了整个课程设计。

于此同时,我们也发现c++的某些基础知识掌握的还不够好,虽然某些函数没有在课堂上讲过,但是实际确实要求甚至是非常要求熟练掌握这些知识,为此费了不少周折。比如动态申请字符串的内存空间,申请之后没有初始化就直接使用,造成了路径错误。后来使用比较简单的直接覆盖的方法解决了问题。

在实验过程中我们组的3个人协同配合,虽然能力有所差别,但是我们都为课程设计做了力所能及的工作,在此表示感谢。

全部源**

#include ""

#include ""

#include ""

#include ""

#include ""

#include "sys/"

#include "sys/"

#include ""

#include ""

#include ""

#include

#include

#include ""

#include

#define name_size 100

typedef struct item

char name[name_size];

int length;

struct stat st;

struct item *next;

nnode;

#define mark_file(value,flags) (flags) =value)&all_file)|(flags)))

#define del_file(value,flags) (flags) =value))&flags)))

#define mark_info(value,flags) (flags) =value)&stat_all_info)|(flags)))

#define del_info(value,flags) (flags) =value))&flags)))

#define mark(value,flags) (flags) =value)|(flags)))

#define del(value,flags) (flags) =value))&flags)))

#define file_type 0xf8000000

#define oth_file 0x80000000

#define dir_file 0x40000000

#define reg_file 0x20000000

#define bak_file 0x10000000

#define dot_file 0x08000000

#define all_file 0xf8000000

#define stat_all_info 0x07f00000

#define stat_group 0x04000000

#define stat_owner 0x02000000

#define stat_numid 0x01000000

#define stat_size 0x00800000 //0 present bytes 1 present k or m

#define stat_inode 0x00400000

#define stat_time 0x00200000

#define stat_permission 0x00100000

#define stat_color 0x00080000

#define stat_recur 0x00040000

#define stat_hr 0x00020000

void addnnode(nnode **head,char *name,struct stat *st);

void freenode(nnode *head );

操作系统课程设计报告

西安郵電大學。院系名称 计算机学院。专业名称 软件工程。班级 1104 学生姓名 赵大伟。学号 8位 04113124 指导教师 舒新峰。设计起止时间 2013.11.10 2013.11.20 1 通过观察 分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在posix 规范中...

操作系统课程设计报告

课程设计。课程名称操作系统。题目名称多级文件系统 2 学生学院计算机学院 专业班级。学号。学生姓名。指导教师。年月日。目录。一 课程设计 6 二 开发工具及环境 6 三 设计内容 6 四 结构图 8 五 部分 9 六 运行截图 11 七 参考文献 15 八 心得体会 15 本课程设计要求设计一个模拟...

操作系统课程设计报告

实验一进程管理。一 实验目的。1 开发一个函数,建立进程控制块和资源控制块结构,并实现相关数据结构的初始化。2 开发一系列操作,由进程调用这些操作,达到控制进程申请或释放各种资源的目的。通过实验理解进程的概念,进程的组成 pcb结构 进程的并发执行和操作系统进行进程管理的相关原语 主要是进程的创建 ...