专业: 计算机科学与技术
班级: 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结构 进程的并发执行和操作系统进行进程管理的相关原语 主要是进程的创建 ...