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

合集下载

操作系统课程设计实验报告(以Linux为例)

操作系统课程设计实验报告(以Linux为例)

《操作系统课程设计》实验报告学号:姓名:苏州大学计算机科学与技术学院2014年9月操作系统课程设计实验报告目录目录 (1)一、实验环境 (2)二、实验报告总体要求 (2)实验一编译L INUX内核 (3)实验二观察L INUX行为 (7)实验三进程间通信 (14)操作系统课程设计实验报告一、实验环境Linux平台◆硬件平台:普通PC机硬件环境。

◆操作系统:Linux环境,例如,红旗Linux或Red Hat Linux;启动管理器使用GRUB。

◆编译环境:伴随着操作系统的默认gcc环境。

◆工作源码环境:一个调试的内核源码,版本不低于2.4.20。

二、实验报告总体要求在2013年11月25日前提交实验报告。

实验报告至少要求包含以下内容:1.引言:概述本次实验所讨论的问题,工作步骤,结果,以及发现的意义。

2.问题提出:叙述本篇报告要解决什么问题。

注意不可以抄写实验要求中的表述,要用自己的话重新组织我们这里所提出的问题。

3.解决方案:叙述如何解决自己上面提出的问题,可以用小标题 3.1,3.2…等分开。

这是实验报告的关键部分,请尽量展开来写。

注意,这部分是最终课程设计的基本分的部分。

这部分不完成,本课程设计不会及格。

4.实验结果:按照自己的解决方案,有哪些结果。

结果有异常吗?能解释一下这些结果吗?同别人的结果比较过吗?注意,这部分是实验报告出彩的地方。

本课程设计要得高分,应该在这部分下功夫。

5.结束语:小结并叙述本次课程设计的经验、教训、体会、难点、收获、为解决的问题、新的疑惑等。

6.附录:加了注释的程序清单,注释行数目至少同源程序行数目比1:2,即10行源程序,至少要给出5行注释。

操作系统课程设计实验报告实验一编译Linux内核实验时间6小时实验目的认识Linux内核的组成,掌握配置、编译、安装Linux内核的步骤。

实验目标下载2.6.19或更新的Linux内核,配置该内核使其支持NTFS,并在新的内核中修改其版本为Linux NameTestKernel x.x.x,其中,Name是你的名字(汉语拼音);x.x.x是新内核的版本号,最后在你的机器上编译安装这个新内核。

模拟简单二级文件管理系统

模拟简单二级文件管理系统

操作系统课程设计模拟简单二级文件管理系统*名:***学号:系别:计算机学院专业:网络工程年级:16级指导教师:2019年05 月11 日一、课程设计项目介绍(含项目介绍及设计目的)1、设计目的:通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。

2、项目介绍:为LINUX 设计一个简单的二级文件系统。

本文件系统采用类似DOS系统的文件管理方式,每次调用该文件系统时,首先申请一定的内存空间,然后对该内存空间进行分配。

将申请到的空间划分为目录区,文件区;采用位示图进行空间管理,盘块的分配使用显示链接(FAT表)的方式。

每次调用该文件系统时自动为其分配空间,并将上次操作的结果从硬盘上调入内存;当结束调用时则将操作的结果重新存入硬盘,以便下次调用。

(每次使用都会自动搜索文件系统,以此确定是否是第一次使用;若是则格式化生成文件系统,否则读取已存在的文件系统。

)本项目通过VC编写简单的二级文件系统的代码,实现文件管理方式,使用者只需要给出相应的文件操作命令就可以分别得到各类文件操作的相应,并且可以选择登陆或注销不同用户。

二、总体设计(含系统的总体结构、原理框图或各模块介绍等)1、系统总体结构图:2、模块介绍(1)、主函数部分:在主函数系统接受输入信息,包括登陆用户和注册用户,登陆完成后选择相应的文件操作,可以选择创建目录、浏览目录、修改目录、创建文件等操作,如果选择错误就会出现相应的提示信息。

(2)、命令解释层函数:在命令解释层函数cmdexp()里加了一些选择和操作功能,增加程序实现的功能,如原来程序只有显示当前目录和文件、创建目录和修改目录的功能,把它拓展到系统所要求的全部功能,并在原有的程序的基础上进行相应的修改,使程序更加完善。

(3)、文件系统格式化函数:该函数首先建立文件,申请空间,在设置成功时将其空间写入filesystem.dat,使filesystem.dat为1M。

操作系统文件管理系统模拟实验

操作系统文件管理系统模拟实验

文件管理系统模拟1.实验目的通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现 2.实验内容为Linux 系统设计一个简单的二级文件系统。

要求做到以下几点: (1)可以实现下列几条命令(至少4条) login 用户登录 dir列文件目录create 创建文件 delete 删除文件open 打开文件 close 关闭文件 read 读文件 write写文件(2)列目录时要列出文件名、物理地址、保护码和文件长度; (3)源文件可以进行读写保护。

3.实验提示(1)首先应确定文件系统的数据结构:主目录、子目录及活动文件等。

主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改.(2)用户创建的文件,可以编号存储于磁盘上。

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

4.源代码#include<stdio 。

h> #include 〈string.h 〉 #include 〈stdlib 。

