操作系统课程设计 (2)
大学生操作系统课程设计

大学生操作系统课程设计一、教学目标本课程的教学目标分为三个维度:知识目标、技能目标和情感态度价值观目标。
1.知识目标:通过本课程的学习,学生需要掌握操作系统的基本概念、原理和关键技术,包括进程管理、内存管理、文件系统和输入/输出系统等。
2.技能目标:培养学生具备操作系统实验操作和程序设计的能力,能够运用所学知识分析和解决实际问题。
3.情感态度价值观目标:培养学生对操作系统学科的兴趣和热情,培养学生的创新意识和团队合作精神。
二、教学内容本课程的教学内容主要包括操作系统的基本概念、原理和关键技术。
1.教材章节:(1)引言和概述(2)进程管理(3)内存管理(4)文件系统(5)输入/输出系统(6)并发程序设计(7)操作系统安全与保护2.具体内容:(1)操作系统的定义、作用和分类(2)进程的基本概念、状态和控制(3)进程同步与互斥(4)死锁与饥饿(5)内存分配与回收策略(6)虚拟内存技术(7)文件和目录结构(8)文件访问控制和保护(9)输入/输出管理(10)操作系统用户接口三、教学方法本课程采用多种教学方法相结合,以提高学生的学习兴趣和主动性。
1.讲授法:用于传授基本概念、原理和方法。
2.讨论法:鼓励学生积极参与课堂讨论,培养学生的思考和分析能力。
3.案例分析法:通过分析实际案例,使学生更好地理解和掌握操作系统原理。
4.实验法:培养学生动手实践能力,巩固所学知识。
四、教学资源1.教材:选用国内外优秀教材,如《操作系统概念》、《现代操作系统》等。
2.参考书:提供相关领域的参考书籍,丰富学生的知识体系。
3.多媒体资料:制作课件、教学视频等,提高课堂教学效果。
4.实验设备:配置充足的实验设备,确保学生能够充分进行实践操作。
五、教学评估本课程的教学评估采用多元化的评价方式,包括平时表现、作业、考试等,以全面客观地评价学生的学习成果。
1.平时表现:通过课堂参与、提问、讨论等方式,评估学生的学习态度和思考能力。
2.作业:布置适量的作业,评估学生对知识点的理解和运用能力。
《操作系统》课程设计

《操作系统》课程设计一、课程目标知识目标:1. 让学生掌握操作系统的基本概念,包括进程、线程、内存管理、文件系统等核心知识;2. 了解操作系统的历史发展,掌握不同类型操作系统的特点及使用场景;3. 掌握操作系统的性能评价方法和常用的调度算法。
技能目标:1. 培养学生运用操作系统知识解决实际问题的能力,如分析系统性能瓶颈、优化系统资源分配等;2. 培养学生具备基本的操作系统编程能力,如进程创建、线程同步、文件操作等;3. 提高学生的团队协作能力和沟通能力,通过小组讨论和项目实践,学会共同解决问题。
情感态度价值观目标:1. 培养学生对操作系统学科的兴趣,激发学生的学习热情,使其形成积极向上的学习态度;2. 培养学生具备良好的信息素养,尊重知识产权,遵循法律法规;3. 培养学生的创新精神和批判性思维,敢于质疑、勇于探索,形成独立思考的能力。
课程性质:本课程为计算机科学与技术专业的核心课程,旨在让学生掌握操作系统的基本原理和实现方法,提高学生的系统分析和编程能力。
学生特点:学生具备一定的编程基础和计算机系统知识,具有较强的逻辑思维能力和动手实践能力。
教学要求:结合学生特点和课程性质,注重理论与实践相结合,通过案例分析和项目实践,帮助学生将所学知识内化为具体的学习成果。
在教学过程中,关注学生的学习进度和反馈,及时调整教学策略,确保课程目标的实现。
二、教学内容1. 操作系统概述:介绍操作系统的定义、发展历程、功能、类型及特点,对应教材第一章内容。
- 操作系统的起源与发展- 操作系统的功能与类型- 操作系统的主要特点2. 进程与线程:讲解进程与线程的概念、状态、调度算法,对应教材第二章内容。
- 进程与线程的定义与区别- 进程状态与转换- 进程调度算法3. 内存管理:分析内存管理的基本原理、策略和技术,对应教材第三章内容。
- 内存分配与回收策略- 虚拟内存技术- 页面置换算法4. 文件系统:介绍文件系统的基本概念、结构、存储原理,对应教材第四章内容。
操作系统课程设计二级文件系统

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

