操作系统课程设计--二级文件系统(java)

合集下载

操作系统课程设计

操作系统课程设计

操作系统课程设计一、课程目标知识目标:1. 理解操作系统的基本概念、功能、类型和结构,掌握操作系统的五大核心功能模块(处理器管理、存储器管理、设备管理、文件管理、用户接口);2. 掌握操作系统的发展历程、主要操作系统(如Windows、Linux、Mac OS)的特点及应用场景;3. 了解操作系统的设计与实现原理,包括进程管理、内存管理、设备管理、文件系统等关键技术;4. 学会使用操作系统提供的命令行或图形界面进行基本的系统操作与维护。

技能目标:1. 培养学生对操作系统的实际操作能力,能够熟练使用至少一种操作系统进行日常管理与维护;2. 培养学生运用操作系统原理解决实际问题的能力,如分析系统性能、诊断故障、优化配置等;3. 提高学生的编程能力,使其能够编写简单的系统程序或脚本,实现特定功能。

情感态度价值观目标:1. 培养学生对操作系统的兴趣,激发学生学习计算机科学的热情;2. 培养学生的团队合作意识,使其在讨论、分析、解决问题的过程中学会倾听、交流、协作;3. 培养学生具备良好的信息素养,关注操作系统领域的最新发展,增强信息安全意识。

课程性质:本课程为计算机科学与技术专业(或相关领域)的必修课,具有较强的理论性和实践性。

学生特点:学生已具备一定的计算机基础知识,具有较强的学习兴趣和动手能力,但可能对操作系统原理的理解和应用尚有不足。

教学要求:注重理论与实践相结合,以案例驱动、任务导向的方式进行教学,注重培养学生的实际操作能力和问题解决能力。

通过本课程的学习,使学生能够掌握操作系统的基本原理,提高实际应用水平,为后续专业课程学习打下坚实基础。

二、教学内容1. 操作系统概述:介绍操作系统的基本概念、功能、类型,比较不同操作系统的特点,分析操作系统的发展趋势。

教材章节:第一章 操作系统概述2. 进程与线程管理:讲解进程与线程的概念、状态与转换,进程调度算法,同步与互斥,死锁与饥饿问题。

教材章节:第二章 进程管理3. 存储管理:介绍内存分配与回收策略,虚拟内存技术,页面置换算法,内存保护机制。

《操作系统》课程设计

《操作系统》课程设计

《操作系统》课程设计一、课程目标知识目标:1. 让学生掌握操作系统的基本概念,包括进程、线程、内存管理、文件系统等核心知识;2. 了解操作系统的历史发展,掌握不同类型操作系统的特点及使用场景;3. 掌握操作系统的性能评价方法和常用的调度算法。

技能目标:1. 培养学生运用操作系统知识解决实际问题的能力,如分析系统性能瓶颈、优化系统资源分配等;2. 培养学生具备基本的操作系统编程能力,如进程创建、线程同步、文件操作等;3. 提高学生的团队协作能力和沟通能力,通过小组讨论和项目实践,学会共同解决问题。

情感态度价值观目标:1. 培养学生对操作系统学科的兴趣,激发学生的学习热情,使其形成积极向上的学习态度;2. 培养学生具备良好的信息素养,尊重知识产权,遵循法律法规;3. 培养学生的创新精神和批判性思维,敢于质疑、勇于探索,形成独立思考的能力。

课程性质:本课程为计算机科学与技术专业的核心课程,旨在让学生掌握操作系统的基本原理和实现方法,提高学生的系统分析和编程能力。

学生特点:学生具备一定的编程基础和计算机系统知识,具有较强的逻辑思维能力和动手实践能力。

教学要求:结合学生特点和课程性质,注重理论与实践相结合,通过案例分析和项目实践,帮助学生将所学知识内化为具体的学习成果。

在教学过程中,关注学生的学习进度和反馈,及时调整教学策略,确保课程目标的实现。

二、教学内容1. 操作系统概述:介绍操作系统的定义、发展历程、功能、类型及特点,对应教材第一章内容。

- 操作系统的起源与发展- 操作系统的功能与类型- 操作系统的主要特点2. 进程与线程:讲解进程与线程的概念、状态、调度算法,对应教材第二章内容。

- 进程与线程的定义与区别- 进程状态与转换- 进程调度算法3. 内存管理:分析内存管理的基本原理、策略和技术,对应教材第三章内容。

- 内存分配与回收策略- 虚拟内存技术- 页面置换算法4. 文件系统:介绍文件系统的基本概念、结构、存储原理,对应教材第四章内容。

操作系统课程设计-一个简单的文件系统的详细设计

操作系统课程设计-一个简单的文件系统的详细设计

计算机系课程设计实验报告课程名称操作系统课程设计实验学期 2012 至 2013 学年第 1 学期学生所在系部计算机与信息管理系年级 2010 专业班级计算机001班学生姓名学号任课教师实验成绩计算机系制一个简单的文件系统的详细设计一、实验目的(1)阅读并调试一个简单的文件系统,模拟文件管理的工作过程。

从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。

(2)了解设计一个n个用户的文件系统,每个用户可以保存M个文件。

用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有create、delete、open、close、read、write等命令。

二、实验要求1、阅读所给文件系统源程序,并加注释(注释量达60%),2、修改、完善该系统,画出所设计的文件系统的详细流程图。

三、文件系统功能设计1. 功能设计该文件系统是一个多用户、多任务的文件系统。

对用户和用户的文件数目并没有上限。

也就是说该系统允许任何用户申请空间,而且在其目录下的文件数目并不做任何的限制。

该系统可以支持的操作命令如下:①bye——用户注销命令。

当使用该命令时,用户退出系统,注销该用户功能设计并回到登陆界面。

命令格式:bye②close——删除用户注册信息命令。

执行该命令后,用户在系统中的所有信息,包括该用户目录下的所有文件都被删除。

命令执行完成后返回登陆界面。

命令格式:close③create——在当前目录下创建一个文件,且该文件不能跟当前已有的文件重名。

该文件的管理信息登记在用户文件信息管理模块中。

执行完该命令后回到执行命令行。

命令格式:create>file1其中:“>”符为提示符,file1为要创建的文件名。

④delete——删除当前用户目录下的一个文件,命令执行完毕返回至命令行。

命令格式:delete>file1其中:file1为要删除的文件名。

⑤list——显示当前注册目录下的所有文件信息,包括文件名、文件长度、文件操作权限。

操作系统课程设计二级文件系统

操作系统课程设计二级文件系统