h 〉 #define MEM_D_SIZE 1024*1024 //总磁盘空间为1M #define DISKSIZE 1024 //磁盘块的大小1K #define DISK_NUM 1024 //磁盘块数目1K #define FATSIZE DISK_NUM*sizeof (struct fatitem ) //FAT 表大小 #define ROOT_DISK_NO FATSIZE/DISKSIZE+1 //根目录起始盘块号 #define ROOT_DISK_SIZE sizeof (struct direct ) //根目录大小 #define DIR_MAXSIZE 1024 //路径最大长度为1KB #define MSD 5 //最大子目录数5#define MOFN 5//最大文件深度为5#define MAX_WRITE 1024*128//最大写入文字长度128KBstruct fatitem /* size 8*/{int item; /*存放文件下一个磁盘的指针*/char em_disk; /*磁盘块是否空闲标志位 0 空闲*/};struct direct{/*--——-文件控制快信息-—---*/struct FCB{char name[9]; /*文件/目录名 8位*/char property; /*属性 1位目录 0位普通文件*/int size; /*文件/目录字节数、盘块数)*/int firstdisk; /*文件/目录起始盘块号*/int next; /*子目录起始盘块号*/int sign; /*1是根目录 0不是根目录*/}directitem[MSD+2];};struct opentable{struct openttableitem{char name[9]; /*文件名*/int firstdisk; /*起始盘块号*/int size; /*文件的大小*/ }openitem[MOFN];int cur_size; /*当前打文件的数目*/};struct fatitem *fat; /*FAT表*/struct direct *root; /*根目录*/struct direct *cur_dir; /*当前目录*/struct opentable u_opentable; /*文件打开表*/int fd=—1; /*文件打开表的序号*/char *bufferdir; /*记录当前路径的名称*/char *fdisk; /*虚拟磁盘起始地址*/void initfile();void format();void enter();void halt();int create(char *name);int open(char *name);int close(char *name);int write(int fd,char *buf,int len);int read(int fd,char *buf);int del(char *name);int mkdir(char *name);int rmdir(char *name);void dir();int cd(char *name);void print();void show();void initfile(){fdisk = (char *)malloc(MEM_D_SIZE*sizeof (char)); /*申请 1M空间*/format();}void format(){int i;FILE *fp;fat = (struct fatitem *)(fdisk+DISKSIZE); /*计算FAT 表地址,引导区向后偏移 1k)*/ /*————-初始化FAT表-———---——-—-*/fat[0]。

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

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

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

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

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

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

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

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

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

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