操作系统实验课程设计(二)(参照实验五)学院:计算机科学与工程专业:信息管理工作与信息系统学号:2008142118 姓名:丁建东一、实验题目:设计一个Shell解释器二、实验目的:本设计的主要目的在于学会如何在Unix系统下创建进程和管理进程。
三、实验内容:实现一个简单的shell(命令行解释器),类似于bash, csh等。
要求实现的shell支持以下内部命令:1.cd <目录>更改当前的工作目录到另一个<目录>。
如果<目录>未指定,输出当前工作目录。
如果<目录>不存在,要求有适当的错误信息提示。
改命令应能够改变PWD的环境变量。
2.echo <内容>显示echo后的内容且换行。
3.help简短概要地输出你的shell的使用方法和基本功能。
4.jobs输出shell当前的一系列子进程,要求提供子进程的命名和PID号。
5.quit, exit, bye退出shell。
所有的内部命令应当优于在$PATH中同名的程序。
任何非内部命令必须请求shell创建一个新进程,且该子进程执行指定的程序。
这个新进程必须继承shell的环境变量和指定的命令行参数。
要求实现的shell支持以下内部命令:Batch Processing 如果shell启动带有一个文件名作为参数,打开该文件并执行文件里所有命令。
待所有进程全部结束退出shell。
四、实验思路:1.所用到的系统函数(1)打开目录void cd()API调用:int chdir(dir);getcwd(dir,dir_max);实现:改变当前目录,并判断目录是否存在。
(2)回应void echo()实现:用户输入字符串,以回车结束输入。
char echo_string[echo_len][echo_max];//用户输入命令,以空格符隔开,存为字符串数组按顺序输出用户输入的字符串。
(3)输出当前子进程Void jobs()API调用:shmget(),shmat()实现:开辟一个共享内存区,一旦创建一个子进程,就把该进程的进程ID和名字记字共享区里,在子进程结束的时候消除该记录。
《操作系统》课程设计说明书

河南城建学院《操作系统》课程设计说明书设计题目:UNIX/Linux文件系统分析专业:计算机科学与技术指导教师:邵国金耿永军陈红军班级:0614082学号:061408261姓名:贠炳森同组人:叶矿辉、陈宇计算机科学与工程系2011年1月7日前言在现在计算机更新如此迅速的时代要学好计算机软件技术,特别是操作系统的学习,不仅要努力学好课本上的基础知识,还要经常在图书馆看些有关这方面的书籍,而更重要的是要有足够的实践经验,也要注重和同学的交流,经常尝试性的做些小的操作系统,对自己技术的提升会有很大的帮助。
同时,学习计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。
如何学习和掌握操作系统技术的原理与实际技巧呢?除了听课和读书之外,最好的方法恐怕就是在实践中练习。
例如,自己设计一个小型操作系统,多使用操作系统,多阅读和分析操作源代码等。
但由于我们的条件和学时有限,在理论学习过程中没有给同学们提供更多的实验机会。
本操作系统课程设计,是给同学提供一个集中实验的机会。
希望同学们通过该设计加深对所学习课程的理解。
本设计是基于课程中学到的UNIX系统调用,使用操作系统环境是Red Hat Linux 9,言语开发环境是Linux的GNU C或C++。
我做的课程设计是:Linux/Unix文件系统分析。
在Linux系统下,使用与文件相关的系统调用实现对物理设备文件的读写,参照Linux系统源代码以及Grub 系统的源代码,对不同介质上的FAT格式文件系统进行分析。
要求在Linux环境下设计出C语言程序,实现以下功能:1)分析UNIX SysV/Linux系统引导记录的作用;2)分析UNIX SysV/Linux的超级块及其结构,并建立相关数据结构,通过编程实现UNIX SysV/Linux文件系统内各部分的定位。
3)至少要实现对给定i节点文件的只读访问目录一.系统环境 (3)1.1硬件环境 (3)1.2软件环境 (3)二.设计目的及要求 (3)三.总体设计 (5)四.详细设计 (6)五.调试与测试 (6)六.设计中遇到的问题及解决方法 (6)七.Linux/Unix文件系统分析源程序清单 (7)7.1 头文件 (7)7.2 示例程序 (10)八.运行结果及分析 (16)8.1 linux文件系统读取 (16)8.2 UNIX文件系统读取 (18)九.心得体会 (19)十.参考文献 (20)Linux/Unix文件系统分析一.系统环境1.1硬件环境cpu为pentium4双线程技术,频率为2.8GHZ,内存为256MB。
操作系统课程设计项目参考