#include<stdio.h>#include<string.h>#include<stdlib.h>//#include <time.h>int N=0; //记录用户数目struct MFILE{ //文件表char filename[19];char content[1000];//char filecha_time[18];int fileflag;};struct DIR{ //目录表char dirname[19];MFILE file[100];int filenum;int coflag;//char dircha_time[18];};struct USER{ //用户表char name[5];char password[5];DIR dir[100];int dirnum;} user[10];int check(char* name,char* password,int &userlo);void enter_dir(int userlo);void show_dir(int userlo);int open_dir(int userlo,char* ch1,int &filelo);void create_dir(int userlo,char* ch1);void delete_dir(int userlo,char* ch1);void re_dirname(int userlo,char* ch1,char* ch2);void enter_file(int userlo,int filelo);void show_file(int userlo,int filelo);void open_file(int userlo,char* ch1,int filelo);void close_file(int userlo,char* ch1,int filelo);void read_file(int userlo,char* ch1,int filelo);void create_file(int userlo,char* ch1,char* ch2,int filelo); void delete_file(int userlo,char* ch1,int filelo);void re_filename(int userlo,char* ch1,char* ch2,int filelo);void add_filestr(int userlo,char* ch1,char* ch2,int filelo);//char* nowtime();void main(){FILE *fp=fopen("user.txt","r+");while(!feof(fp)){ //用户文件读入到用户顺序表char name[5];char password[5];fscanf(fp,"%s%s",name,password);strcpy(user[N].name,name);strcpy(user[N].password,password);user[N].dirnum=0;N++;}while(1){char name[19];char password[19];printf("请登录:\n");printf("用户名->");scanf("%s",name);printf("密码->");scanf("%s",password);int userlo; //用户标识if(check(name,password,userlo)==1){enter_dir(userlo);}else printf("用户名或密码错误!\n");}}int check(char* name,char* password,int &userlo){for(int i=0;i<N;i++){if(strcmp(user[i].name,name)==0&&strcmp(user[i].password,password)==0) {userlo=i;printf("登陆成功!\n");printf("输入help获得帮助列表\n");return 1;}elsei++;}return 0;}void enter_dir(int userlo){biaohao:while(1){char action[19];char ch1[19];char ch2[19];printf("->");if(scanf("%s",action)&&strcmp(action,"help")==0){printf("*****************************************\n"); //printf("* help 帮助!*\n");printf("* dir 显示目录!*\n");printf("* open name 打开目录!*\n");printf("* create 目录名创建新目录!*\n");printf("* delete 目录名删除目录! *\n");printf("* rename 旧名称新名称为目录重命名!*\n");printf("* quit 退出登陆!*\n");printf("*****************************************\n"); }else if(strcmp(action,"dir")==0){show_dir(userlo);}else if(strcmp(action,"quit")==0){break;}else if(strcmp(action,"open")==0){scanf("%s",&ch1);int filelo;if(open_dir(userlo,ch1,filelo)==0){printf("目录打开成功!\n");printf("输入help获得帮助列表\n");open_dir(userlo,ch1,filelo);enter_file(userlo,filelo);}elsegoto biaohao;}else if(strcmp(action,"create")==0){scanf("%s",&ch1);create_dir(userlo,ch1);}else if(strcmp(action,"delete")==0){scanf("%s",&ch1);delete_dir(userlo,ch1);}else if(strcmp(action,"rename")==0){scanf("%s%s",&ch1,&ch2);re_dirname(userlo,ch1,ch2);}else{printf("%s不是系统内部命令!\n",action); }}}void show_dir(int userlo){if(user[userlo].dirnum==0){printf("目录为空!\n");return;}printf("目录名\n");for(int i=0;i<user[userlo].dirnum;i++){//printf("%-26s\n",user[userlo].dir[i].dirname);printf(user[userlo].dir[i].dirname);printf(" \n");}}int open_dir(int userlo,char* ch1,int &filelo){for(int i=0;i<user[userlo].dirnum;i++){if(strcmp(user[userlo].dir[i].dirname,ch1)==0){user[userlo].dir[i].coflag=1;filelo=i;return 0;// printf("目录打开成功!\n");//printf("输入help获得帮助列表\n");}}printf("该目录不存在!\n");return 1;}void create_dir(int userlo,char* ch1){for(int i=0;i<user[userlo].dirnum;i++){if(strcmp(user[userlo].dir[i].dirname,ch1)==0){printf("有同名用户存在!\n");return;}}strcpy(user[userlo].dir[user[userlo].dirnum].dirname,ch1);user[userlo].dir[user[userlo].dirnum].coflag=0;user[userlo].dir[user[userlo].dirnum].filenum=0;user[userlo].dirnum++;printf("目录创建成功!\n");}void delete_dir(int userlo,char* ch1){int dflag=-1;for(int i=0;i<user[userlo].dirnum;i++){if(strcmp(user[userlo].dir[i].dirname,ch1)==0){dflag=i;break;}}if(dflag==-1){printf("该目录不存在!\n");}else{for(int j=i;j<user[userlo].dirnum-1;j++){strcpy(user[userlo].dir[j].dirname,user[userlo].dir[j+1].dirname);for(int k=0;k<user[userlo].dir[j+1].filenum;k++){strcpy(user[userlo].dir[j].file[k].filename,user[userlo].dir[j+1].file[k].filename);strcpy(user[userlo].dir[j].file[k].content,user[userlo].dir[j+1].file[k].content);user[userlo].dir[j].file[k].fileflag=user[userlo].dir[j+1].file[k].fileflag;}user[userlo].dir[j].filenum=user[userlo].dir[j+1].filenum;user[userlo].dir[j].coflag=user[userlo].dir[j+1].coflag;}printf("删除成功!\n");user[userlo].dirnum--;}}void re_dirname(int userlo,char* ch1,char* ch2){for(int i=0;i<user[userlo].dirnum;i++){if(strcmp(user[userlo].dir[i].dirname,ch1)==0){for(int j=0;j<user[userlo].dirnum;j++){if(strcmp(user[userlo].dir[j].dirname,ch2)==0){printf("你更换的新目录名已经存在!");return;}}strcpy(user[userlo].dir[i].dirname,ch2);printf("重名名成功!\n");return;}}printf("无此目录!无法重命名!\n");}void enter_file(int userlo,int filelo){while(1){char action[19];char ch1[19];char ch2[19];printf("->");if(scanf("%s",action)&&strcmp(action,"help")==0){printf("---------------------———————————\n");//printf("* help 帮助!*\n");printf("- dir 显示文件列表!-\n");printf("- open 文件名打开文件!-\n");printf("- read 文件名读取文件!-\n");printf("- create 文件名文件内容创建新文件!-\n");printf("- delete 文件名删除文件! -\n");printf("- rename 旧文件名新文件名为文件重命名!-\n");printf("- addstr 文件名更新内容更新文件!-\n");printf("- ... 返回上一层!-\n");//printf("- quit 退出登陆!-\n");printf("----------------------———————————\n");}else if(strcmp(action,"dir")==0){show_file(userlo,filelo);}// else if(strcmp(action,"quit")==0)// {// break;// }else if(strcmp(action,"...")==0){break;}else if(strcmp(action,"open")==0){scanf("%s",&ch1);open_file(userlo,ch1,filelo);}else if(strcmp(action,"close")==0){scanf("%s",&ch1);close_file(userlo,ch1,filelo);}else if(strcmp(action,"read")==0){scanf("%s",&ch1);read_file(userlo,ch1,filelo);}else if(strcmp(action,"create")==0){//scanf("%s%s",&ch1,&ch2);scanf("%s\n",&ch1);scanf("%s",&ch2);create_file(userlo,ch1,ch2,filelo);}else if(strcmp(action,"delete")==0){scanf("%s",&ch1);delete_file(userlo,ch1,filelo);}else if(strcmp(action,"rename")==0){scanf("%s%s",&ch1,&ch2);re_filename(userlo,ch1,ch2,filelo);}else if(strcmp(action,"addstr")==0){scanf("%s%s",&ch1,&ch2);add_filestr(userlo,ch1,ch2,filelo);}else{printf("%s不是系统内部命令!\n",action);return;}}}void show_file(int userlo,int filelo){if(user[userlo].dir[filelo].filenum==0){printf("无文件!\n");return;} printf("文件名\n");for(int i=0;i<user[userlo].dir[filelo].filenum;i++){printf("%-26s",user[userlo].dir[filelo].file[i].filename);//printf("%-26s\n",user[userlo].dir[filelo].file[i].filecha_time);}}void open_file(int userlo,char* ch1,int filelo){for(int i=0;i<user[userlo].dir[filelo].filenum;i++){if(strcmp(user[userlo].dir[filelo].file[i].filename,ch1)==0){if(user[userlo].dir[filelo].file[i].fileflag==1){printf("该文件已经打开!\n");return;}else{user[userlo].dir[filelo].file[i].fileflag=1;printf("打开成功!\n");return;}}}printf("该文件不存在!\n");}void close_file(int userlo,char* ch1,int filelo){for(int i=0;i<user[userlo].dir[filelo].filenum;i++){if(strcmp(user[userlo].dir[filelo].file[i].filename,ch1)==0){ if(user[userlo].dir[filelo].file[i].fileflag==0){printf("该文件未打开!\n");return;}else{user[userlo].dir[filelo].file[i].fileflag=0;return;}}}printf("你要关闭的文件文件不存在!\n");}void read_file(int userlo,char* ch1,int filelo){for(int i=0;i<user[userlo].dir[filelo].filenum;i++){if(strcmp(user[userlo].dir[filelo].file[i].filename,ch1)==0){ if(user[userlo].dir[filelo].file[i].fileflag==0){printf("请先打开该文件,然后在读取!\n");return;}else{printf("%s\n",user[userlo].dir[filelo].file[i].content);return;}}}printf("该文件不存在!");return;}void create_file(int userlo,char* ch1,char* ch2,int filelo){for(int i=0;i<user[userlo].dir[filelo].filenum;i++){if(strcmp(user[userlo].dir[filelo].file[i].filename,ch1)==0){printf("有同名文件存在!\n");return;}}printf("输入内容\n");//strcpy(user[userlo].dir[filelo].file[user[userlo].dir[filelo].filenum].filecha_time,nowtime());strcpy(user[userlo].dir[filelo].file[user[userlo].dir[filelo].filenum].filename,ch1);strcpy(user[userlo].dir[filelo].file[user[userlo].dir[filelo].filenum].content,ch2);user[userlo].dir[filelo].file[user[userlo].dir[filelo].filenum].fileflag=0;user[userlo].dir[filelo].filenum++;printf("文件创建成功\n");}void delete_file(int userlo,char* ch1,int filelo){int mflag=-1;for(int i=0;i<user[userlo].dir[filelo].filenum;i++){if(strcmp(user[userlo].dir[filelo].file[i].filename,ch1)==0){mflag=i;break;}}if(mflag==-1){printf("该文件不存在!\n");}else{if(user[userlo].dir[filelo].file[mflag].fileflag==1){printf("删除前请先关闭文件");return;}else{for(int j=i;j<user[userlo].dir[filelo].filenum-1;j++){strcpy(user[userlo].dir[filelo].file[j].filename,user[userlo].dir[filelo].file[j+1].filename); //strcpy(user[userlo].dir[filelo].file[j].filecha_time,user[userlo].dir[filelo].file[j+1].filecha_time);strcpy(user[userlo].dir[filelo].file[j].content,user[userlo].dir[filelo].file[j+1].content);user[userlo].dir[filelo].file[j].fileflag=user[userlo].dir[filelo].file[j+1].fileflag;}printf("删除成功!\n");user[userlo].dir[filelo].filenum--;}}}void re_filename(int userlo,char* ch1,char* ch2,int filelo){for(int i=0;i<user[userlo].dir[filelo].filenum;i++){if(strcmp(user[userlo].dir[filelo].file[i].filename,ch1)==0){for(int j=0;j<user[userlo].dir[filelo].filenum;j++){if(strcmp(user[userlo].dir[filelo].file[j].filename,ch2)==0){printf("你要更换的新文件名已经存在!\n");return;}}strcpy(user[userlo].dir[filelo].file[i].filename,ch2);//strcpy(user[userlo].dir[filelo].file[i].filecha_time,nowtime());printf("重名名成功!\n");return;}}printf("无此文件!无法重命名!\n");}void add_filestr(int userlo,char* ch1,char* ch2,int filelo){for(int i=0;i<user[userlo].dir[filelo].filenum;i++){if(strcmp(user[userlo].dir[filelo].file[i].filename,ch1)==0){if(user[userlo].dir[filelo].file[i].fileflag==0){printf("请先打开文件再进行更新!\n");return;}else{strcat(user[userlo].dir[filelo].file[i].content,ch2);//strcpy(user[userlo].dir[filelo].file[i].filecha_time,nowtime());printf("更新成功!\n");return;}}}printf("无此文件!无法更新!\n");}//char* nowtime(){// time_t t = time(0);// char tmp[64];// strftime( tmp, sizeof(tmp), "%Y/%m/%d %X",localtime(&t) ); // return (char*)tmp;//}。

操作系统课程设计-模拟一个简单二级文件管理系统

操作系统课程设计-模拟一个简单二级文件管理系统

模拟一个简单二级文件管理系统设计目的:通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。