【设计思路】1 主要数据结构#define MAXNAME 25 /*the largest length ofmfdname,ufdname,filename*/#define MAXCHILD 50 /*the largest child每个用户名下最多有50个文件*/#define MAX (MAXCHILD*MAXCHILD) /*the size of fpaddrno*/ typedef struct/*the structure of OSFILE定义主文件*/{int fpaddr; /*file physical address*/int flength; /*file length*/int fmode; /*file mode:0-Read Only;1-WriteOnly;2-Read and Write; 3-Protect;*/char fname[MAXNAME]; /*file name*/} OSFILE;typedef struct/*the structure of OSUFD定义用户文件目录*/{char ufdname[MAXNAME]; /*ufd name*/OSFILE ufdfile[MAXCHILD]; /*ufd own file*/}OSUFD;typedef struct/*the structure of OSUFD'LOGIN定义登陆*/{char ufdname[MAXNAME]; /*ufd name*/char ufdpword[8]; /*ufd password*/} OSUFD_LOGIN;typedef struct/*file open mode定义操作方式*/{int ifopen; /*ifopen:0-close,1-open*/int openmode; /*0-read only,1-write only,2-read and write,3-initial*/}OSUFD_OPENMODE;2 主要函数void LoginF(); /*LOGIN FileSystem*/void DirF(); /*Dir FileSystem*/void CreateF(); /*Create File*/void DeleteF(); /*Delete File*/void ModifyFM(); /*Modify FileMode*/void OpenF(); /*Open File*/void CloseF(); /*Close File*/void ReadF(); /*Read File*/void WriteF(); /*Write File*/void QuitF(); /*Quit FileSystem*/void CdF(); /*Change Dir*/void help();【主要程序段】1 Delete函数void DeleteF() /*Delete File*/{ char fname[MAXNAME],str[50],str1[50];int i,k,j;int fpaddrno1;if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0) /*无法删除主目录的文件*/{printf("\ convert to ufd dir before delete.\n");wgetchar=1;}if (strcmp(strupr(dirname),strupr(username))!=0) /*无法删除非自己目录的文件*/{printf("\ can only modify filemode in yourself dir.\n");wgetchar=1;}else{printf("\nPlease input FileName:");gets(fname);fopen==1)/*文件打开时无法删除*/{printf("\nError.\'%s\' is in open status. Close it before delete.\n",fname);wgetchar=1;}else{if(ufd[k]->ufdfile[i].fmode==3)/*被保护的文件无法删除*/{printf("\nError.\'%s\' is in protect status. Close it before delete.\n",fname);wgetchar=1;}else{fpaddrno1=ufd[k]->ufdfile[i].fpaddr;xt");remove(str);n",fname);wgetchar=1;}}}else\'%s\' dose not exist.\n",fname);wgetchar=1;}}}2 Open函数void OpenF() /*Open File*/{char fname[MAXNAME];int i,k,j;if (strcmp(strupr(dirname),strupr(username))!=0) /*在自己的目录里才能打开*/{printf("\ can only open in yourself dir.\n");wgetchar=1;}else{k=ExistD(username);for(j=0;j<fcount[k];j++){printf("%15s",ufd[k]->ufdfile[j].fname);}printf("\nPlease input FileName:");gets(fname);fopen==1)'%s\' is in openstatus.\n",fname);wgetchar=1;}else{ifopen[k][i].ifopen=1;mode==0)/*根据文件的模式设置打开模式*/{ ifopen[k][i].openmode=0;}else if(ufd[k]->ufdfile[i].fmode==1){ifopen[k][i].openmode=1;}else if(ufd[k]->ufdfile[i].fmode==2){ifopen[k][i].openmode=2;}else ifopen[k][i].openmode=3;printf("\n\'%s\' is openedsuccessfully\n",fname);wgetchar=1;}}else\'%s\' dose not exist.\n",fname);wgetchar=1;}}}3 Close函数void CloseF() /*Close File*/{char fname[MAXNAME];int i,k,j;if (strcmp(strupr(dirname),strupr(username))!=0) /*不在自己的目录里没法进行*/{printf("\ can only close file in yourself dir.\n");wgetchar=1;}else{k=ExistD(username);for(j=0;j<fcount[k];j++)/*列出已经打开的文件*/ {if(ifopen[k][j].ifopen==1)name);}printf("\nPlease input FileName:");gets(fname);fopen=0;/*关闭文件*/printf("\n \'%s\' closed successfully\n",fname);wgetchar=1;}else\'%s\' dose not exist.\n",fname);wgetchar=1;}}}4 Write函数void WriteF() /*Write File*/{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:Open file first\n");printf("Opened File(s) List:\n");k=ExistD(dirname);fopen==1)name);n++;}if((n%4==0)&&(n!=0)) printf("\n");}printf("\n%d files openned.\n",n);if (n==0) wgetchar=1;fopen==1)penmode==1)||(ifopen[k][i].openmode==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\nYou have write filesuccessfully!!");fclose(fp_file);wgetchar=0;}else if(ifopen[k][i].openmode==0)'%s\' has been opened with READ ONLY mode. It isn\'t write.\n",fname);wgetchar=1;}else'%s\' has been opened with PROTECT mode. It isn\'t write.\n",fname);wgetchar=1;}}else '%s\' is in closing status. Please open it before write\n",fname);wgetchar=1;}}else \'%s\' does not exist.\n",fname);wgetchar=1;}}}【程序流程设计】1总的功能结构图:2部分子模块程序流程图(1)打开命令的程序流程图:(2)关闭命令的程序流程图:(3)写命令的程序流程图:(4)删除命令的程序流程图:【测试结果】1 删除文件2 打开的文件不能删除3 打开文件,其中已经打开的文件不能再次打开3 关闭文件4 写文件,其中只有打开了文件才能写入5 写文件6 只读文件和保护文件不能写入7 其他函数【参考文献】计算机操作系统,西安电子科技大学出版社,方敏主编,部分函数含义引用于【源程序清单】#include""#include""#include""#include""#define MAXNAME 25 /*the largest length ofmfdname,ufdname,filename*/#define MAXCHILD 50 /*the largest child每个用户名下最多有50个文件*/#define MAX (MAXCHILD*MAXCHILD) /*the size of fpaddrno*/ typedef struct/*the structure of OSFILE定义主文件*/{int fpaddr; /*file physical address*/int flength; /*file length*/int fmode; /*file mode:0-Read Only;1-WriteOnly;2-Read and Write; 3-Protect;*/char fname[MAXNAME]; /*file name*/} OSFILE;typedef struct/*the structure of OSUFD定义用户文件目录*/{char ufdname[MAXNAME]; /*ufd name*/OSFILE ufdfile[MAXCHILD]; /*ufd own file*/}OSUFD;typedef struct/*the structure of OSUFD'LOGIN定义登陆*/ {char ufdname[MAXNAME]; /*ufd name*/char ufdpword[8]; /*ufd password*/} OSUFD_LOGIN;typedef struct/*file open mode定义操作方式*/{int ifopen; /*ifopen:0-close,1-open*/int openmode; /*0-read only,1-write only,2-read and write,3-protect*/}OSUFD_OPENMODE;void LoginF(); /*LOGIN FileSystem*/void DirF(); /*Dir FileSystem*/void CreateF(); /*Create File*/void DeleteF(); /*Delete File*/void ModifyFM(); /*Modify FileMode*/void OpenF(); /*Open File*/void CloseF(); /*Close File*/void ReadF(); /*Read File*/void WriteF(); /*Write File*/void QuitF(); /*Quit FileSystem*/void CdF(); /*Change Dir*/void help();char *rtrim(char *str); /*remove the trailing blanks.*/char *ltrim(char *str); /*remove the heading blanks.*/void InputPW(char *password); /*input password,use '*' replace*/int ExistD(char *dirname); /*Whether DirNameExist,Exist-i,Not Exist-0*/int WriteF1(); /*write file*/int ExistF(char *filename); /*Whether FileNameExist,Exist-i,Not Exist-0*/void SetPANo(int RorW); /*Set physical address num*/int FindPANo(); /*find out physical address num*/int ucount=0; /*the count of mfd's ufds用户数*/int fcount[MAXCHILD]; /*the count of ufd's files子文件数*/ int loginsuc=0; /*whether login successfully登陆成功*/char username[MAXNAME]; /*record login user's name22用户名*/char dirname[MAXNAME];/*record current directory使用的用户目int fpaddrno[MAX]; /*record file physical address num物理地址号,存放自己所创建的所有文件的地址*/int wgetchar; /*whether getchar()*/OSUFD *ufd[MAXCHILD]; /*ufd and ufd own files*/OSUFD_LOGIN ufd_lp;;QuitF();exit(0);break;case 10:clrscr();choiceend=1;break;case 11:CdF();choiceend=1;break;;}char *rtrim(char *str) /*remove the trailing blanks.去掉登陆用户名的尾空格*/{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) /*remove the heading blanks.去掉登陆用户名的头空格*/{strrev(str);name),strupr(filename))==0)exist=1;break;}if (exist) return(i);else return(-1);}int FindPANo() /*find out physical address num*/ {int i;for(i=0;i<MAX;i++)if (fpaddrno[i]==0){fpaddrno[i]=1;break;if (i<MAX) return(i);else return(-1);}int WriteF1() /*write file*/{int length=0;char c;printf("Please input text(\'#\' stands for end):\n");while((c=getchar())!='#'){fprintf(fp_file,"%c",c);if (c!='\n') length++;}fprintf(fp_file,"\n");fclose(fp_file);return(length);}void LoginF() /*LOGIN FileSystem登陆函数*/{charloginame[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\nLogin successful! Welcome to this FileSystem\n\n");loginsuc=1;return;}else Try Again(Y/N):");gets(a);ltrim(rtrim(a));if (strcmp(strupr(a),"Y")==0){loginsuc=0;flag=0;}else if(strcmp(strupr(a),"N")==0){loginsuc=0;flag=0;return;}}}}else/*user not exist*/{printf("New Password(<=8):");InputPW(loginpw); /*input new password,use '*' replace*/printf("\nConfirm Password(<=8):"); /*input new password,use '*' replace*/InputPW(logincpw);if (strcmp(loginpw,logincpw)==0)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_uf d)!=0;i++,fcount[j]++)fopen=0;ifopen[j][i].openmode=4;}fclose(fp_ufd);}fclose(fp_mfd);ucount=j;SetPANo(0);printf("\n\nLogin Successful! Welcome to this System\n\n");loginsuc=1;return;}else Try Again(Y/N):");gets(a);ltrim(rtrim(a));if (strcmp(strupr(a),"Y")==0){loginsuc=0;flag=0;}else if(strcmp(strupr(a),"N")==0){loginsuc=0;flag=0;return;}}}}}}void DirF() /*Dir FileSystem主目录*/{int i,j,count=0;char sfmode[25],sfpaddr[25],str[25];clrscr();if (strcmp(strupr(ltrim(rtrim(dirname))),"")!=0)");getch();clrscr();printf("\n%14s%16s%14s%10s%18s\n","FileName","FileAddres s","FileLength","Type","FileMode");}itoa(ufd[j]->ufdfile[i].fpaddr,str,10);mode==0) strcpy(sfmode,"Read Only");else if(ufd[j]->ufdfile[i].fmode==1)strcpy(sfmode,"Write Only");elseif(ufd[j]->ufdfile[i].fmode==2)strcpy(sfmode,"Read And Write");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 %3d file(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 %3d dir(s),%5d file(s)\n",ucount,count);}}void CreateF() /*Create File*/{int fpaddrno,flag=1,i;char fname[MAXNAME],str[50],str1[50],a[25];char fmode[25];if (strcmp(strupr(dirname),strupr(username))!=0)You must create file in your own dir.\n");wgetchar=1;}else{printf("\nPlease input FileName:");gets(fname);ltrim(rtrim(fname));if (ExistF(fname)>=0){printf("\nError. Name \'%s\' has alreadyexisted.\n",fname);wgetchar=1;}else{printf("Please input FileMode(0-Read Only, 1-Write Only, 2-Read and Write, 3-Protect):");gets(fmode);ltrim(rtrim(fmode));if((strcmp(fmode,"0")==0)||(strcmp(fmode,"1")==0)||(strc mp(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("Input text now(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;}else if(strcmp(strupr(a),"N")==0){flag=0;wgetchar=1;}}printf("\n\'%s\' has been created successfully!\n",fname);}else{printf("\nFail!No Disk Space. Please format your disk.\n");wgetchar=1;}}else{printf("\nError. FileMode\'s Range is 0-3\n");wgetchar=1;}}}}。

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

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