滴加碘液后
滴加碘液前
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ì)胰液 肠腺:分泌肠液
肝脏:最大的腺体,分泌胆汁。 胆汁无消化酶,有乳化脂肪 的
作用。
第七页,共二十三页。
操作系统课程设计pintos

操作系统课程设计pintos一、教学目标本课程的目标是让学生了解和掌握操作系统的基本原理和概念,通过学习Pintos操作系统,使学生能够理解操作系统的核心机制,包括进程管理、内存管理、文件系统和输入/输出系统等。
在技能方面,学生应能够使用Pintos进行简单的操作系统设计和实现,提升编程能力和系统分析能力。
在情感态度价值观方面,学生应培养对计算机科学和操作系统的兴趣,增强解决实际问题的责任感和使命感。
二、教学内容教学内容将按照Pintos操作系统的结构和功能进行,包括:1. 操作系统的概述和基本概念;2. 进程管理,包括进程的创建、调度和同步;3. 内存管理,包括物理内存管理和虚拟内存管理;4. 文件系统,包括文件和目录的、文件系统的实现;5. 输入/输出系统,包括设备驱动程序和中断处理。
三、教学方法为了激发学生的学习兴趣和主动性,将采用多种教学方法,包括:1. 讲授法,用于讲解操作系统的原理和概念;2. 讨论法,用于讨论操作系统的实现和应用;3. 案例分析法,通过分析具体的操作系统案例,让学生理解操作系统的实际应用;4. 实验法,通过实验操作,让学生亲手实现操作系统的核心机制。
四、教学资源教学资源包括:1. Pintos操作系统的教材和相关参考书;2. 多媒体资料,包括操作系统的教学视频和PPT;3. 实验设备,包括计算机和相关的硬件设备。
这些教学资源将用于支持教学内容和教学方法的实施,丰富学生的学习体验。
五、教学评估教学评估将采用多种方式进行,以全面、客观、公正地评价学生的学习成果。
评估方式包括:1. 平时表现,包括课堂参与、提问和讨论等,占总评的20%;2.作业,包括理论和实践作业,占总评的30%;3. 考试,包括期中考试和期末考试,占总评的50%。
考试内容将涵盖操作系统的原理、概念和实验操作。
六、教学安排教学安排将根据课程内容和学生的实际情况进行设计。
本课程计划在一个学期内完成,每周安排2次课时,每次课时1小时。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统原理课程设计报告题目:采用二级目录实现文件管理所在学院:班级:学号:姓名:指导教师:2013年1月15日目录一、课程设计目的 (1)二、课题内容 (1)三、总体路线 (1)四、概要设计 (2)1.数据结构 (2)2.所使用函数及其功能 (3)五、详细设计 (4)1.主函数流程图 (4)2.创建文件函数流程图 (5)3.删除文件函数流程图 (7)4.分解命令函数流程图 (10)六、测试、修改及运行结果 (10)七、结束语 (13)八、参考文献 (14)一、课程设计目的文件系统是现代OS用来存储和管理信息机构,具有按名存取的功能,不仅能方便用户对信息的使用,也有效提高了信息的安全性。
本课题模拟文件系统的目录结构,并在此基础上实现文件的各种操作方法。
通过本课题,深入理解文件文件目录的作用和功能,掌握文件打开结构,熟悉与文件有关的系统调用,从而更好地掌握文件系统概念。
二、课题内容1.文件目录采用二级目录结构,第一级为主文件目录master_file_directory;第二级为用户文件目录user_file_directory。
图1 master_file_directory 结构图2 user_file_directory 结构2.为加速文件存取,为每个用户建立一张用户打开表fileTable,用以记录该3.为该系统提供6条操作命令:创建、打开、读、写、关闭、删除等。
4.在该模拟系统中,应先建立主文件目录、用户目录和用户打开文件表,然后接受合法用户,给出一个菜单,按用户选择执行相关操作。
三、总体路线1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个简单的单用户文件系统。
在退出这个简单的文件系统时,应将该虚拟文件系统保存到磁盘上,以便下次可以再将它恢复到内存的虚拟磁盘空间中。
2.文件存储空间的分配采用显式链接分配。
为了实现创建和删除文件必须要有一棵初始的文件树存在,以便在文件树的根节点下实现创建和删除文件。
3.文件目录结构采用二级目录结构。
为了简单起见,可以使用文件结构体,结构体内容包括:文件名,文件目录识别标示,文件链接数,以及他的左孩子右孩子左兄弟右兄弟指4.要有分解函数对输入的命令进行分解。
以识别那部分是哪部分是命令,哪部分是路径和文件名。
5.最后要有执行函数。
来执行输入的创建文件命令。
四、概要设计1.数据结构(1)函数中的主要结构体//两级目录结构体typedef struct master_file_directory //主文件目录MFD{char userName[10];char password[10];UFD *user;}MFD;MFD userTable[MaxUser];int used=0; //定义MFD目录中用已有的用户数typedef struct user_file_directory //用户文件目录文件UFD{//char fileName[10];fileTable *file;user_file_directory *next;}UFD;//UFD *headFile;typedef struct fileTable //文件块结构体{char fileName[10];int strat; //文件在磁盘存储空间的起始地址int length; //文件内容长度int maxlength; //文件的最大长度char fileKind[3]; //文件的属性——读写方式struct tm *timeinfo;bool openFlag; //判断是否有进程打开了该文件//fileTable *next;};(2)结构体相互之间的调用关系图:图4 结构体关系图2.模块结构(1)所用函数及其功能:void Init();//初始化文件树int ParseCommand();//接受输入的命令并把其分解成操作名和路径文件名void ExecuteCommand();//执行命令,分别执行edit,del,dir,exit命令int editComd();//处理edit命令,即创建文件,只要创建表示文件的节点即可,内容及大小不考虑int delComd();//处理del命令,即删除指定文件,不存在是给出错误信息int dirComd();//处理dir命令。
问了能显示的看出创建文件和删除文件是否成功,把根目录的文件都显示出来int FindFilename(char Para2[]);//查找文件名struct FileNode* CreateFileNode(char filename[],int isdir,int i_nlink);//创建结点int GetInput(char* buffer,unsigned int buffer_len);//获取输入(2)所使用变量struct FileNode *cp, *tp, *root;// *cp, *tp, *root是根目录节点char path[INPUT_LEN-COMMAND_LEN];//记录当前走过的路径char Para1[COMMAND_LEN],Para2[INPUT_LEN-COMMAND_LEN];//para1数组存储输入的命令,para2数组存储输入的文件名char filename[FILENAME_LEN],tmp;unsigned int i,j;五、详细设计1.主函数流程图图5 主函数流程图2.创建文件函数流程图图6 创建文件函数流程图具体函数实现过程如下:int editComd(){//char tmp;struct FileNode * temp=CreateFileNode("",0,0);int sign;struct FileNode *tp;//路径不能为空if(strlen(Para2)==0){printf("\n命令格式有错误.\n");return 0;}//长度检查if(strlen(Para2)>50){printf("\n文件名过长\n");return 0;}//格式检查if (!(isalpha(Para2[0])||Para2[0]=='_'||Para2[0]=='\0'||Para2[0]=='/')){printf("文件名格式有错!\n");/* 文件首字母可以为'字母'或'数字'或'_'或'/'或'回车'*/return 0;}//获取文件名sign=FindFilename(Para2);if(sign==0)return 0;if(cp->isdir!=1)//如当前指针指向的是文件,则报错{printf("you cannot edit a file in under a file!\n");return 0;}//创建文件结点,并插入到指定目录下tp=CreateFileNode("",1,0);strcpy(tp->filename,filename);tp->isdir=0;tp->i_nlink=0;if(cp->child==NULL){ tp->parent=cp;tp->child=NULL;cp->child=tp;tp->sibling_prev=NULL;tp->sibling_next=NULL;}else{ temp=cp;//用temp找到新结点插入处temp=temp->child;while(temp->sibling_next )//find the last sibing node{temp=temp->sibling_next;if(strcmp(temp->filename,filename)==0&&temp->isdir==0){printf("此文件名已存在\n");//重名报错return 0;}}//找到了最后一个结点temp->sibling_next=tp;tp->parent=NULL;tp->child=NULL;tp->sibling_prev=temp;tp->sibling_next=NULL;}return 1;}3.删除文件函数流程图图7 删除函数流程图具体函数实现过程如下:int delComd(){// char tmp;int sign;struct FileNode *temp;//参数不能为空if(strlen(Para2)==0){printf("\n命令格式有错误.\n");return 0;}//获取文件名sign=FindFilename(Para2);if(sign==0) return 0;//用temp指向要删除的结点if(cp->child){temp=cp->child;while(temp->sibling_next && (strcmp(temp->filename,filename)!=0 || temp->isdir!=0))temp=temp->sibling_next;if(strcmp(temp->filename,filename)!=0){printf("不存在该文件!\n");return 0;}}else{printf("不存在该文件!\n");return 0;}//要删除的不能是目录if(temp->isdir!=0){printf("ERROR!该命令只能删除文件,不可删除目录!\n");return 0;}//如仍有用户使用该文件,则不能删除if(temp->i_nlink!=0){printf("还有用户共享了该文件,不能删除!\n");return 0;}//删除工作if(temp->parent==NULL)//不是第一个孩子{temp->sibling_prev->sibling_next=temp->sibling_next;if(temp->sibling_next)//处理是最后一个兄弟的情况temp->sibling_next->sibling_prev=temp->sibling_prev;temp->sibling_prev=temp->sibling_next=NULL;}//ifelse//第一个孩子{if(temp->sibling_next)//处理是最后一个兄弟的情况temp->sibling_next->parent=temp->parent;temp->parent->child= temp->sibling_next;}//elsefree(temp);return 1;}4.分解命令函数流程图图8 分解命令函数流程图六、测试修改及运行结果1.实际运行结果:初始界面2.键入用户名和密码创建账号3.登陆4.文件操作(1)创建文件(2)写文件(3)读文件(4)显示文件(5)关闭文件(6)删除文件七、结束语虽然我们做过很多次课程设计了,但是感觉自己还有好多需要学习的地方,接到题目要求时,设计大体的框架,考虑好所使用的数据结构,然后用高级编程语言分模块的把架子的思路编写出来,调试,运行,再看看是不是符合题目的要求,上网找些资料,看看想想是不是要提高要求,才可以满足实际的需要,最后把收集的劳动成果组合起来,一个小程序终于成型了,虽然每次的过程差不多都一样,但是每次都会有不同的体会。