设计内容:模拟一个简单二级文件管理系统一、实验内容描述1 实验目标本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现.2 实验要求为DOS系统设计一个简单的二级文件系统.要求做到以下几点:①可以实现下列命令:login 用户登录dir 列文件目录create 创建文件delete 删除文件open 打开文件close 关闭文件read 读文件write 写文件②列目录时要列出文件名、物理地址、保护码和文件长度.③源文件可以进行读写保护.二、程序主要内容1设计思路程序中要求每个用户在登陆后才可对其拥有的文件进行操作,用户对于其他用户的文件无操作权.文件操作包括浏览、创建、删除、打开、关闭、阅读、写入、修改模式.其他操作包括新建用户、帮助、用户登入、用户登出、退出系统.在程序文件夹下有个名为“file”的系统根目录,此目录下包括:一个名为“mfd”的文件,记录所有注册过的帐号及密码;用户文件,以用户名作为文件名,内容为其拥有的文件名及属性;一个名为“keiji”的文件夹.“keiji”文件夹中包括:“file.p”指针文件,记录所有已用的物理地址;一些以物理地址为名的文件,内容为文件内容.2 数据结构file结构体系统文件数据结构:fpaddrint,文件的物理地址、flengthint,文件长度、fmodeint,文件模式0.只读;1.可写;2.可读写;3.保护、fname[]char,文件名;filemode结构体文件状态数据结构:isopenint,文件当前状态,0.关闭;1.打开、modeint,文件模式0.只读;1.可写;2.可读写;3.初始化;user结构体用户信息数据结构:uname[]char,用户名、upassword[]char,用户密码;userfile结构体用户文件数据结构:uname[]char,用户名、ufile[]file,用户拥有的文件数组.代码:#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <time.h>#include <string.h>#define MaxUser 100 //定义最大MDF主目录文件#define MaxDisk 512*1024 //模拟最大磁盘空间#define commandAmount 12 //对文件操作的指令数//存储空间管理有关结构体和变量char disk[MaxDisk]; //模拟512K的磁盘存储空间typedef struct distTable //磁盘块结构体{int maxlength;int start;int useFlag;distTable *next;}diskNode;diskNode *diskHead;struct fileTable //文件块结构体{char fileName[10];int strat; //文件在磁盘存储空间的起始地址int length; //文件内容长度int maxlength; //文件的最大长度char fileKind[3]; //文件的属性——读写方式struct tm *timeinfo;bool openFlag; //判断是否有进程打开了该文件//fileTable *next;};//两级目录结构体typedef struct user_file_directory //用户文件目录文件UFD {//char fileName[10];fileTable *file;user_file_directory *next;}UFD;//UFD *headFile;typedef struct master_file_directory //主文件目录MFD{char userName[10];char password[10];UFD *user;}MFD;MFD userTable[MaxUser];int used=0; //定义MFD目录中用已有的用户数//文件管理void fileCreate(char fileName[],int length,char fileKind[]); //创建文件void fileWrite(char fileName[]); //写文件void fileCat(char fileName[]); //读文件void fileRen(char fileName[],char rename[]); //重命名文件void fileFine(char fileName[]); //查询文件void fileDir(char UserName[]); //显示某一用户的所有文件void fileClose(char fileName[]); //关闭已打开的文件void fileDel(char fileName[]); //删除文件void chmod(char fileName[],char kind[]); //修改文件的读写方式int requestDist(int &startPostion,int maxLength); //磁盘分配查询void initDisk(); //初始化磁盘void freeDisk(int startPostion); //磁盘空间释放void diskShow(); //显示磁盘使用情况//用户管理void userCreate();int login();int userID=-1; //用户登录的ID号,值为-1时表示没有用户登录int main(){char order[commandAmount][10];strcpy(order[0],"create");strcpy(order[1],"rm");strcpy(order[2],"cat");strcpy(order[3],"write");strcpy(order[4],"fine");strcpy(order[5],"chmod");strcpy(order[6],"ren");strcpy(order[7],"dir");strcpy(order[8],"close");strcpy(order[9],"return");strcpy(order[10],"exit");strcpy(order[11],"df");charcommand[50],command_str1[10],command_str2[10],command_str3[5],command_str4[3];int i,k,j;int length;initDisk(); //初始化磁盘for(i=0;i<MaxUser;i++) //初始化用户UFD目录文件的头指针{userTable[i].user=(UFD *)malloc(sizeof(UFD));userTable[i].user->next=NULL;}while(1){printf("********************************************\n");printf(" 1、Creat user\n");printf(" 2、login\n");printf("********************************************\n");printf("Please chooce the function key:>");int choice;scanf("%d",&choice);if(choice==1) userCreate();else if(choice==2) userID=login();else printf("您的输入有误,请重新选择\n");while(userID!=-1){fflush(stdin);printf("———————————————————————————————————————\n");printf(" create-创建格式:create a1 1000 rw,将创建名为a1,长度为1000字节可读可写的文件\n");printf(" rm-删除格式:rm a1,将删除名为a1的文件\n");printf(" cat-查看文件内容格式:cat a1,显示a1的内容\n");printf(" write-写入格式:write a1\n");printf(" fine-查询格式:fine a1 ,将显示文件a1的属性\n");printf(" chmod-修改格式:chmod a1 r,将文件a1的权限改为只读方式\n");printf(" ren-重命名格式:ren a1 b1 ,将a1改名为b1\n");printf(" dir-显示文件格式:dir aaa,将显示aaa用户的所有文件\n");printf(" df-显示磁盘空间使用情况格式:df\n");printf(" close-关闭文件格式:close a1,将关闭文件a1\n");printf(" return-退出用户,返回登录界面\n");printf(" exit-退出程序\n");printf("————————————————————————————————————————\n");printf("please imput your command:>");gets(command);int select;for(i=0;command[i]!=' '&&command[i]!='\0';i++) //command_str1字符串存储命令的操作类型command_str1[i]=command[i];k=i;command_str1[k]='\0';for(i=0;i<commandAmount;i++){if(!strcmp(command_str1,order[i])){select=i;break;}}if(i==commandAmount){printf("您输入的命令有误,请重新输入\n");continue;}for(i=k+1,k=0;command[i]!=' '&&command[i]!='\0';i++,k++) //commmand_str2字符串存储文件名或用户名command_str2[k]=command[i];command_str2[k]='\0';k=i;switch(select){case 0:for(i=k+1,k=0;command[i]!=' ';i++,k++)command_str3[k]=command[i];command_str3[k]='\0';k=i;j=1;length=0; //初始化文件长度for(i=strlen(command_str3)-1;i>=0;i--) //把字符串转换为十进制{length+=(command_str3[i]-48)*j;j*=10;}for(i=k+1,k=0;command[i]!=' '&&command[i]!='\0';i++,k++)command_str4[k]=command[i];command_str4[k]='\0';fileCreate(command_str2,length,command_str4);break;case 1:fileDel(command_str2);break;case 2:fileCat(command_str2);break;case 3:fileWrite(command_str2);break;case 4:fileFine(command_str2);break;case 5:for(i=k+1,k=0;command[i]!=' '&&command[i]!='\0';i++,k++)command_str3[k]=command[i];command_str3[k]='\0';chmod(command_str2,command_str3);break;case 6:for(i=k+1,k=0;command[i]!='\0';i++,k++)command_str3[k]=command[i];command_str3[k]='\0';fileRen(command_str2,command_str3);break;case 7:fileDir(command_str2);break;case 8:fileClose(command_str2);break;case 9:UFD *p;for(p=userTable[userID].user->next;p!=NULL;p=p->next) //退出用户之前关闭所有打的文件if(p->file->openFlag)p->file->openFlag=false;system("cls");userID=-1;break;case 10:exit(0);break;case 11:diskShow();break;}}}return 0;}void userCreate(){char c;char userName[10];int i;if(used<MaxUser){printf("请输入用户名:");for(i=0;c=getch();i++){if(c==13) break;elseuserName[i]=c;printf("%c",c);}userName[i]='\0';for(i=0;i<used;i++){if(!strcmp(userTable[i].userName,userName)){printf("\n");printf("该用户名已存在,创建用户失败\n");system("pause");return;}}strcpy(userTable[used].userName,userName);printf("\n");printf("请输入密码:");for(i=0;c=getch();i++){if(c==13) break;elseuserTable[used].password[i]=c;printf("*");}userTable[userID].password[i]='\0';printf("\n");printf("创建用户成功\n");used++;system("pause");}else{printf("创建用户失败,用户已达到上限\n");system("pause");}fflush(stdin);}int login(){char name[10],psw[10];char c;int i,times;printf("请输入用户名:");for(i=0;c=getch();i++){if(c==13) break;elsename[i]=c;printf("%c",c);}name[i]='\0';for(i=0;i<used;i++){if(!strcmp(userTable[i].userName,name))break;}if(i==used){printf("\n您输入的用户名不存在\n");system("pause");return -1;}for(times=0;times<3;times++){memset(psw,'\0',sizeof(psw));printf("\n请输入密码:");for(i=0;c=getch();i++){if(c==13) break;elsepsw[i]=c;printf("*");}printf("\n");for(i=0;i<used;i++){if(!strcmp(psw,userTable[i].password)){printf("用户登录成功\n");system("pause");break;}}if(i==used){printf("您输入的密码错误,您还有%d次输入机会\n",2-times);if(times==2) exit(0);}else break;}fflush(stdin);return i;}void initDisk(){diskHead=(diskNode *)malloc(sizeof(diskNode));diskHead->maxlength=MaxDisk;diskHead->useFlag=0;diskHead->start=0;diskHead->next=NULL;}int requestDist(int &startPostion,int maxLength){int flag=0; //标记是否分配成功diskNode *p,*q,*temp;p=diskHead;while(p){if(p->useFlag==0&&p->maxlength>maxLength){startPostion=p->start;q=(diskNode *)malloc(sizeof(diskNode));q->start=p->start;q->maxlength=maxLength;q->useFlag=1;q->next=NULL;diskHead->start=p->start+maxLength;diskHead->maxlength=p->maxlength-maxLength;flag=1;temp=p;if(diskHead->next==NULL) diskHead->next=q;else{while(temp->next) temp=temp->next;temp->next=q;}break;}p=p->next;}return flag;}void fileCreate(char fileName[],int length,char fileKind[]){//int i,j;time_t rawtime;int startPos;UFD *fileNode,*p;for(p=userTable[userID].user->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName)){printf("文件重名,创建文件失败\n");system("pause");return;}}if(requestDist(startPos,length)){fileNode=(UFD *)malloc(sizeof(UFD));fileNode->file=(fileTable *)malloc(sizeof(fileTable)); //这一步必不可少,因为fileNode里面的指针也需要申请地址,否则fileNode->file指向会出错strcpy(fileNode->file->fileName,fileName);strcpy(fileNode->file->fileKind,fileKind);fileNode->file->maxlength=length;fileNode->file->strat=startPos;fileNode->file->openFlag=false;time(&rawtime);fileNode->file->timeinfo=localtime(&rawtime);fileNode->next=NULL;if(userTable[userID].user->next==NULL)userTable[userID].user->next=fileNode;else{p=userTable[userID].user->next;while(p->next) p=p->next;p->next=fileNode;}printf("创建文件成功\n");system("pause");}{printf("磁盘空间已满或所创建文件超出磁盘空闲容量,磁盘空间分配失败\n");system("pause");}}void freeDisk(int startPostion){diskNode *p;for(p=diskHead;p!=NULL;p=p->next){if(p->start==startPostion)break;}p->useFlag=false;}void fileDel(char fileName[]){UFD *p,*q,*temp;q=userTable[userID].user;p=q->next;while(p){if(!strcmp(p->file->fileName,fileName)) break;else{p=p->next;q=q->next;}}if(p){if(p->file->openFlag!=true) //先判断是否有进程打开该文件{temp=p;q->next=p->next;freeDisk(temp->file->strat); //磁盘空间回收free(temp);printf("文件删除成功\n");system("pause");}elseprintf("该文件已被进程打开,删除失败\n");system("pause");}}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileCat(char fileName[]){int startPos,length;int k=0;UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){startPos=p->file->strat;length=p->file->length;p->file->openFlag=true; //文件打开标记printf("*****************************************************\n");for(int i=startPos;k<length;i++,k++){if(i%50==0) printf("\n"); //一行大于50个字符换行printf("%c",disk[i]);}printf("\n\n*****************************************************\n");printf("%s已被read进程打开,请用close命令将其关闭\n",p->file->fileName);system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileWrite(char fileName[]){UFD *p,*q;q=userTable[userID].user;int i,k,startPos;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){if(!strcmp(p->file->fileKind,"r")) //判断文件类型{printf("该文件是只读文件,写入失败\n");system("pause");return;}char str[500];printf("please input content:\n");gets(str);startPos=p->file->strat;p->file->openFlag=true; //文件打开标记p->file->length=strlen(str);if(p->file->length>p->file->maxlength){printf("写入字符串长度大于该文件的总长度,写入失败\n");system("pause");return;}for(i=startPos,k=0;k<(int)strlen(str);i++,k++)disk[i]=str[k];printf("文件写入成功,请用close命令将该文件关闭\n");system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileFine(char fileName[])UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){printf("********************************************\n");printf("文件名:%s\n",p->file->fileName);printf("文件长度:%d\n",p->file->maxlength);printf("文件在存储空间的起始地址:%d\n",p->file->strat);printf("文件类型:%s\n",p->file->fileKind);printf("创建时间:%s\n",asctime(p->file->timeinfo));printf("********************************************\n");system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void chmod(char fileName[],char kind[]){UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){strcpy(p->file->fileKind,kind);printf("修改文件类型成功\n");system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileRen(char fileName[],char name[]){UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){while(q->next){if(!strcmp(q->next->file->fileName,name)){printf("您输入的文件名已存在,重命名失败\n");system("pause");return;}q=q->next;}strcpy(p->file->fileName,name);printf("重命名成功\n");system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileDir(char userName[]){UFD *p;int i,k;for(i=0;i<MaxUser;i++){if(!strcmp(userTable[i].userName,userName)){k=i;break;}}if(i==MaxUser){printf("没有找到该用户,请检查输入用户名是否正确\n");system("pause");return;}else{p=userTable[k].user->next;printf("************************************************************************* *******\n");printf("文件名文件长度文件在磁盘的起始地址文件类型创建时间\n");for(;p!=NULL;p=p->next)printf("%s %d %d %s %s",p->file->fileName, p->file->maxlength,p->file->strat,p->file->fileKind,asctime(p->file->timeinfo));printf("************************************************************************* *******\n");system("pause");}}void diskShow(){diskNode *p;int i=0,unusedDisk=0;printf("************************************************************************* **\n");printf(" 盘块号起始地址容量(bit) 是否已被使用\n");for(p=diskHead;p!=NULL;p=p->next,i++){if(p->useFlag==false) unusedDisk+=p->maxlength;printf(" %d %d %d %d \n",i,p->start,p->maxlength,p->useFlag);}printf("************************************************************************* **\n");printf("磁盘空间总容量:512*1024bit 已使用:%dbit 末使用:%dbit\n\n",MaxDisk-unusedDisk,unusedDisk);system("pause");}void fileClose(char fileName[]){UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){p->file->openFlag=false;printf("%s文件已关闭\n",p->file->fileName);system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}运行结果视图:(略)。