计算机系课程设计实验报告课程名称操作系统课程设计实验学期 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——显示当前注册目录下的所有文件信息,包括文件名、文件长度、文件操作权限。

操作系统课程设计项目参考

操作系统课程设计项目参考

滴加碘液后
滴加碘液前
12/12/2021
第十二页,共二十三页。
消化(xiāohuà):在消化道内将食物分解成可吸收 (xīshōu)的成分的过程
(包括物理性消化和化学性消化)
吸收(xīshōu):营养物质通过消化道壁进入循环 系统的过程
12/12/2021
第十三页,共二十三页。
消化(xiāohuà)和吸收的过程
12/12/2021
第十九页,共二十三页。
练习(liànxí)
• 2、分析数据,指出(zhǐ chū)哪一部分消化道中消化液最多。
• 在每天摄入800克食物和1200毫升水的情况下, 消化腺大致分泌以下数量消化液。 1500毫升唾液 2000毫升胃液 1500毫升肠液 500毫升胆汁 1500毫升胰液
12/12/2021
第二十二页,共二十三页。
内容 总结 (nèiróng)
第二节。食物中的营养物质是在消化系统中被消化和吸收的。这粒西瓜籽在姗姗的消化道内, 经过了难忘的时光。它先遇到像轧钢机似的上、下尖硬的怪物,差点儿将它压得粉身碎骨。后来它
No 钻进了一条(yī tiáo)又长又窄的迷宫,它在这里走了很久,身边的许多物质都神秘地消失了。走出迷
唾液腺、胃腺(wèixiàn)、肝脏、胰腺、肠腺
1、淀粉在__口__腔__开始消化、蛋白质在____开始胃消化、脂肪在_______开始 消小化肠。
2、胆汁是一种消化液,但不含消化酶,起乳化脂肪的作用。
二、人体消化、吸收的主要器官—— _____小肠 能 训 练解
胰脏:分泌(fēnmì)胰液 肠腺:分泌肠液
肝脏:最大的腺体,分泌胆汁。 胆汁无消化酶,有乳化脂肪 的
作用。
第七页,共二十三页。

操作系统课程设计Linux

操作系统课程设计Linux

操作系统课程设计Linux一、教学目标本课程的教学目标是使学生掌握Linux操作系统的核心概念、原理和应用技能。

通过本课程的学习,学生将能够:1.理解操作系统的基本原理,包括进程管理、内存管理、文件系统和输入/输出系统。

2.掌握Linux操作系统的安装、配置和管理方法。

3.熟练使用Linux命令行界面,进行日常操作和系统管理。

4.掌握Linux常用命令、 shell脚本编写和系统监控工具的使用。

5.了解Linux操作系统在服务器、嵌入式设备和云计算等领域的应用。

二、教学内容本课程的教学内容分为五个部分:1.操作系统概述:介绍操作系统的定义、功能和分类,以及Linux操作系统的历史和发展。

2.进程管理:讲解进程的基本概念、进程控制、进程同步和互斥、死锁及其解决方法。

3.内存管理:介绍内存分配与回收策略、内存保护、虚拟内存和分页分段机制。

4.文件系统:讲解文件和目录结构、文件访问控制、文件系统性能优化和磁盘空间分配策略。

5.输入/输出系统:介绍I/O设备管理、中断和DMA机制、设备驱动程序和I/O调度策略。

三、教学方法本课程采用多种教学方法相结合的方式,以提高学生的学习兴趣和主动性:1.讲授法:教师讲解操作系统的核心概念和原理,引导学生掌握基本知识。

2.讨论法:学生针对实际案例和问题进行讨论,培养学生的思考和分析能力。

3.案例分析法:分析Linux操作系统的实际应用案例,使学生了解操作系统的应用场景。

4.实验法:安排实验室课时,让学生亲自动手进行系统安装、配置和调试,提高学生的实践能力。

四、教学资源本课程的教学资源包括:1.教材:选用权威、实用的Linux操作系统教材,如《Linux操作系统原理与应用》。