操作系统设计一个二级文件系统报告

操作系统设计一个二级文件系统报告

v .. . ..
. . . 资 料. .
操作系统(2014年秋季学期)
实 验 报 告
系别:计算机科学与技术 班级:信安12-1班 姓名:*** 学号:
实验名称:进程调度
NORTH CHINA UNIVERSITY OF TECHNOLOGY
2022-4-26 2/17
.
Word 资料
NORTH CHINA UNIVERSITY OF TECHNOLOGY
2022-4-26 4/17
.
Word 资料
NORTH CHINA UNIVERSITY OF TECHNOLOGY
.
Word 资料
NORTH CHINA UNIVERSITY OF TECHNOLOGY
.
Word 资料
NORTH CHINA UNIVERSITY OF TECHNOLOGY
}
五、编译过程截图
(下面是一个例子,换上你自己的图)
六、测试用例
(下面是一个例子,换上你自己的)
文字叙述一下测试过程的实例。

如先创建用户***、再产生文件****、再打开文件****,再写入内容********,再退出,再打开用户***,再将文件读出,读出的内容应该是*******。

等等。

六、实验结果
(下面是一个例子,换上你自己的图,给出根据测试用例的截图)。

操作系统-课程设计

操作系统-课程设计

操作系统-课程设计一、课程目标知识目标:1. 理解操作系统的基本概念、功能、类型及发展历程;2. 掌握操作系统的五大功能模块(处理器管理、存储器管理、设备管理、文件管理、用户接口)的工作原理;3. 了解操作系统的安全性、稳定性和性能评价标准;4. 熟悉至少一种主流操作系统(如Windows、Linux)的安装、配置及使用。

技能目标:1. 能够使用操作系统基本命令进行文件管理、系统监控等操作;2. 学会编写简单的批处理脚本,实现自动化操作;3. 掌握操作系统设置、优化及故障排除的基本方法;4. 能够分析操作系统的性能问题,并提出合理的解决方案。

情感态度价值观目标:1. 培养学生对操作系统的兴趣,激发学习热情;2. 培养学生的团队协作精神,学会在团队中共同解决问题;3. 增强学生的信息安全意识,遵守网络道德规范,尊重知识产权;4. 培养学生的创新意识,敢于尝试新事物,勇于克服困难。

课程性质:本课程为信息技术学科,结合学生年级特点,注重理论与实践相结合,培养学生的实际操作能力。

学生特点:学生具备一定的计算机操作基础,对操作系统有一定了解,但深入理解不足,需要通过课程学习提高认识。

教学要求:以学生为主体,教师为主导,注重启发式教学,引导学生主动探究,提高学生的实践操作能力。

通过课程学习,使学生在知识、技能和情感态度价值观方面取得具体的学习成果,为后续相关课程的学习打下坚实基础。

二、教学内容1. 操作系统的基本概念:介绍操作系统的定义、功能、类型及发展历程,对应教材第一章内容。

2. 操作系统五大功能模块:- 处理器管理:讲解处理器分配、调度算法等,对应教材第二章;- 存储器管理:介绍内存分配、回收、地址映射等,对应教材第三章;- 设备管理:阐述设备分配、I/O调度、缓冲管理等,对应教材第四章;- 文件管理:讲解文件系统结构、文件存储、目录管理等,对应教材第五章;- 用户接口:介绍命令行接口、图形用户接口等,对应教材第六章。

操作系统课程设计二级文件系统

操作系统课程设计二级文件系统

操作系统课程设计报告专业:计算机信息处理学号:08201328姓名:杨馨雨提交日期:2011-7-14【设计目的】1.课程设计目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。

2.结合数据结构、程序设计、计算机原理等课程的知识,设计一个二级文件系统,进一步理解操作系统。

3.通过对实际问题的分析、设计、编程实现,提高学生实际应用、编程的能力【设计内容】1、delete删除文件2、open打开文件3、close关闭文件4、write写文件【实验环境】Windows7系统Visualstudio2010【相关知识综述】本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。

另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。

首先应确定文件系统的数据结构:主目录、子目录及活动文件等。

主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。

用户创建的文件,可以编号存储于磁盘上。

如:file0,file1,file2…并以编号作为物理地址,在目录中进行登记。