2.参考书:提供相关的学术论文、技术博客和在线文档,供学生拓展阅读。

3.多媒体资料:制作课件、教学视频和演示文稿,辅助学生理解和记忆。

4.实验设备:提供Linux服务器、虚拟机和实验室环境,让学生进行实际操作。

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

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

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
}
五、编译过程截图
(下面是一个例子,换上你自己的图)
六、测试用例
(下面是一个例子,换上你自己的)
文字叙述一下测试过程的实例。

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

等等。

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

文件管理课程设计报告

文件管理课程设计报告

操作系统课程设计报告姓名:xxx______学号:xxxxxxxxxxxx__专业年级:软件2班指导教师:__xx_2016年 3月1日1 概述目的:本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。

意义: 本系统是基于linux平台运行在终端上的虚拟二级文件管理系统。

模拟真正的文件管理系统,并采用用户登录机制对文件和文件夹进行创建,修改,删除的操作.对于文件夹而言,可以进行创建删除的操作;对于文件而言,可以创建,修改,删除.删除文件夹时,同时删除相应文件夹下的文件。

采用用户登录使得用户管理文件更方便,并形成了二级的文件管理模式.主要任务:为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。

操作系统实验报告

操作系统实验报告

操作系统实验报告专业:软件工程姓名:李程星学号:2011221104220092实验一操作系统的用户界面LINUX操作系统提供了图形用户界面和命令行界面,本实验主要熟悉命令行界面,为后续的实验编程做准备。

一、系统启动1. 开机,选择进入Linux系统,约40秒后系统启动成功,系统提示输入用户名:user输入口令:111111 然后进入Linux系统桌面。

2.进入Linux命令行方式单击小红帽图标,选择“系统工具”,单击“终端”图标,出现Linux的shell提示符.....@......$,,即可输入命令。

实验二进程管理一、实验目的(1)加深对进程概念的理解,明确进程和程序的区别。

(2)进一步认识并发执行的实质。

二、实验内容1、进程的创建执行下面的程序,分析执行的结果。

#include <stdio.h>main(){ int i;printf("just 1 process.\n");i=fork();if (i==0)printf("I am child.\n");elseif (i>0)printf("I am parent.\n");elseprintf("fork() failed.\n");printf("program end.\n");}输出结果:just 1 process.I am parent.program end.I am a child.program end.2、进程的同步执行下面的程序,分析执行的结果。

#include <stdio.h>main(){ int i;printf("just 1 process.\n");i=fork();if (i>0){printf("I am parent.\n");wait();}elseif (i==0) {printf("I am child.\n");exit(1);}printf("program end.\n");}输出结果:just 1 process.I am parent.I am child.program end.3、进程的延迟执行下面的程序,分析执行的结果。

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

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

《操作系统》课程设计题目:设计一个简单二级文件系统专业:计算机科学与技术年级:文专计081—1姓名:张庆龙学号:0126指导教师:翟一鸣时间:2010年7 月15日一、设计内容1、可以实现下列几条命令。

Format 格式化Dir 列文件目录Create 创建文件Delete 删除文件Deldir 删除目录Open 打开文件Close 关闭文件Search 查询文件Copy 拷贝文件Cut 剪切文件二、开发环境Windows操作系统Microsoft Visual C++三、分析设计(一)实验原理通过程序模拟Linux文件系统,用一个二进制文件(FileSystem.disk)来模拟磁盘.设计一个多用户的二级文件系经统、实现一般的创建文件、目录,删除文件、目录,切换目录,打开、关闭文件、读写文件等操作。

文件系统,包含格式化,显示文件(目录),创建文件等几个简单命令的实现,而且能完成超级块的读写,节点的读写等过程. 本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户账号下的文件。

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

1.程序执行流程图:2.数据块的分配和回收(二)程序结构设计FileSystem类负责管理磁盘空间和磁盘内存I节点,负责对磁盘空间和磁盘数据进行优化管理。

并提代接口言方法供用户或程序调用。

(三)数据结构int physic[100]; //文件地址缓冲区int style=1; //文件的类型char cur_dir[10]="root"; //当前目录int search_i=0;struct command{char com[10];}cmd[20];struct block{int n; //空闲的盘快的个数int free[50]; //存放空闲盘快的地址int a; //模拟盘快是否被占用}memory[20449];struct block_super{int n; //空闲的盘快的个数int free[50]; //存放进入栈中的空闲块int stack[50]; //存放下一组空闲盘快的地址}super_block;struct node //i结点信息{int file_style; //i结点文件类型int file_length; //i结点文件长度int file_address[100]; //i结点文件的物理地址 char file_message[100];} i_node[640];struct dir //目录项信息{char file_name[10]; //文件名int i_num; //文件的结点号char dir_name[10]; //文件所在的目录} root[640];四. 运行示例及结果分析菜单删除目录文件查询拷贝剪切五、程序实现详细程序请参见源文件, 在此只列举3点1、剪切文件程序片段:void cut(char *tmp,char *newname){int i; //,jchar t[20];_strtime(t);for(i=0;i<640;i++)if(strcmp(newname,root[i].file_name)==0){break;}if(i==640){printf("目录不存在,不能剪切!\n");return;}for(i=0;i<640;i++){if(strcmp(tmp,root[i].file_name)==0){strcpy(root[i].dir_name,newname);strcpy(i_node[root[i].i_num].change_t,t);//printf("剪切成功!\n");//return;}}if(i==640)printf("文件不存在,执行失败!\n");}2.无文件查询程序片段:void search(char* filename){int sign=0;for(search_i=0;search_i<640;search_i++){if(strcmp(root[search_i].file_name,filename)==0) //查询文件中所在目录信息和当前目录信息相同的数据{sign=1;int k=root[search_i].i_num;printf("%s\t",root[search_i].file_name); //文件名printf(" %d\t",i_node[k].file_style); //文件的类型printf(" %d\t\t",i_node[k].file_length); //文件的长度printf("%s\n",root[search_i].dir_name); //文件所在的目录}}if (sign==0){printf("%s\n","未找到该文件!");}}六、心得与体会这次设计中遇到最难的问题就是拷贝功能的实现,由于之前没有接触过拷贝的原理,所以通过和同伴的讨论和试验,终于突发奇想的运用改变文件路径的源代码和创建文件相结合,终于实现了拷贝功能,能够将一个文件从一个目录拷贝到另一目录(即先移动过去然后再在原位置创建一个原文件),可是却无法拷贝到root根目录,为了解决这个问题,又在创建文件的程序里添加了一个判断是否为根目录的语句,可是后来又发现了真个系统存在重命名的问题。