【设计思路】1主要数据结构#define MAXNAME25/*thelargestlengthofmfdname,ufdname,filename*/#define MAXCHILD50/*thelargestchild每个用户名下最多有50个文件*/#define MAX(MAXCHILD*MAXCHILD)/*thesizeoffpaddrno*/typedefstruct/*thestructureofOSFILE定义主文件*/{int fpaddr;/*filephysicaladdress*/int flength;/*filelength*/int fmode;/*filemode:0-ReadOnly;1-WriteOnly;2-ReadandWrite;3-Protect;*/char fname[MAXNAME];/*filename*/}OSFILE;typedefstruct/*thestructureofOSUFD定义用户文件目录*/{char ufdname[MAXNAME];/*ufdname*/OSFILEufdfile[MAXCHILD];/*ufdownfile*/}OSUFD;typedefstruct/*thestructureofOSUFD'LOGIN定义登陆*/{char ufdname[MAXNAME];/*ufdname*/char ufdpword[8];/*ufdpassword*/}OSUFD_LOGIN;typedefstruct/*fileopenmode定义操作方式*/{int ifopen;/*ifopen:0-close,1-open*/int openmode;/*0-readonly,1-writeonly,2-readandwrite,3-initial*/}OSUFD_OPENMODE;2主要函数void LoginF();/*LOGINFileSystem*/void DirF();/*DirFileSystem*/void CreateF();/*CreateFile*/void DeleteF();/*DeleteFile*/void ModifyFM();/*ModifyFileMode*/void OpenF();/*OpenFile*/void CloseF();/*CloseFile*/void ReadF();/*ReadFile*/void WriteF();/*WriteFile*/void QuitF();/*QuitFileSystem*/void CdF();/*ChangeDir*/void help();【主要程序段】1Delete函数voidDeleteF()/*DeleteFile*/{charfname[MAXNAME],str[50],str1[50];inti,k,j;intfpaddrno1;if(strcmp(strupr(ltrim(rtrim(dirname))),"")==0)/*无法删除主目录的文件*/{printf("\.\n");wgetchar=1;}if(strcmp(strupr(dirname),strupr(username))!=0)/*无法删除非自己目录的文件*/{printf("\.\n");wgetchar=1;}else{printf("\nPleaseinputFileName:");gets(fname);fopen==1)/*文件打开时无法删除*/{printf("\nError.\'%s\'.\n",fname);wgetchar=1;}else{if(ufd[k]->ufdfile[i].fmode==3)/*被保护的文件无法删除*/{printf("\nError.\'%s\'.\n",fname);wgetchar=1;}else{fpaddrno1=ufd[k]->ufdfile[i].fpaddr;xt");remove(str);n",fname);wgetchar=1;}}}else'%s\'dosenotexist.\n",fname);wgetchar=1;}}}2Open函数voidOpenF()/*OpenFile*/{charfname[MAXNAME];inti,k,j;if(strcmp(strupr(dirname),strupr(username))!=0)/*在自己的目录里才能打开*/{printf("\.\n");wgetchar=1;}else{k=ExistD(username);for(j=0;j<fcount[k];j++){printf("%15s",ufd[k]->ufdfile[j].fname);}printf("\nPleaseinputFileName:");gets(fname);fopen==1)'%s\'isinopenstatus.\n",fname);wgetchar=1;}else{ifopen[k][i].ifopen=1;mode==0)/*根据文件的模式设置打开模式*/{ifopen[k][i].openmode=0;}elseif(ufd[k]->ufdfile[i].fmode==1){ifopen[k][i].openmode=1;}elseif(ufd[k]->ufdfile[i].fmode==2){ifopen[k][i].openmode=2;}elseifopen[k][i].openmode=3;printf("\n\'%s\'isopenedsuccessfully\n",fname);wgetchar=1;}}else'%s\'dosenotexist.\n",fname);wgetchar=1;}}}3Close函数voidCloseF()/*CloseFile*/{charfname[MAXNAME];inti,k,j;if(strcmp(strupr(dirname),strupr(username))!=0)/*不在自己的目录里没法进行*/{printf("\.\n");wgetchar=1;}else{k=ExistD(username);for(j=0;j<fcount[k];j++)/*列出已经打开的文件*/ {if(ifopen[k][j].ifopen==1)name);}printf("\nPleaseinputFileName:");gets(fname);fopen=0;/*关闭文件*/printf("\n\'%s\'closedsuccessfully\n",fname);wgetchar=1;}else'%s\'dosenotexist.\n",fname);wgetchar=1;}}}4Write函数voidWriteF()/*WriteFile*/{inti,k,n=0;intlength;charfname[MAXNAME],values[1000];charstr[255],str1[255],c;if(strcmp(strupr(ltrim(rtrim(dirname))),"")==0)n");wgetchar=1;return;}printf("\nCaution:Openfilefirst\n");printf("OpenedFile(s)List:\n");k=ExistD(dirname);fopen==1)name);n++;}if((n%4==0)&&(n!=0))printf("\n");}printf("\n%dfilesopenned.\n",n);if(n==0)wgetchar=1;fopen==1)penmode==1)||(ifopen[k][i].o penmode==2))paddr,str,10);xt");fp_file=fopen(str,"ab");length=ufd[k]->ufdfile[i].flengt h+length;n",ufd[k]->ufdfile[i].flength);printf("\n\nYouhavewritefilesuccessfully!!");fclose(fp_file);wgetchar=0;}elseif(ifopen[k][i].openmode==0)'%s\'\'twrite.\n",fname) ;wgetchar=1;}else'%s\'\'twrite.\n",fname);wgetchar=1;}}else'%s\'\n",fname);wgetchar=1;}}else'%s\'doesnotexist.\n",fname);wgetchar=1;}}}【程序流程设计】1总的功能结构图:2部分子模块程序流程图(1)打开命令的程序流程图:(2)关闭命令的程序流程图:(3)写命令的程序流程图:(4)删除命令的程序流程图:【测试结果】1删除文件2打开的文件不能删除3打开文件,其中已经打开的文件不能再次打开3关闭文件4写文件,其中只有打开了文件才能写入5写文件6只读文件和保护文件不能写入7其他函数【参考文献】计算机操作系统,西安电子科技大学出版社,方敏主编, 【源程序清单】#include""#include""#include""#include""#define MAXNAME25/*thelargestlengthofmfdname,ufdname,filename*/#define MAXCHILD50/*thelargestchild每个用户名下最多有50个文件*/#define MAX(MAXCHILD*MAXCHILD)/*thesizeoffpaddrno*/typedefstruct/*thestructureofOSFILE定义主文件*/{int fpaddr;/*filephysicaladdress*/int flength;/*filelength*/int fmode;/*filemode:0-ReadOnly;1-WriteOnly;2-ReadandWrite;3-Protect;*/ char fname[MAXNAME];/*filename*/}OSFILE;typedefstruct/*thestructureofOSUFD定义用户文件目录*/{char ufdname[MAXNAME];/*ufdname*/OSFILEufdfile[MAXCHILD];/*ufdownfile*/}OSUFD;typedefstruct/*thestructureofOSUFD'LOGIN定义登陆*/char ufdname[MAXNAME];/*ufdname*/char ufdpword[8];/*ufdpassword*/}OSUFD_LOGIN;typedefstruct/*fileopenmode定义操作方式*/{int ifopen;/*ifopen:0-close,1-open*/int openmode;/*0-readonly,1-writeonly,2-readandwrite,3-protect*/}OSUFD_OPENMODE;void LoginF();/*LOGINFileSystem*/void DirF();/*DirFileSystem*/void CreateF();/*CreateFile*/void DeleteF();/*DeleteFile*/void ModifyFM();/*ModifyFileMode*/void OpenF();/*OpenFile*/void CloseF();/*CloseFile*/void ReadF();/*ReadFile*/void WriteF();/*WriteFile*/void QuitF();/*QuitFileSystem*/void CdF();/*ChangeDir*/void help();char*rtrim(char*str);/*removethetrailingblanks.*/char*ltrim(char*str);/*removetheheadingblanks.*/void InputPW(char*password);/*inputpassword,use'*'replace*/int ExistD(char*dirname);/*WhetherDirNameExist,Exist-i,NotExist-0*/int WriteF1();/*writefile*/int ExistF(char*filename);/*WhetherFileNameExist,Exist-i,NotExist-0*/void SetPANo(int RorW);/*Setphysicaladdressnum*/int FindPANo();/*findoutphysicaladdressnum*/int ucount=0;/*thecountofmfd'sufds用户数*/int fcount[MAXCHILD];/*thecountofufd'sfiles子文件数*/int loginsuc=0;/*whetherloginsuccessfully登陆成功*/char username[MAXNAME];/*recordloginuser'sname22用户名*/char dirname[MAXNAME];/*recordcurrentdirectory使用的用户目录*/int fpaddrno[MAX];/*recordfilephysicaladdressnum物理地址号,存放自己所创建的所有文件的地址*/int wgetchar;/*whethergetchar()*/OSUFD*ufd[MAXCHILD];/*ufdandufdownfiles*/OSUFD_LOGINufd_lp;;QuitF();exit(0);break;case10:clrscr();choiceend=1;break;case11:CdF();choiceend=1;break;;}char*rtrim(char*str)/*removethetrailingblanks.去掉登陆用户名的尾空格*/int n=strlen(str)-1;while(n>=0){if(*(str+n)!=''){*(str+n+1)='\0';break;}else n--;}if(n<0)str[0]='\0';return str;}char*ltrim(char*str)/*removetheheadingblanks.去掉登陆用户名的头空格*/ {strrev(str);name),strupr(filename))==0){exist=1;break;}if(exist)return(i);elsereturn(-1);}int FindPANo()/*findoutphysicaladdressnum*/{int i;for(i=0;i<MAX;i++)if(fpaddrno[i]==0){fpaddrno[i]=1;break;}if(i<MAX)return(i);elsereturn(-1);}int WriteF1()/*writefile*/{int length=0;char c;printf("Pleaseinputtext(\'#\'standsforend):\n");while((c=getchar())!='#'){fprintf(fp_file,"%c",c);if(c!='\n')length++;}fprintf(fp_file,"\n");fclose(fp_file);return(length);}void LoginF()/*LOGINFileSystem登陆函数*/{char loginame[MAXNAME],loginpw[9],logincpw[9],str[50];xt");ufd[j]=(OSUFD*)malloc(sizeof(OSUFD));fopen=0;ifopen[j][i].openmode=4;}fclose(fp_ufd);}fclose(fp_mfd);ucount=j;SetPANo(0);printf("\n\nLoginsuccessful!WelcometothisFileSystem\n\n");loginsuc=1;return;}else xt");if((fp_ufd=fopen(str,"rb"))==NULL){fp_ufd=fopen(str,"wb");fclose(fp_ufd);}fp_mfd=fopen("d:\\osfile\\","rb");for(j=0;fread(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd)!=0;j++){strcpy(str,"d:\\osfile\\");strcat(str,;strcat(str,".txt");ufd[j]=(OSUFD*)malloc(sizeof(OSUFD));strcpy(ufd[j]->ufdname,strupr);fp_ufd=fopen(str,"rb");for(i=0;fread(&ufd[j]->ufdfile[i],sizeof(OSFILE),1,fp_ufd)!=0;i++,fcount[j]++)fopen =0;ifopen[j][i].openmode=4;}fclose(fp_ufd);}fclose(fp_mfd);ucount=j;SetPANo(0);printf("\n\nLoginSuccessful!WelcometothisSystem\n\n");loginsuc=1;return;}else");getch();clrscr();printf("\n%14s%16s%14s%10s%18s\n","FileName","FileAddress","FileLength","Type","Fil eMode");}itoa(ufd[j]->ufdfile[i].fpaddr,str,10);mode==0)strcpy(sfmode,"ReadOnly");elseif(ufd[j]->ufdfile[i].fmode==1)strcpy(sfmode,"WriteOnly");elseif(ufd[j]->ufdfile[i].fmode==2)strcpy(sfmode,"ReadAndWrite");else strcpy(sfmode,"Protect");printf("%14s%16s%14d%10s%18s\n",ufd[j]->ufdfile[i].fname,sfpaddr,ufd[j]->ufdfile[i] .flength,"<FILE>",sfmode);}printf("\n%3dfile(s)\n",fcount[j]);}else.");getch();clrscr();printf("\n%14s%18s%8s\n","DirName","OwnFileCount","Type");}printf("%14s%18d%8s\n",ufd[i]->ufdname,fcount[i],"<UFD>");count=count+fcount[i];}printf("\n%3ddir(s),%5dfile(s)\n",ucount,count);}}void CreateF()/*CreateFile*/{int fpaddrno,flag=1,i;char fname[MAXNAME],str[50],str1[50],a[25];char fmode[25];if(strcmp(strupr(dirname),strupr(username))!=0)n");wgetchar=1;}else{printf("\nPleaseinputFileName:");gets(fname);ltrim(rtrim(fname));if(ExistF(fname)>=0){printf("\\'%s\'hasalreadyexisted.\n",fname);wgetchar=1;}else{printf("PleaseinputFileMode(0-ReadOnly,1-WriteOnly,2-ReadandWrite,3-Protect):");gets(fmode);ltrim(rtrim(fmode));if((strcmp(fmode,"0")==0)||(strcmp(fmode,"1")==0)||(strcmp(fmode,"2")==0)||(strcmp( fmode,"3")==0)){fpaddrno=FindPANo();if(fpaddrno>=0)name,fname);paddr=fpaddrno;ufd[i]->ufdfile[fcount[i]].fmode=atoi(fmode);ifopen[i][fcount[i]].ifopen=0;ifopen[i][fcount[i]].openmode=4;strcpy(str,"d:\\osfile\\file\\file");itoa(fpaddrno,str1,10);strcat(str,str1);strcat(str,".txt");fp_file=fopen(str,"wb");fclose(fp_file);fcount[i]++;while(flag){printf("Inputtextnow(Y/N):");gets(a);ltrim(rtrim(a));ufd[i]->ufdfile[fcount[i]-1].flength=0;if(strcmp(strupr(a),"Y")==0){fp_file=fopen(str,"wb+");length=WriteF1();flag=0;}elseif(strcmp(strupr(a),"N")==0){flag=0;wgetchar=1;}}printf("\n\'%s\'hasbeencreatedsuccessfully!\n",fname);}else{printf("\nFail!.\n");wgetchar=1;}}else{printf("\\'sRangeis0-3\n");wgetchar=1;}}}}void DeleteF()/*DeleteFile*/{char fname[MAXNAME],str[50],str1[50];int i,k,j;int fpaddrno1;if(strcmp(strupr(ltrim(rtrim(dirname))),"")==0)/*无法删除主目录的文件*/{printf("\.\n");wgetchar=1;}if(strcmp(strupr(dirname),strupr(username))!=0)/*无法删除非自己目录的文件*/ {printf("\.\n");wgetchar=1;}else{printf("\nPleaseinputFileName:");gets(fname);fopen==1)/*文件打开时无法删除*/{printf("\nError.\'%s\'.\n",fname);wgetchar=1;}else{if(ufd[k]->ufdfile[i].fmode==3)/*被保护的文件无法删除*/{printf("\nError.\'%s\'.\n",fname);wgetchar=1;}else{fpaddrno1=ufd[k]->ufdfile[i].fpaddr;xt");remove(str);n",fname);wgetchar=1;}}}else'%s\'dosenotexist.\n",fname);wgetchar=1;}}}void ModifyFM()/*ModifyFileMode*/{char fname[MAXNAME],str[50];int i,k;char fmode[25];/*whetherdelete*/if(strcmp(strupr(dirname),strupr(username))!=0){printf("\.\n");wgetchar=1;}else{printf("\nPleaseinputFileName:");gets(fname);ltrim(rtrim(fname));i=ExistF(fname);if(i>=0){k=ExistD(username);if(ifopen[k][i].ifopen==1){printf("\nError.\'%s\'.\n",fname);wgetchar=1;}else{if(ufd[k]->ufdfile[i].fmode==0)strcpy(str,"readonly");/*FileMode*/elseif(ufd[k]->ufdfile[i].fmode==1)strcpy(str,"writeonly");elseif(ufd[k]->ufdfile[i].fmode==2)strcpy(str,"readandwrite");else strcpy(str,"Protect");printf("\'%s\'filemodeis%s.\n",fname,strupr(str));printf("Modifyto(0-readonly,1-writeonly,2-readandwrite,3-Protect):");gets(fmode);ltrim(rtrim(fmode));if(strcmp(fmode,"0")==0){ufd[k]->ufdfile[i].fmode=0;printf("\n\'%s\'hasbeenmodifiedtoREADONLYmodesuccessfully.\n",fname);wgetchar=1;}elseif(strcmp(fmode,"1")==0){ufd[k]->ufdfile[i].fmode=1;printf("\n\'%s\'hasbeenmodifiedtoWRITEONLYmodesuccessfully.\n",fname);wgetchar=1;}elseif(strcmp(fmode,"2")==0){ufd[k]->ufdfile[i].fmode=2;printf("\n\'%s\'hasbeenmodifiedtoREADANDWRITEmodesuccessfully.\n",fname);wgetchar=1;}elseif(strcmp(fmode,"3")==0){ufd[k]->ufdfile[i].fmode=3;printf("\n\'%s\'hasbeenmodifiedtoFORBIDmodesuccessfully.\n",fname);wgetchar=1;}else{printf("\nError.\'%s\'isnotmodified.\n",fname);wgetchar=1;}}}else{printf("\nError.\'%s\'dosenotexist.\n",fname);wgetchar=1;}}}void OpenF()/*OpenFile*/{char fname[MAXNAME];int i,k,j;if(strcmp(strupr(dirname),strupr(username))!=0)/*在自己的目录里才能打开*/ {printf("\.\n");wgetchar=1;}else{k=ExistD(username);for(j=0;j<fcount[k];j++){printf("%15s",ufd[k]->ufdfile[j].fname);}printf("\nPleaseinputFileName:");gets(fname);fopen==1)'%s\'isinopenstatus.\n",fname);wgetchar=1;}else{ifopen[k][i].ifopen=1;mode==0)/*根据文件的模式设置打开模式*/{ifopen[k][i].openmode=0;}elseif(ufd[k]->ufdfile[i].fmode==1){ifopen[k][i].openmode=1;}elseif(ufd[k]->ufdfile[i].fmode==2){ifopen[k][i].openmode=2;}else ifopen[k][i].openmode=3;printf("\n\'%s\'isopenedsuccessfully\n",fname);wgetchar=1;}}else'%s\'dosenotexist.\n",fname);wgetchar=1;}}}void CloseF()/*CloseFile*/{char fname[MAXNAME];int i,k,j;if(strcmp(strupr(dirname),strupr(username))!=0)/*不在自己的目录里没法进行*/ {printf("\.\n");wgetchar=1;}else{k=ExistD(username);for(j=0;j<fcount[k];j++)/*列出已经打开的文件*/{if(ifopen[k][j].ifopen==1)name);}printf("\nPleaseinputFileName:");gets(fname);fopen=0;'%s\'dosenotexist.\n",fname);wgetchar=1;}}}void ReadF()/*ReadFile*/{int i,k,n=0;char fname[MAXNAME];char str[255],str1[255],c;if(strcmp(strupr(ltrim(rtrim(dirname))),"")==0)n");wgetchar=1;return;}printf("\nCaution:Openfilefirst\n");printf("OpenedFile(s)List:\n");k=ExistD(dirname);for(i=0;i<fcount[k];i++){if(ifopen[k][i].ifopen==1)name);n++;}if((n%4==0)&&(n!=0))printf("\n");}printf("\n%dfilesopenned.\n",n);if(n==0)wgetchar=1;fopen==1){if((ifopen[k][i].openmode==0)||(ifopen[k][i].openmode==2))paddr,str,10);strcpy(str1,"file");strcat(str1,str);strcpy(str,"d:\\osfile\\file\\");strcat(str,str1);strcat(str,".txt");fp_file=fopen(str,"rb");fseek(fp_file,0,0);printf("\nThetextis:\n\n");printf("");while(fscanf(fp_file,"%c",&c)!=EOF)if(c=='\n')printf("\n");else printf("%c",c);printf("\n\n%dLength.\n",ufd[k]->ufdfile[i].flength);fclose(fp_file);wgetchar=1;}elseif(ifopen[k][i].openmode==1)'%s\'\'tread.\n",fname);wgetchar=1;}else'%s\'\'tread.\n",fname);wgetchar=1;}}else{printf("\nError.\'%s\'\n",fname);wgetchar=1;}}else{printf("\nError.\'%s\'doesnotexist.\n",fname);wgetchar=1;}}}void WriteF()/*WriteFile*/{int i,k,n=0;int length;char fname[MAXNAME],values[1000];char str[255],str1[255],c;if(strcmp(strupr(ltrim(rtrim(dirname))),"")==0)n");wgetchar=1;return;}printf("\nCaution:Openfilefirst\n");printf("OpenedFile(s)List:\n");k=ExistD(dirname);fopen==1)name);n++;}if((n%4==0)&&(n!=0))printf("\n");}printf("\n%dfilesopenned.\n",n);if(n==0)wgetchar=1;fopen==1)penmode==1)||(ifopen[k][i].openmode==2))paddr,str,10);x t");fp_file=fopen(str,"ab");length=ufd[k]->ufdfile[i].flength+length;n",ufd[k]->ufdfile [i].flength);printf("\n\nYouhavewritefilesuccessfully!!");fclose(fp_file);wgetchar=0;}elseif(ifopen[k][i].openmode==0)'%s\'\'twrite.\n",fname);wgetchar=1;}else'%s\'\'twrite.\n",fname);wgetchar=1;}}else'%s\'\n",fname);wgetchar=1;}}else'%s\'doesnotexist.\n",fname);wgetchar=1;}}}void QuitF()/*QuitFileSystem*/{int i,j;char str[50];SetPANo(1);if(fp_mfd!=NULL)fclose(fp_mfd);xt");fp_ufd=fopen(str,"wb");fclose(fp_ufd);fp_ufd=fopen(str,"ab");for(i=0;i<fcount[j];i++)fwrite(&ufd[j]->ufdfile[i],sizeof(OSFILE),1,fp_ufd);fclose(fp_ufd);}}void CdF()/*ExchangeDir更换用户*/{char dname[MAXNAME];printf("\nPleaseinputDirName:");gets(dname);ltrim(rtrim(dname));if(ExistD(dname)>=0)strcpy(dirname,strupr(dname));elseif(strcmp(strupr(dname),"CD..")==0)strcpy(ltrim(rtrim(dirname)),"");else printf("\nError.\'%s\'doesnotexist.\n",dname);}void help(void){printf("\nTheCommandList\n");printf("\nCdAttribCreatewriteReadOpenClsDeleteExitClose\n");}【设计总结】UNIX系统中的文件系统是人们最感兴趣的,也是最成功的一部分。