模拟简单二级文件管理系统

模拟简单二级文件管理系统

模拟简单二级文件管理系统简单二级文件管理系统是一种用于管理和组织计算机文件的软件系统。

它提供了一种方便的方式来浏览、创建、修改和删除文件,以及对文件进行分类和搜索。

本文将介绍如何设计和实现一个模拟简单二级文件管理系统。

一、系统概述模拟简单二级文件管理系统是一个基于命令行界面的文件管理系统。

用户可以通过输入不同的命令来执行文件管理操作,如创建文件夹、创建文件、查看文件列表、移动文件等。

系统支持两级文件结构,即可以在根目录下创建文件夹,并在文件夹下创建文件。

系统还提供了文件搜索功能,用户可以根据文件名或文件类型进行搜索。

二、系统功能1. 创建文件夹:用户可以通过输入命令,在指定路径下创建一个新的文件夹。

2. 创建文件:用户可以通过输入命令,在指定路径下创建一个新的文件。

3. 查看文件列表:用户可以通过输入命令,查看指定路径下的文件夹和文件列表。

4. 移动文件:用户可以通过输入命令,将指定文件或文件夹移动到目标路径下。

5. 复制文件:用户可以通过输入命令,将指定文件或文件夹复制到目标路径下。

6. 删除文件或文件夹:用户可以通过输入命令,删除指定的文件或文件夹。

7. 文件搜索:用户可以通过输入命令,根据文件名或文件类型进行文件搜索。

三、系统设计1. 数据结构系统使用树状结构来表示文件系统,每个节点表示一个文件夹或文件。

节点包含以下属性:- 名称:节点的名称,可以是文件夹名称或文件名称。

- 类型:节点的类型,可以是文件夹或文件。

- 父节点:指向父节点的指针,用于表示文件夹的层次结构。

- 子节点列表:包含子节点的列表,用于表示文件夹下的文件和文件夹。

2. 系统流程系统的主要流程如下:- 用户输入命令。

- 系统解析命令,判断执行的操作类型。

- 根据操作类型,执行相应的操作。

- 更新文件系统的数据结构。

- 返回执行结果给用户。

四、系统实现系统可以使用编程语言来实现,如Python。

以下是一个简单的实现示例:```pythonclass Node:def __init__(self, name, type): = nameself.type = typeself.parent = Noneself.children = []class FileSystem:def __init__(self):self.root = Node("root", "folder")def create_folder(self, path, name):# 创建文件夹的逻辑def create_file(self, path, name):# 创建文件的逻辑def list_files(self, path):# 查看文件列表的逻辑def move_file(self, source_path, target_path): # 移动文件的逻辑def copy_file(self, source_path, target_path): # 复制文件的逻辑def delete_file(self, path):# 删除文件的逻辑def search_file(self, path, keyword):# 文件搜索的逻辑# 创建文件系统对象file_system = FileSystem()# 用户输入命令command = input("请输入命令:")# 解析命令并执行相应的操作# ...# 更新文件系统的数据结构# ...# 返回执行结果给用户# ...```以上是一个简单的模拟二级文件管理系统的设计和实现。

模拟文件系统的设计与实现

模拟文件系统的设计与实现
文件的读:read文件的写:write文件关闭:close
删除文件:delete创建子目录:mkdir删除子目录:rmdir
列出文件目录:dir退出:exit
系统执行流程图
3.详细设计
主要数据结构:
#define MEM_D_SIZE 1024*1024 ame,name))
break;
}
if(j<MSD+2) /*文件已经存在*/
模拟二级文件管理系统的课程设计目的是通过研究Linux的文件系统结构,模拟设计一个简单的二级文件系统,第一级为主目录文件,第二级为用户文件。
2总体设计
结合数据结构、程序设计、计算机原理等课程的知识,设计一个二级文件系统,进一步理解操作系统。
文件的创建:create文件关闭:close文件的打开:open
strcpy(cur_dir->directitem[i].name,name);
cur_dir->directitem[i].firstdisk = j;
cur_dir->directitem[i].size = 0;
cur_dir->directitem[i].next = j;
cur_dir->directitem[i].property = '0';
char Space = 32;
char Endter= '\n';
for(i=0;i<len;i++)
{
if(buf[i] == '$')
buf[i] = Space;
else if(buf[i] == '#')
buf[i] = Endter;

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

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

题目一模拟操作系统设计设计一个模拟操作系统管理程序,实现以下管理功能: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.效率:文件系统应提供高效的操作方法,包括目录和文件的操作。

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

操作系统课程设计为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.在程序设计方面,我们将采用一种灵活、可扩展的架构,以便能够轻松地添加新的功能和模块。

二级目录文件讲解

二级目录文件讲解

青岛理工大学操作系统课程设计报告院(系):计算机工程学院专业:计算机科学与技术班级:_计算122学生姓名:马鹏__学号: 201207059欧阳涛__201207060 题目:___模拟二级文件管理系统__起迄日期:_ 2015.07.13-2015.07.24___设计地点:现代教育中心B303、B305指导教师:熊晓芸2014—2015年度第 2 学期完成日期: 2015 年 7 月 24 日一、课程设计目的通过研究Linux的文件系统结构,模拟设计一个简单的二级文件系统,第一级为主目录文件,第二级为用户文件。

进行操作系统课程设计主要是在学习操作系统课程的基础上,在完成操作系统各部分实验的基础上,对操作系统的整体进行一个模拟,通过实践加深对各个部分的管理功能的认识,还能进一步分析各个部分之间的联系,最后达到对完整系统的理解。

同时,可以提高运用操作系统知识解决实际问题的能力;锻炼实际的编程能力、创新能力及团队组织、协作开发软件的能力;还能提高调查研究、查阅技术文献、资料以及编写软件设计文档的能力。

二、课程设计内容及小组成员分工1.设计内容:通过研究Linux的文件系统结构,模拟设计一个简单的二级文件系统1)能够实现下列命令:●Login 用户登录●Dir 列文件目录●Create 创建文件●Delete 删除文件●Open 打开文件●Close 关闭文件●Read 读文件●Write 写文件●Bit 显示外部存储空间的位示图(按16*16的形式显示)2)系统能检查键入命令的正确性,出错时应能显示出错原因3)列目录时要列出文件目录、文件名和文件长度,以及系统总容量,占用容量、空闲容量(容量以字节为单位)4)不允许对打开的文件执行重复打开操作或执行删除操作5)外部存储空间的大小为256个Block,每个Block的大小为512字节,盘块号从1开始编号6)文件系统对外部存储空间采用连续分配的方式控制块的大小为32字节,其中文件名字占8个字节,参照MS-DOS设计文件控制块的数据结构;FAT由文件名、起始盘块号,长度、最后一块字节数四部分组成,占12个字节,磁盘的目录最大能存放256个目录项。