操作系统课程设计(完整规范版)

操作系统课程设计(完整规范版)

操作系统课程设计(完整规范版)一、设计目的操作系统课程设计旨在让学生深入了解操作系统的基本原理,掌握操作系统设计与实现的基本方法,培养学生在操作系统领域的实际动手能力和创新思维。

通过本次课程设计,学生应能够:1. 理解操作系统的功能、结构和关键技术;2. 学会分析实际操作系统的性能和特点;3. 设计并实现一个简单的操作系统模块或功能;4. 提高团队协作和沟通能力。

二、设计要求1. 设计内容:根据课程所学,选择一个具有实际意义的操作系统模块进行设计与实现。

模块可包括:进程管理、内存管理、文件系统、设备管理等。

2. 设计规范:遵循软件工程的基本原则,确保代码的可读性、可维护性和可扩展性。

3. 团队协作:本次课程设计以小组为单位进行,每组35人。

小组成员需明确分工,共同完成设计任务。

(2):包括所有设计文件、代码及相关文档;(3)演示PPT:汇报课程设计成果,阐述设计思路、实现过程及创新点。

三、设计流程1. 需求分析:分析所选操作系统模块的功能需求,明确设计目标。

2. 系统设计:根据需求分析,设计系统架构,划分模块,确定各模块的功能和接口。

3. 编码实现:按照系统设计,编写代码,实现各模块功能。

4. 测试与调试:对实现的系统模块进行功能测试、性能测试和兼容性测试,确保系统稳定可靠。

5. 优化与改进:根据测试结果,对系统进行优化和改进。

7. 演示与答辩:制作演示PPT,汇报课程设计成果,回答评委提问。

四、评分标准1. 设计报告(30%):内容完整、结构清晰、表述准确、格式规范。

2. 代码质量(40%):代码可读性、可维护性、可扩展性、创新性。

3. 演示与答辩(20%):PPT制作、汇报效果、回答问题。

4. 团队协作(10%):分工明确、协作高效、沟通交流。

五、预期成果1. 理论与实践相结合:将课堂上所学的操作系统理论知识运用到实际设计中,加深对操作系统的理解。

2. 技能提升:提高编程能力,掌握操作系统核心模块的设计与实现技巧。

操作系统课程设计文件系统

操作系统课程设计文件系统

操作系统课程设计:文件系统一、引言文件系统是操作系统中的一个重要组成部分,负责管理计算机存储设备上的文件和目录。

一个高效可靠的文件系统对于操作系统和用户来说都至关重要。

在操作系统课程中,设计一个文件系统是一项重要的任务,可以帮助学生深入了解文件系统的原理和实现细节。

本文档将介绍一个简单的文件系统设计,旨在帮助初学者理解文件系统的基本概念和工作原理。

我们将首先介绍文件系统的基本概念,然后讨论文件系统的设计思路和关键组成部分。

最后,我们将讨论如何实现和测试文件系统。

二、文件系统的基本概念文件系统是操作系统提供的一种存储管理机制,用于将文件组织成有层次的结构并提供对文件的访问和管理。

在一个文件系统中,文件被组织成目录(或文件夹)的层次结构,用户可以使用文件路径来访问文件和目录。

文件系统通常提供以下功能: - 文件和目录的创建、删除和重命名 - 文件和目录的读取和写入 - 文件和目录的权限管理 - 文件的共享和保护 - 文件的存储管理三、设计思路在设计文件系统时,需要考虑以下几个关键方面:1. 文件系统的组织结构文件系统可以采用不同的组织结构,常见的包括层次结构、网络结构和日志结构。

在设计文件系统时,需要根据具体需求选择合适的结构。

2. 文件和目录的管理文件系统需要提供对文件和目录的管理功能,包括创建、删除、重命名和移动等操作。

此外,还需要支持文件和目录的权限管理,确保只有授权用户可以进行相应操作。

3. 文件的存储管理文件系统需要负责将文件存储在磁盘或其他存储设备上,并提供高效的读写操作。

存储管理的关键是如何将文件划分为适当大小的块并将它们存储在存储设备上。

4. 文件的共享和保护文件系统需要支持文件的共享和保护。

共享可以使多个用户同时访问同一文件,保护则确保只有合法用户可以进行读写操作。

四、文件系统的关键组成部分一个典型的文件系统通常由以下几个关键组成部分构成:1. 文件控制块(FCB)文件控制块是文件系统中一个重要的数据结构,用于记录文件的相关信息,包括文件名、大小、权限和存储位置等。

操作系统课程设计报告题目及代码

操作系统课程设计报告题目及代码

题目一模拟操作系统设计设计一个模拟操作系统管理程序,实现以下管理功能:1.内存管理功能2.文件管理功能3.磁盘管理功能题目二虚拟存储器各页面置换算法的实现与比较内容:设计一个虚拟存储区和内存工作区,通过产生一个随机数的方法得到一个页面序列,假设内存给定的页面数由键盘输入,分别计算使用下述各方法时的内存命中率:先进先出算法〔FIFO〕、最近最少使用算法〔LRU〕、最正确淘汰算法〔OPT〕、最少页面算法〔LFU〕等。