操作系统课程设计文档

操作系统课程设计文档

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

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

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

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

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

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

文件系统设计

文件系统设计

1设计题目---------------------------------------------------12需求分析---------------------------------------------------13系统概要设计(1)系统的主要功能---------------------------------------- -----1 (2)系统模块功能结构-------------------------------------------1 (3)运行环境要求------------------------------------------------1 (4)数据结构设计------------------------------------------------14系统的详细设确定程序设计的各个模块的算法及内部的数据组织,包括主要代码并描述各种算法--------------3 5系统的主要源代码-------------------------------------------5 6系统测试及调试----------------------------------------------15 7心得体会,概述总结自己----------------------------------18 8主要参考文献-------------------------------------------------18设计题目:文件系统设计需求分析:文件系统是linux操作系统的重要组成部分,Linux文件具有强大的功能。

文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。

从这我们可以看出文件系统的重要性,要好好掌握,通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。

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

操作系统课程设计--为Linux系统设计一个简单的二级文件系统操作系统课程设计报告题目: 为Linux系统设计一个简单的二级文件系统指导老师:时间:2012.8.30一课程设计的目的课程设计目的使学生熟悉文件管理系统的设计方法;加深对所学各种文件操作的了解及其操作方法的特点。

通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。

同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。

二课程设计的要求1.可以实现下列几条命令:login用户登录dir 列目录create创建文件delete 删除文件open 打开文件close 关闭文件read 读文件write 写文件2.列目录时要列出文件名,物理地址,保护码和文件长度3.源文件可以进行读写保护三算法设计本次二级文件系统主要分为五大模块,分别是用户登录模块、新建目录模块、新建文件模块、删除文件模块和读取文件模块。

用户登录成功后才可以进行其他模块的操作。

1 用户登录模块用户登录模块要求用户输入用户,当输入正确后才能进行其他模块操作,否则提示用户名不存在并询问用户是否用此名进行注册。

若用户名未满,则提示注册成功,否则提示用现有注册用户,进行登录,并返回到登录界面。

用户登录模块流程图如图1所示。

否是 否 是图1 用户登录模块流程图2新建文件模块新建文件模块是在用户出入create 指令后进行的,进入后会要求用户输入文件名,并判断文件名是否存在,若没有则在要求用户输入文件读写权限,否则重新输入新的文件名。

新建文件模块流程图如图2所示。

开输入login 输入用户用户是否存在进行其是否注册输入create 命令 开是否图2 新建文件流程图 3 删除文件模块 删除文件模块是根据用户鼠标右击时选择到的节点来确定要删除节点的名字与路径,然后判断该节点是目录还是文件。

若是文件则直接删除文件,若是目录则进入该目录再删除其全部文件。

删除文件模块流程图如图4所示。

否 输入文件名 文件名是否存在输入权开输如open 文件名 文件名是否存在提示无是图 4 删除文件模块流程图4读取文件模块 读取文件模块,要求用户要在文件打开的前提下,将磁盘中的内容读取到内存中。

读取文件流程图如图5所示。

是否输入权输如read 文件名 文件是否已打开 显示文提示文开Open文件是否存在图5 读取文件模块流程图5 写入文件模块写入文件模块,思路与读取文件模块将本相同,只是添加了对读写权限的判断。

6 遍历文件遍历文件,根据在用户登陆时,记录的值,在二维数组中,找到用户的所有文件对象,将相应的必须属性全部打印出来。

四程序源代码1. 文件对象相关代码package com.file;import java.io.Serializable;public class FilePro implements Serializable{String filename;String content;String username;int flag;int protect;public FilePro(String filename,String username,String content,int flag,int protect){ this.filename = filename;ername = username;this.content = content;this.flag = flag;this.protect = protect;}}2. 文件读写操作package com.file;import java.io.*;import java.util.*;public class FileCon {Object [][] data = new Object[7][100];ObjectInputStream in = null;ObjectOutputStream out = null;String path = "D:\\file";public FileCon(){for(int i = 0;i<7;i++)for(int j = 0;j<100;j++){data[i][j] = new FilePro("",null,"",1,0);}}public Object[][] readData(){try {in = new ObjectInputStream(new BufferedInputStream(new FileInputStream(path)));data = (Object[][]) in.readObject();} catch(EOFException e){} catch (Exception e) {}return data;}public void writeData(Object[][] data){try {out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(path)));out.writeObject(data);out.flush();} catch (Exception e) {e.printStackTrace();}}}3.用户名操作public class UserCon {List<String> list = new ArrayList<String>();ObjectInputStream in = null;ObjectOutputStream out = null;String path = "D:\\user";public List<String> readUser(){try {in = new ObjectInputStream(new BufferedInputStream(new FileInputStream(path)));list = (List<String>) in.readObject();} catch(EOFException e){} catch (Exception e) {}return list;}public void writeUser(List<String> list){try {out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(path)));out.writeObject(list);out.flush();} catch (Exception e) {e.printStackTrace();}}}4.主程序package com.file;import java.util.*;public class FileSystem {Object[][] data = new Object[7][100];FileCon fc = new FileCon();List<String> user = new ArrayList<String>();UserCon uc = new UserCon();String[] cmd = new String[2];int currentuser = 0;public FileSystem() {data = fc.readData();user = uc.readUser();}public static void main(String[] args) {FileSystem fs = new FileSystem();fs.help();}public void help() {System.out.println("欢迎使用该文件系统");System.out.print("create ");System.out.println("创建文件");System.out.print("dir ");System.out.println("列目录文件");System.out.println("exit 退出系统");System.out.println("以下命令需加文件名");System.out.println("eg:open ***");System.out.print("open ");System.out.println("打开文件");System.out.print("close ");System.out.println("关闭文件");System.out.print("read ");System.out.println("读文件");System.out.print("write ");System.out.println("写文件");System.out.print("delete ");System.out.println("删除文件");command();}public void command() {System.out.print("root:>");String comd = null;Scanner input = input = new Scanner(System.in);comd = input.nextLine();String[] cmd = new String[2];cmd = comd.split(" ");if (cmd[0].equals("login"))login();else if (cmd[0].equals("create"))create();else if (cmd[0].equals("dir"))dir();else if (cmd[0].equals("delete"))delete(cmd[1]);else if (cmd[0].equals("open"))open(cmd[1]);else if (cmd[0].equals("close"))close(cmd[1]);else if (cmd[0].equals("read"))read(cmd[1]);else if (cmd[0].equals("write"))write(cmd[1]);else if (cmd[0].equals("exit")){System.out.println("退出系统!");System.exit(0);}else System.out.println("指令错误!!");command();}public void login() {boolean f = false;System.out.println("请输入用户名:");Scanner input = input = new Scanner(System.in);String username = input.next();for (int i = 0; i < user.size(); i++) {if (user.get(i).equals(username)) {System.out.println("登陆成功!!");currentuser = i;f = true;break;}}if (!f) {System.out.println("该用户不存在,是否以此用户名注册?y注册,其他返回");String cho = input.next();if (cho.equals("y")) {if (user.size() == 7)System.out.println("对不起用户已满,请利用其他已注册账户登录");else {user.add(username);uc.writeUser(user);System.out.println("注册成功!请重新登录");}login();}}command();}// 目录public void dir() {System.out.println("文件名\t" + "用户名\t" + "物理地址\t" + "保护码\t" + "文件长度");for (int i = 0; i < 100; i++) {FilePro fp1 = (FilePro) data[currentuser][i];if (!fp1.filename.equals(""))System.out.println(fp1.filename + "\t" + ername + "\t"+ currentuser + i + "\t" + fp1.protect + "\t"+ fp1.content.length());}command();}// 创建文件public void create() {Scanner input = input = new Scanner(System.in);boolean f = true;boolean fl = false;String filename = null;do{fl = false;System.out.print("请输入文加名:");filename = input.next();for (int i = 0; i < 100; i++) {FilePro fp1 = (FilePro) data[currentuser][i];if (fp1.filename.equals(filename)) {System.out.println("文件已存在!!");fl = true;break;}}}while(fl);System.out.print("请输入权限:");int protect = input.nextInt();FilePro fp = new FilePro(filename, user.get(currentuser), "", 1,protect);for (int i = 0; i < 100; i++) {FilePro fp1 = (FilePro) data[currentuser][i];if (fp1.filename.equals("")) {data[currentuser][i] = fp;fc.writeData(data);System.out.println("创建成功!!");f = false;break;}if (f) {System.out.println("磁盘已满");}command();}// 删除文件public void delete(String file) {boolean f = true;for (int i = 0; i < 100; i++) {FilePro fp1 = (FilePro) data[currentuser][i];if (fp1.filename.equals(file)) {fp1.filename = "";fp1.content = null;fp1.flag = 1;ername = null;fc.writeData(data);System.out.println("删除成功!!");f = false;break;}}if (f) {System.out.println("无此文件");}command();}// 打开文件public void open(String file) {boolean f = true;for (int i = 0; i < 100; i++) {FilePro fp1 = (FilePro) data[currentuser][i];if (fp1.filename.equals(file)) {if (fp1.flag == 0)System.out.println("文件已打开!");else {fp1.flag = 0;System.out.println("文件打开成功!!");}f = false;break;}if (f) {System.out.println("无此文件");}command();}// 关闭文件public void close(String file) {boolean f = true;for (int i = 0; i < 100; i++) {FilePro fp1 = (FilePro) data[currentuser][i];if (fp1.filename.equals(file)) {if (fp1.flag == 1)System.out.println("文件未打开!");else {fp1.flag = 1;System.out.println("文件关闭成功!!");}f = false;break;}}if (f) {System.out.println("无此文件");}command();}// 读文件public void read(String file) {boolean f = true;for (int i = 0; i < 100; i++) {FilePro fp1 = (FilePro) data[currentuser][i];if (fp1.filename.equals(file)) {if (fp1.flag == 1)System.out.println("文件未打开!请先将文件打开!");else {System.out.println(fp1.content);}f = false;break;}}if (f) {System.out.println("无此文件");}command();}// 写文件public void write(String file) {Scanner input = input = new Scanner(System.in);boolean f = true;for (int i = 0; i < 100; i++) {FilePro fp1 = (FilePro) data[currentuser][i];if (fp1.filename.equals(file)) {if (fp1.flag == 1)System.out.println("文件未打开!请先将文件打开!");else {if (fp1.protect != 0)System.out.println("对不起,您没有写入的权限!");else {System.out.println("请输入要写入的内容:");String ss = input.next();fp1.content = fp1.content + ss;fc.writeData(data);System.out.println("写入成功");}}f = false;break;}}if (f) {System.out.println("无此文件");}command();}}五程序运行截图六心得体会对于本次操作系统课程设,由于对二级文件的内容比较陌生,刚起步阶段花了很大时间去思考,但是仍然还是比较模糊。

相关文档
最新文档