题目三文件系统设计通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。

内容:为Linu*系统设计一个简单的二级文件系统,以实现以下功能:1.可以实现以下几条命令(1)login 用户登录(2)dir 文件目录列表(3)creat 创立文件(4)delete 删除文件(5)open 翻开文件(6)close 关闭文件(7)read 读文件(8)write 写文件2.实验提示〔1〕首先确定文件系统的数据构造:主目录、子目录及活动文件等。

主目录和子目录都以文件的形式存放在磁盘,这样便于查找和修改。

〔2〕用户创立的文件,可以编号存储于磁盘上。

如file0、file1、file2……等,并以编号作为物理地址,在目录中进展登记。

[清华大学?操作系统教程? *丽芬编著题目四设计一个按时间片轮转法进程CPU调度的程序。

提示:〔1〕假设系统有5个进程,每个进程用一个进程控制块PCB来代表,PCB中包含进程名、指针、到达时间、估计运行时间、进程状态表。

其中,进程名即为进程进标识。

〔2〕为每一个进程设计一个要示运行时间和到达时间。

〔3〕按照进程到达的先后顺序排成一个循环队列,再设一个队首指针指向第一个到达的进程首址。

〔4〕执行处理机调度时,开场选择队首的第一个进程运行。

另外再设一个当前运行进程指针,指向当前正运行的进程。

〔5〕由于本实验是模拟实验,所以对被选中进程并不实际启运运行,只是执行:a.估计驼行时间减1b.输出当前运行进程的名字。

操作系统二级文件管理系统结构设计

操作系统二级文件管理系统结构设计

操作系统二级文件管理系统结构设计二级文件管理系统是一种较为常见的操作系统文件管理结构,主要用于管理计算机中的文件和目录。

该系统结构设计的目标是提供高效、可靠和安全的文件管理功能,使用户能够方便地存储、访问和管理文件。

一、文件系统的基本结构1.文件系统层次结构:二级文件管理系统采用层次结构,由两个层次组成:目录层和文件层。

目录层用于组织、分类和管理文件,文件层用于存储和读取实际文件数据。

2.目录结构设计:目录是文件和子目录的逻辑组织结构,可以有多级嵌套。

目录层次结构可以采用树形结构,根目录是顶级目录,下级目录称为子目录。

每个目录包含目录项,每个目录项包含文件名和文件指针。

3.文件结构设计:文件是存储在磁盘上的一组数据,可以是文本文件、图像文件、音频文件等。

文件层次结构可以采用线性结构,每个文件由文件头、文件数据和文件尾组成。

文件头包含文件属性信息,文件数据是实际的文件内容,文件尾用于标记文件结束。

二、文件系统的实现原理1.文件分配方法:文件分配方法指定了文件在磁盘上的存储方式。

常见的文件分配方法有连续分配、链接分配和索引分配。

连续分配将文件存储在连续的磁盘块上,链接分配使用链表将文件块链接起来,索引分配使用索引表记录文件块的位置。

2.目录操作:目录操作包括创建目录、删除目录、重命名目录、进入目录和返回上级目录等。

其中进入目录操作是进入子目录进行文件管理,返回上级目录是返回到父目录中。

3.文件操作:文件操作包括创建文件、删除文件、读取文件和写入文件等。

创建文件时需要为文件分配存储空间,并在目录中添加文件项;删除文件时需要释放文件占用的存储空间,并在目录中删除文件项;读取文件和写入文件是对文件数据的操作,读取时将文件数据输出到终端,写入时将终端输入的数据写入到文件中。

三、文件系统的实现考虑因素1.效率:文件系统应提供高效的操作方法,包括目录和文件的操作。

目录的层次结构应使查找操作能够在较短的时间内完成,文件的分配方法应尽量减少磁盘碎片和提高文件存取速度。

操作系统-文件系统课程设计报告(附源码)

操作系统-文件系统课程设计报告(附源码)

操作系统课程设计题目文件系统学院计算机学院专业计算机科学与技术年级班别 10级7 班学号 3110006154 学生姓名指导教师刘老师20年月日文件系统一、课程设计的内容:模拟文件系统实现的基本功能,了解文件系统的基本结构和管理方法,加深理解文件系统的内部功能及内部实现。

通过用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程,从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。

二、可行性分析:可行性分析是通过对项目的主要内容和配套条件,并通过对各方面进行调查研究和分析比较,并对项目建成以后所带来的影响,从而提出该项目是否值得投资和如何进行建设的咨询意见,是一种综合性的系统分析方法。

可行性分析应具有预见性、公正性、可靠性、科学性的特点。

这里以三个方面来分析此次设计:经济可行性、技术可行性、法律可行性。

1、经济可行性:编写该文件系统,只需要用到PC机和VC++6.0编程软件,不需要花费金钱,所以,在经济方面,这个课程设计适合做。

2、技术可行性:在做这个课程设计,事先需要掌握的知识有C/C++语言,数据结构,操作系统,PC机的基本操作和VC++6.0软件的使用方法等。

目前,这些知识都已经学习并掌握了,所以在技术方面,这个课程设计也适合做。

3、法律可行性:做这个课程设计,只是为了掌握文件系统的基本内容,提升自己的编程能力,没有违反法律法规,所以,在法律方面,这个课程设计也适合做。

三、需求分析1.设计一个多用户多级目录文件管理系统。

2.要设计多个实用命令并设置文件保护措施。

3.设计一个较实用的用户界面,方便用户使用,界面要为用户提供足够的选择信息,不需用户打入冗长的命令4. 功能简介:①多用户管理,多级目录形式。

②基本的文件操作功能,如新建文件、打开文件、写入文件、关闭文件、读取文件等。

③用户间文件的共享功能四、概要设计(逻辑图)1.系统结构图:2、界面简单说明该系统主要分为两个界面,用户操作界面及文件操作管理界面。

课程设计文件操作系统

课程设计文件操作系统

课程设计文件操作系统一、教学目标本课程的教学目标是使学生掌握操作系统的基本原理和常用操作系统的使用方法。

具体包括:1.了解操作系统的定义、功能和分类。

2.掌握操作系统的基本原理,如进程管理、内存管理、文件管理和设备管理。

3.熟悉常用操作系统的特点和使用方法,如Windows、Linux和macOS。

4.能够熟练使用操作系统进行日常计算机操作。

5.能够掌握操作系统的基本配置和优化方法。

6.能够运用操作系统的基本原理解决实际问题。

情感态度价值观目标:1.培养学生对操作系统的兴趣和好奇心,提高学生主动学习的积极性。

2.培养学生团队合作精神,学会与他人分享和交流操作系统的知识和经验。

3.培养学生对操作系统的安全意识,提高学生保护个人隐私和数据的能力。

二、教学内容本课程的教学内容主要包括操作系统的基本原理和常用操作系统的使用方法。

具体安排如下:1.操作系统概述:介绍操作系统的定义、功能和分类。

2.进程管理:讲解进程的概念、进程的状态、进程控制块、进程调度算法等。

3.内存管理:介绍内存的概念、内存分配与回收策略、虚拟内存等。

4.文件管理:讲解文件和目录的概念、文件系统的结构、文件访问控制等。

5.设备管理:介绍设备的概念、设备驱动程序、输入输出控制等。

6.Windows操作系统:讲解Windows操作系统的特点、界面布局、基本操作和高级功能。

7.Linux操作系统:介绍Linux操作系统的特点、界面布局、基本操作和高级功能。

8.macOS操作系统:讲解macOS操作系统的特点、界面布局、基本操作和高级功能。

三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法,如讲授法、讨论法、案例分析法和实验法等。

1.讲授法:通过讲解操作系统的原理和概念,使学生掌握基本知识。

2.讨论法:学生分组讨论操作系统的实际应用场景和问题解决方案,培养学生的团队合作精神。

3.案例分析法:分析实际案例,使学生更好地理解操作系统的基本原理和常用操作系统的特点。

操作系统课程设计为LINUX设计一个简单的二级文件系统

操作系统课程设计为LINUX设计一个简单的二级文件系统

操作系统课程设计为LINUX设计一个简单的二级文件系统一.项目概述本课程设计旨在通过设计一个简单的多用户文件系统,加深学生对文件系统内部功能及内部实现的理解,并提高学生的程序设计能力、算法设计质量与程序设计素质。

二.设计题目为LINUX设计一个简单的二级文件系统,要求实现以下命令:Login用户登录、Dir列文件目录、Create创建文件、Delete删除文件、Open打开文件、Close关闭文件、Read读文件、Write写文件。

列目录时需包括文件名、物理地址、保护码和文件长度。

源文件需进行读写保护。

三.开发语言及实现平台或实验环境本课程设计的开发语言为C语言,实现平台为Linux操作系统。

学生需要在规定时间内完成程序的编写和调试,并书写课程设计报告。

四.时间安排1月17日布置课程设计任务,学生需要自行查阅资料并准备程序。

1月18日至1月20日,学生需要在机房上机调试程序,并书写课程设计报告。

1月21日上午,学生需要提交课程设计报告及相关文档。

每位学生应独立完成各自的任务,每天至少在设计室工作半天。

五.具体要求1.课程设计报告应按统一通用格式书写,具体格式要求请在网络上查阅。

2.指导教师和教研室主任(或责任教师)需要在规定时间内签署相应的文件。

设计目的:本设计旨在开发一款能够实现某种功能的程序,为用户提供便利。

设计内容:5.1.该程序将包括两个主要功能:A和B。

A功能将执行某种操作,而B功能将提供用户界面,使其能够轻松地使用A功能。

5.2.此外,该程序还将包括其他辅助功能,例如C和D。

这些功能将提高程序的可用性和实用性。

任务:该程序的主要任务是为用户提供一种方便、高效的解决方案,使其能够更轻松地实现某种目标。

主程序流程图:程序的主要流程将包括以下步骤:用户打开程序,选择所需的功能,程序执行相应的操作,最终将结果返回给用户。

程序设计:6.1.在程序设计方面,我们将采用一种灵活、可扩展的架构,以便能够轻松地添加新的功能和模块。

操作系统课程设计(完整规范版)

操作系统课程设计(完整规范版)

操作系统课程设计(完整规范版)一、引言操作系统是计算机系统的核心软件,它管理计算机的硬件资源,为应用程序提供运行环境。

本课程设计旨在通过实践,加深学生对操作系统原理的理解,提高学生的编程能力和系统设计能力。

二、课程目标1. 理解操作系统的基本原理和功能。

2. 掌握进程管理、内存管理、文件系统等核心模块的设计和实现。

3. 熟悉操作系统调度的基本算法。

4. 提高学生的编程能力和系统设计能力。

三、课程内容1. 操作系统概述操作系统的定义、功能和发展历程操作系统的基本组成和结构操作系统的类型和特点2. 进程管理进程的定义、状态和转换进程控制块(PCB)的结构和作用进程同步与互斥进程通信进程调度算法3. 内存管理内存管理的目标连续内存管理技术非连续内存管理技术页面置换算法4. 文件系统文件系统的定义和功能文件的结构和类型文件存储空间管理文件目录管理文件操作5. I/O系统I/O系统的功能和组成 I/O设备管理I/O调度算法缓冲管理6. 系统调用系统调用的定义和类型系统调用的实现机制常用系统调用分析7. 实验与课程设计实验目的和要求实验内容和步骤课程设计题目和要求课程设计报告格式四、课程考核1. 平时成绩(30%):包括课堂表现、实验报告和作业完成情况。

2. 实验成绩(30%):包括实验操作和实验报告。

3. 课程设计成绩(40%):包括设计报告、代码实现和答辩表现。

1. 《操作系统概念》作者:亚伯拉罕·西尔伯斯查茨等2. 《现代操作系统》作者:安德鲁·S·塔嫩鲍姆3. 《操作系统导论》作者:威廉·斯托林斯六、附录1. 课程设计报告模板2. 实验报告模板3. 课程设计答辩评分标准七、课程安排1. 理论学习操作系统概述(2课时)进程管理(4课时)内存管理(4课时)文件系统(4课时)I/O系统(2课时)系统调用(2课时)2. 实验与课程设计进程管理实验(2课时)内存管理实验(2课时)文件系统实验(2课时)I/O系统实验(2课时)课程设计(8课时)课程考核(2课时)八、实验与课程设计指导1. 实验指导进程管理实验:通过模拟进程的创建、撤销、阻塞和唤醒等操作,理解进程管理的原理。

操作系统课程设计文档

操作系统课程设计文档

目录一、课程设计的目的..........................二、课程设计的内容及要求...................内容..........................................要求..........................................三、实现原理.................................四、关键算法实现流程图 .....................流程图........................................关键算法......................................五、软件运行环境及限制 .....................六.结果输出及分析..........................七.心得体会.................................八.参考文献.................................一.课程设计的目的本课程设计是学习完《计算机操作系统》课程后,进行的一次全面的综合训练,通过课程设计,让我更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强了我的动手能力。

二.课程设计的内容及要求内容:为LINUX 设计一个简单的二级文件系统。

要求做到以下几点:1、可以实现下列几条命令(至少4条)。

Login 用户登录Dir 列文件目录Create 创建文件Delete 删除文件Open 打开文件Close 关闭文件Read 读文件Write 写文件2、列目录时要列出文件名、物理地址、保护码和文件长度。

3、源文件可以进行读写保护。

从课程设计的目的出发,通过设计工作的各个环节,达到以下教学要求:1、鼓励并优先个人独立选题设计,可从下面设计题目中选择,也可以自拟相关题目;如要合作,每组最多两名同学,且设计文档不能相同;2、可以在我们实验课最后布置的实验设计基础上进行完善和改进,但不能相同。

java课程设计(第二版)

java课程设计(第二版)

java课程设计(第二版)一、课程目标知识目标:1. 理解Java面向对象编程的基本概念,掌握类与对象的关系、封装、继承和多态等核心知识;2. 学会使用Java异常处理机制,提高程序的健壮性;3. 掌握Java集合框架的基本用法,提高数据处理的灵活性;4. 熟悉Java多线程编程的基本概念,了解线程的创建、同步和通信方法;5. 了解Java网络编程的基本原理,掌握Socket编程的基本方法。

技能目标:1. 能够运用面向对象的思想,设计并实现具有一定复杂度的Java程序;2. 能够运用异常处理机制,解决程序运行中可能出现的错误;3. 能够灵活运用Java集合框架,进行高效的数据存储和处理;4. 能够编写简单的多线程程序,解决并发问题;5. 能够实现基本的网络通信功能,了解网络编程的应用场景。

情感态度价值观目标:1. 培养学生的编程兴趣,激发学习动力,使其乐于探索Java编程的奥秘;2. 培养学生的团队协作意识,提高沟通与表达能力,为未来的职业生涯打下基础;3. 培养学生严谨、细致、负责的学习态度,养成良好的编程习惯;4. 增强学生的自信心,使其在面对编程挑战时,勇于尝试、不断进步。

本课程针对高年级学生,结合Java课程设计(第二版)的内容,注重理论与实践相结合,旨在提高学生的编程能力、逻辑思维能力和实际应用能力。

课程目标具体、可衡量,为教学设计和评估提供明确方向。

在教学过程中,关注学生个体差异,因材施教,使学生在掌握知识技能的同时,培养良好的情感态度价值观。

二、教学内容1. 面向对象编程基础:- 类与对象- 封装、继承和多态- 抽象类和接口- Java包和访问权限2. 异常处理:- 异常的概念和分类- try-catch-finally结构- 自定义异常- 异常链3. Java集合框架:- 集合的概念和分类- List、Set、Map接口及其实现类- 集合的遍历方法- 集合排序和搜索4. 多线程编程:- 线程的概念和创建方法- 线程的生命周期- 线程同步和通信- 线程池和线程安全集合5. 网络编程:- 网络编程基础- Socket编程- UDP协议编程- 网络应用案例教学内容依据Java课程设计(第二版)的章节安排,结合课程目标进行选择和组织。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

五、实现的功能
1、用户的注册和登陆 2、 dir 列文件目录 3、 create 创建文件 4、 delete 删除文件 5、 read 读文件 6、 write 写文件 7、 cd 更改目录 8、 rename 重命名文件名
六、实验感悟
首先想说一句话: “没被逼着是不会出大力的” 。解释一下,看到同学们用的都是以前的 C 或者是 C++的文件代码。我自己考来一份,这个悲催啊,自己的 C\C++的功底实在是太差 劲的, 直接看不懂, 也没那耐心烦。从网上 down 了几份 java 的代码。其中有一份写的不错, 很巧妙的实现了老师的要求。 可是以真正的课程设计的原理真是风马牛不相及啊。 怕老师不 让过,于是下决心自己写一下(觉得自己对相应的原理还是知道一些的) 。 我的痛苦的过程也就开始了。 我真的有一次体味到写程序最难得不是代码的编写, 而是 思路、思路、思路。前一天很容易的就实现了用户登录相应的操作。同时数据读写的工具类 和项目的框架也算是粗糙的完成了。可是接下来就写不下去了,原因是 Inode 和 file 或者 directory 之间是如何关联的。这三个类的属性是如何定义和分配的。自己拿笔也在纸上画, 又和舍友李新等同学探讨。有思考了一天多,模模糊糊的开始写,又改有写。就这样一点一 点的写着改着,痛苦着并高兴着。终于粗糙的写完了。时间太短啊,还有许多可以优化的地 方还没来得修改。 周五下午,怀着一颗忐忑的心找老师验程序。当听到老师的一句: “写的还不错么! ”那 种高兴无法用言语来形容!这几天的痛苦、熬夜都值了。谢谢老师的夸奖!
2、列目录时要列出文件名、物理地址、保护码和文件长度; 3、源文件可以进行读写保护。
三、实验过程
1、程序流程
登录
输入用户名
用户存在
否 注册
是 进入目录管理
3
登陆完成
用户登录流程
列出目录文件
读取文件
是否当前 用户文件
Hale Waihona Puke 否是 展示文件完成
列文件目录流程
2、主要类介绍
(1)、public class Systems 文件系统的主类 (2)、public class MyFile 自定义的文件结构体类 (3)、public class MyDirectory 自定义的目录的结构体类 (4)、public class SuperBlock implements Serializable 超级快结构体类 (5)、 public class INode implements Serializable, Comparable<INode> 自定义 INode 节点实体类 (6)、public class FileTools 自定义数据文件的读写工具类
7
* 空的文件目录的索引 */// System.out.println(now_inode.getPath()); while (true) { System.out.print(now_inode.getPath()); commond = sc.nextLine(); if (commond.equals("")) commond = sc.nextLine(); cmd = commond.trim().split(" "); // 列举同一个人用户名的文 件目录 if (cmd[0].trim().equals("dir")) { int m = 0; System.out.println(" 文 件 名 \t 用户名 \t 地址 \t 文件长度 \t 只读 1/ 可写 2\t 打开控制"); if (now_file instanceof MyDirectory) { MyDirectory now__real_file = (MyDirectory) now_file; m = now__real_file.getTree().size(); if (m == 0) { System.out.println("没有目录项"); } else { Set<Integer> dir_inodes = now__real_file.getTree() .keySet(); Iterator<Integer> dir_inodes.iterator(); (iteratore.hasNext()) { Object file = blocks[now__real_file.getTree().get( iteratore while =
附录:程序主要代码
5
1. Systems.java
import java.util.ArrayList; import java.util.Iterator; import java.util.Scanner; import java.util.Set; import java.util.StringTokenizer; /** * 文件管理系统 主类 * * @author liaijun * */ public class Systems { Scanner sc = new Scanner(System.in);// 从控制台读取数据 public static SuperBlock sb = null;// 超 级块 记录虚拟磁盘的总信息 public static ArrayList<String> users;// 用户名数组; public static INode[] inodes = new INode[100];// i 节点记录数据结构 public static Object[] blocks = new Object[100];// 文件块的结构; public static String name = null;// 当 前 登录用户名 public static INode now_inode = null;// 当前节点 public static Object now_file = null; // public static INode father;//父节点 // public static INode me;//自己的当前节 点
/** * @param args */ public static void main(String[] args) { Systems sts = new Systems(); sts.init();// 初始化数据; sts.login();
System.out.println("*************** 欢 迎使用该文件管理系统*************"); System.out.println("请先登录->"); name = sc.next(); if (!this.isInNames(name)) { System.out.println(" 该 用 户 名
不存在!是否注册该用户?y/n"); if ("y".equals(sc.next())) { if (regeist(name)) { System.out.println(name + " 注册成功! "); login(); } else { System.out.println(" 注册失败!"); System.exit(0); } } else { login(); } } else { now_inode = getInode(name + "->");// 得到当前的 inode now_file = blocks[now_inode.getAddress()];// 得到当前 的目录 System.out.println(" 登 录 成 功 "); execute(); } } /** * 命令执行的主方法 */ public void execute() { String commond = null; String cmd[] = null;// 操 作 命令 数 组 cmd[0] 操作的命令 cmd[1]操作的文件 /* * INode id = new INode();// 文件 的节点 int fileNumber = 0;// 拥有文件的总 数 int * getNumber = 0;// 存储打开文件 的节点索引号,或者说是虚拟的内存地址 int emptyNumber = 0;//
2
一、实验目的
通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。
二、实验内容
为linux系统设计一个简单的二级文件系统。要求做到以下几点: 1、可以实现下列几条命令(至少 4 条); login dir create delete open close read write 用户登陆 列文件目录 创建文件 删除文件 打开文件 关闭文件 读文件 写文件
} public void init() { users = (ArrayList<String>) FileTools.read("f:\\users.dat"); /* * if(null!=FileTools.read("f:\\users.dat")) { //inodes=(INode[]) * FileTools.read("f:\\users.dat"); } */ sb = (SuperBlock) FileTools.read("f:\\super.dat"); if (null == sb || sb.getAlreadyuse() == 0) { for (int i = 0; i < 100; i++) { inodes[i] = new INode(); } sb = new SuperBlock(); for (int i = 0; i < 100; i++) { sb.setInode_free(i); } FileTools.write("f:\\super.dat", sb); } if (null == users) { users = new ArrayList<String>();// 存放整个文件系统 users.add("admin"); FileTools.write("f:\\users.dat", users); } } public void login() {
相关文档
最新文档