广工_操作系统_课程设计_源代码
广工_操作系统_课程设计_源代码
课程设计课程名称________操作系统___ ____题目名称_多用户多级目录文件系统的实现_ 学生学院________计算机学院____________专业班级______ _________学号________ ___________学生姓名_________ _____________指导教师__________林穗______________2011年1月18日广东工业大学课程设计任务书题目名称多用户多级目录文件系统的实现学生学院计算机学院专业班级08软件工程一班姓名学号一、课程设计的内容本课程设计要求设计一个模拟的多用户多级目录的文件系统。
通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。
二、课程设计的要求与数据1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多用户多目录的文件系统。
2.文件物理结构可采用显式链接或其他方法。
3.磁盘空闲空间的管理可选择位示图或其他方法。
如果采用位示图来管理文件存储空间,并采用显式链接分配方式,则可以将位示图合并到FAT中。
4.文件目录结构采用多用户多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。
目录组织方式可以不使用索引结点的方式,但使用索引结点,则难度系数为1.2。
5.设计一个较实用的用户界面,方便用户使用。
要求提供以下相关文件操作:(1)具有login (用户登录)(2)系统初始化(建文件卷、提供登录模块)(3)文件的创建:create(4)文件的打开:open(5)文件的读:read(6)文件的写:write(7)文件关闭:close(8)删除文件:delete(9)创建目录(建立子目录):mkdir(10)改变当前目录:cd(11)列出文件目录:dir(12)退出:logout6.系统必须可实际演示,选用程序设计语言:C++、C等。
#操作系统课程设计-银行家算法(流程图 源代码 设计报告)
操作系统课程设计-银行家算法(流程图+源代码+设计报告)一、实验目的:熟悉银行家算法,理解系统产生死锁的原因及避免死锁的方法,加深记意。
二、实验要求:用高级语言编写和调试一个描述银行家算法的程序。
三、实验内容:1、设计一个结构体,用于描述每个进程对资源的要求分配情况。
包括:进程名——name[5],要求资源数目——command[m](m类资源),还需要资源数目——need[m],已分配资源数目——allo[m]。
2、编写三个算法,分别用以完成:①申请资源;②显示资源;③释放资源。
(动态完成)四、程序流程图五、源程序:最新版本:bk5.c/*bk2.c::可以自定义进程及资源数目,可选择读文件或创建新文件,但不超过10,5*//*可修改# define NP 10*//* # define NS 5 */ /*资源种类*//*bk3.c::可以继续分配资源(〉2)*//*bk4.c::可保存分析结果*//*bk5.c::除以上功能外,对暂时不能分配的可以进行另外一次尝试,并恢复已分配的资源*//*四、程序流程图:五、源程序:最新版本:bk5.c/*bk2.c::可以自定义进程及资源数目,可选择读文件或创建新文件,但不超过10,5*//*可修改#define NP10*//* #define NS5*//*资源种类*//*bk3.c::可以继续分配资源(〉2)*//*bk4.c::可保存分析结果*//*bk5.c::除以上功能外,对暂时不能分配的可以进行另外一次尝试,并恢复已分配的资源*/ #include "string.h"#include "stdio.h"#include"dos.h"#include"conio.h"#define MOVEIN1#define GUIYUE2#define ACC3#define OK1#define ERROR0#define MAXSH7#define MAXSHL10#define MAXINPUT50#define maxsize 100int act;int ip=0;int line=0; /*line为要写的行号,全局变量*/int writeok;int right;char wel[30]={"Welcome To Use An_Li System"};char ente[76]={" 警告:未经作者同意不得随意复制更改!"};char rights[40]={"Copyright (c)2002"};struct date today;sssssssssssss;ttttttttttttt{int data[maxsize];int top;}stack;int emptystack(stack*S){if(S->top==48&&S->data[S->top]==35)return(1); /*35is'#'*/else return(0);}int push(stack*S,int x){if(S->top>=maxsize-1)return(-1);else{S->top++;S->data[S->top]=x;return(0);}int gettop(stack*S){return S->data[S->top];}int pop(stack*S){if(emptystack(S)){printf("the stack is empty\n");exit(1);}else S->top--;return S->data[S->top+1];}void initstack(stack*S){int i;S->top=0;S->data[S->top]=35;}/*****模拟打字机的效果*********/delay_fun(){int i;void music();for(i=0;;i++){if(wel!='\0'){delay(1000);textcolor(YELLOW);gotoxy(26+i,8);cprintf("%c",wel);printf("谢谢");printf("网络");music(1,60);}else break;}delay(500000);for(i=0;;i++){if(ente!='\0'){delay(1000);textcolor(RED);/*显示警告及版权*/gotoxy(2+i,11);cprintf("%c",ente);}else break;}delay(40000);for(i=0;;i++){if(rights!='\0'){delay(1000);textcolor(YELLOW);gotoxy(30+i,14);cprintf("%c",rights);music(1,60);}elsebreak;}getch();}/*********登陆后的效果**********/ logined(){int i;clrscr();gotoxy(28,10);textcolor(YELLOW);cprintf("程序正在载入请稍候....."); gotoxy(35,12);for(i=0;i<=50;i++){gotoxy(40,12);delay(8000);cprintf("%02d%已完成",i*2);gotoxy(i+15,13);cprintf("\n");cprintf("|");}main0();}/*********对PC扬声器操作的函数****/void music(int loop,int f)/*f为频率*/ {int i;for(i=0;i<30*loop;i++){sound(f*20);}int analys(int s,int a){int hh,pos;switch(a){case(int)'i':hh=0;break;case(int)'+':hh=1;break;case(int)'*':hh=2;break;case(int)'(':hh=3;break;case(int)')':hh=4;break;case(int)'#':hh=5;break;case(int)'E':hh=6;break;case(int)'T':hh=7;break;case(int)'F':hh=8;break;default:{printf("\n analys()分析发现不该有的字符%c!(位置:%d)",a,ip+1); writeerror('0',"\n............分析出现错误!!!");writeerror(a,"\n 错误类型: 不该有字符");printf("谢谢");printf("网");return ERROR;}}pos=(s-48)*10+hh;switch(pos){case3:case43:case63:case73:act=4;return MOVEIN;case0:case40:case60:case70:act=5;return MOVEIN;case11:case81:act=6;return MOVEIN;case92:case22:act=7;return MOVEIN;case84:act=11;return MOVEIN;/*-------------------------------------------*/case91:case94:case95:act=1;return GUIYUE;case21:act=2;return GUIYUE;case101:case102:case104:case105:act=3;return GUIYUE;case31:case32:case34:case35:act=4;return GUIYUE;case111:case112:case114:case115:act=5;return GUIYUE;case51:case52:case54:case55:act=6;return GUIYUE;/*+++++++++++++++++*/case15:return ACC;/*******************************/case6:return1;case7:case47:return2;case8:case48:case68:return3;case46:return8;case67:return9;case78:return10;default:{if(a=='#')printf("");else printf("\n analys() 分析发现字符%c 不是所期望的!(位置:%d)",a,ip+1);writeerror('0',"\n...........分析出现错误!!!");writeerror(a,"\n 错误类型: 字符");writeerror('0'," 不是所期望的!");printf("谢谢");printf("网");return ERROR;}}}int writefile(int a,char*st){FILE*fp;fp=fopen("an_slr.txt","a");{fprintf(fp,"%s",st); /*若a==-1则为添加的注释*/}else if(a==-2){getdate(&today);gettime(&now);fprintf(fp,"\n测试日期:%d-%d-%d",today.da_year,today.da_mon,today.da_day);测试时间:%02d:%02d:%02d",now.ti_hour,now.ti_min,now.ti_sec); fprintf(fp,"}else if(a>=0)fprintf(fp,"\n step:%02d,%s",a,st);writeok=1;fclose(fp);}return writeok;}int writeerror(char a,char*st) /*错误类型文件*/{FILE*fpp;fpp=fopen("an_slr.txt","a");if(fpp==0){printf("\nwrite error!!");writeok=0;}else{if(a=='0')fprintf(fpp,"%s",st); /*若a=='0' 则为添加的注释*/else fprintf(fpp,"%s\'%c\'(位置:%d)",st,a,ip+1);writeok=1;fclose(fpp);}return writeok;}/*^^^^^^^^^^^^^^^^^^^^^^*/main0(){int an,flag=1,action,lenr;char a,w[MAXINPUT];int len,s,ss,aa,ana;stack*st;char r[MAXSH][MAXSHL];/*初始化产生式*/strcpy(r[0],"S->E");strcpy(r[1],"E->E+T");strcpy(r[2],"E->T");strcpy(r[3],"T->T*F");strcpy(r[4],"T->F");strcpy(r[5],"F->(E)");strcpy(r[6],"F->i");clrscr();printf("\nplease input analyse string:\n");gets(w);len=strlen(w);w[len]='#';w[len+1]='\0';push(st,48); /*(int)0 进栈*/writefile(-1,"\n------------------------SLR(1)词法分析器-------------------------"); writefile(-1,"\n计本003 安完成于2003.01.1214:04"); writefile(-1,"\n谢谢");writefile(-1,"网");writefile(-1,"\n 以下为串");writefile(-1,w);writefile(-1,"('#'为系统添加)的分析结果:");writefile(-2,"");do{s=gettop(st);aa=(int)w[ip];action=analys(s,aa);if(action==MOVEIN){ss=48+act;push(st,aa);push(st,ss); /*if ss=4int=52*/ip++;}else if(action==GUIYUE){lenr=strlen(r[act])-3;for(an=0;an<=2*lenr-1;an++)pop(st); /*#0 */s=gettop(st); /*s=0*/push(st,(int)r[act][0]);/*将产生式左端F 进栈*/ana=analys(s,(int)r[act][0])+48;if(ana>59)printf("\分析出错:ana>59!!!");push(st,ana);/*analys(s,aa)即为goto(s',aa)*/if((line+1)%20==0){printf("\nThis screen is full,press any key to continue!!!");getche();clrscr();}printf("step%02d: %s\n",line++,r[act]);writefile(line,r[act]);}else if(action==ACC){flag=0;right=1;}else if(action==ERROR){flag=0;right=0;}/*接受成功*/else{flag=0;right=0;}/* 出错*/}while(flag==1);if(right==1)printf("\nok,输入串%s 为可接受串!!",w);if(right==0)printf("\nsorry,输入串%s 分析出错!!",w);if(writeok==1){printf("\nAnWin soft have wrote a file an_slr.txt");if(right==1)writefile(-1,"\n最终结果:输入串为可接受串!");}}main() /*主函数*/{clrscr();delay_fun();logined();}六、测试报告-操作系统课程设计-银行家算法(流程图+源代码+设计报告)六、测试报告:(测试结果保存于系统生成的an.txt 文件中)以下为课本上的实例::-------------------------------------------------------------------------------------========================银行家算法测试结果=========================-------------------------------------------------------------------------------------T0 时刻可用资源(Available)A:3,B:3,C:2测试日期:2003-6-28请求分配时间:14:07:29经测试,可为该进程分配资源。
2015广工操作系统课程设计报告之磁盘调度(附java源代码)
《操作系统》课程设计磁盘调度算法学 院 计算机学院 专 业 计算机科学与技术 学 号 姓 名指导教师孙为军日期2016年1月2日操作系统课程设计任务书说明:本表由指导教师填写,由系主任审核后下达给选题学生,装订在设计(论文)首页一、设计思想说明1.1 设计环境开发平台:eclipse Version: Luna Service Release 1 (4.4.1) Build id: 20140925-1800开发环境:Windows10 操作系统Java版本:java version “1.8.0_25”java<TM> SE Runtime Environment <build 1.8.0_25-b18>java HotSpot(TM) 64-Bit Server Vm <Build 25.25-b02,mixed mode>1.2 设计思想1.先到先服务算法(FCFS)这是一种比较简单的磁盘调度算法。
它根据进程请求访问磁盘的先后次序进行调度。
此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。
此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。
2.最短寻道时间优先调度算法(SSTF)该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时间最短。
其缺点是对用户的服务请求的响应机会不是均等的,因而导致响应时间的变化幅度很大。
在服务请求很多的情况下,对内外边缘磁道的请求将会无限期的被延迟,有些请求的响应时间将不可预期。
3.扫描算法(SCAN)扫描算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。
《操作系统》课程设计说明书
河南城建学院《操作系统》课程设计说明书设计题目: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。
计算机操作系统课程设计源代码《生产者---消费者问题源代码》
《生产者---消费者问题源代码》#include<stdio.h>#include<stdlib.h>#include<string.h>#include<pthread.h>#include<semaphore.h>#include<sys/types.h>#include<errno.h>#include<unistd.h>#include<signal.h>#include<time.h>#define NUM_THREADS_P 5 /*定义数据为生产者*/#define NUM_THREADS_C 5 /*定义数据为消费者*/#define MAX_BUFFER 20 /*定义数据为缓存区*/#define RUN_TIME 20 /*定义运行时间*/int buffer[MAX_BUFFER]; /*定义最大缓存区*/int produce_pointer=0,consume_pointer=0; /*定义指针*/sem_t producer_semaphore,consumer_semaphore,buffer_mutex; /*定义信号量,互斥*/pthread_t threads_p[NUM_THREADS_P]; /*声明生产者线程*/pthread_t threads_c[NUM_THREADS_C]; /*声明消费者线程*/FILE* fd;void *producer_thread(void *tid); /*声明生产者线程*/void *consumer_thread(void *tid); /*声明消费者线程*/void showbuf(); /*声明showbuf方法*/void handler(){int i; /*定义i*/for(i=0;i<NUM_THREADS_P;i++)pthread_cancel(threads_p[i]);/*for循环,如果i<NUM_THREADS_P,则pthread_cancel(threads_p[i]);并且i++*/ for(i=0;i<NUM_THREADS_C;i++)pthread_cancel(threads_c[i]);/*for循环,如果i<NUM_THREADS_C,则pthread_cancel(threads_c[i]);并且i++*/}int main(){int i; /*定义i*/signal(SIGALRM,handler); /*定义信号量*/fd=fopen("output.txt","w"); /*打开一个文件用来保存结果*/sem_init(&producer_semaphore,0,MAX_BUFFER); /*放一个值给信号灯*/sem_init(&consumer_semaphore,0,0);sem_init(&buffer_mutex,0,1);for(i=0;i<MAX_BUFFER;i++)buffer[i]=0; /*引发缓冲*//*创建线程*/for(i=0;i<NUM_THREADS_P;i++)pthread_create(&threads_p[i],NULL,(void*)producer_thread,(void*)(i+1)); /*创建线程*/for(i=0;i<NUM_THREADS_C;i++)pthread_create(&threads_c[i],NULL,(void*)consumer_thread,(void *)(i+1));alarm(RUN_TIME);for(i=0;i<NUM_THREADS_P;i++)pthread_join(threads_p[i],NULL);/*等待线程退出*/for(i=0;i<NUM_THREADS_C;i++)pthread_join(threads_c[i],NULL);/*等待线程退出*/sem_destroy(&producer_semaphore);/*清除信号灯*/sem_destroy(&consumer_semaphore);/*清除信号灯*/sem_destroy(&buffer_mutex);/*清除缓存区*/fclose(fd); /*关闭文件*/return 0;}void *producer_thread(void *tid){pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);/* 设置状态,PTHREAD_CANCEL_ENABLE是正常处理cancel信号*/ while(1){sem_wait(&producer_semaphore); /*等待,需要生存*/srand((int)time(NULL)*(int)tid);sleep(rand()%2+1); /*一个或两个需要生产*/while((produce_pointer+1)%20==consume_pointer); /*指针位置*/sem_wait(&buffer_mutex); /*缓存区*/buffer[produce_pointer]=rand()%20+1; /*指针位置*/produce_pointer=(produce_pointer+1)%20; /*指针位置*//*判断*/if(produce_pointer==0){printf("生产者:%d 指针指向:%2d 生产产品号:%2d\n",(int)tid,19,buffer[19]); /*输出生产者,指针,缓存区*/fprintf(fd,"生产者:%d 指针指向:%2d 生产产品号:%2d\n",(int)tid,19,buffer[19]); /*输出生产者,指针,缓存区*/}else{printf("生产者:%d 指针指向:%2d 生产产品号:%2d\n",(int)tid,produce_pointer-1,buffer[produce_pointer-1]);/*输出生产者,指针,缓存区*/fprintf(fd,"生产者:%d 指针指向:%2d 生产产品号:%2d\n",(int)tid,produce_pointer-1,buffer[produce_pointer-1]);/*输出生产者,指针,缓存区*/}showbuf();sem_post(&buffer_mutex);sem_post(&consumer_semaphore); /*通知消费者缓冲区不是空的*/srand((int)time(NULL)*(int)tid);sleep(rand()%5+1); /*等待几秒钟,然后继续生产*/}return ((void*)0);}void *consumer_thread(void *tid){/*可以被其他线程使用*/pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);/* 设置状态,PTHREAD_CANCEL_ENABLE是忽略cancel信号*/while(1){sem_wait(&consumer_semaphore); /*通知消费者消费*/srand((int)time(NULL)*(int)tid);sleep(rand()%2+1); /*一个或两个来消费*/sem_wait(&buffer_mutex);printf("消费者:%d 指针指向:%2d 消费产品号:%2d\n",(int)tid,consume_pointer,buffer[consume_pointer]);/*输出消费者,消费者指针,缓存区*/fprintf(fd,"消费者:%d 指针指向:%2d 消费产品号:%2d\n",(int)tid,consume_pointer,buffer[consume_pointer]);/*输出消费者,消费者指针,缓存区*/buffer[consume_pointer]=0; /*消费者指针指向0*/consume_pointer=(consume_pointer+1)%20;showbuf();sem_post(&buffer_mutex);sem_post(&producer_semaphore); /*通知生产者缓冲区不是空的*/srand((int)time(NULL)*(int)tid);sleep(rand()%5+1); /*等待几秒钟,然后继续消费*/}return ((void*)0);}/*查看缓冲区内容*/void showbuf(){int i; /*定义i*/printf("buffer:"); /*输出缓存区*/fprintf(fd,"buffer:"); /*输出缓存区*/for(i=0;i<MAX_BUFFER;i++){printf("%2d ",buffer[i]);/*输出缓存区i*/fprintf(fd,"%2d ",buffer[i]); /*输出缓存区i*/ }printf("\n\n"); /*换行*/fprintf(fd,"\n\n"); /*换行*/}。
操作系统课程设计文档及代码
1 设计目的与内容1.1 设计目的通过课程设计, 加深对操作系统对程序执行的理解,掌握操作系统的多程序运行原理,能模拟操作系统设计相应的进程调度算法,掌握操作系统的基本原理及功能, 具有初步分析实际操作系统、设计、构造和开发现代操作系统的基本能力。
1.2 设计内容1、设计进程控制块PCB表结构,分别适用于可强占的优先数调度算法和循环轮转调度算法。
2、建立进程就绪队列。
对两种不同算法编制入链子程序。
3、编制两种进程调度算法:1)可强占的优先进程调度;2)循环时间片轮转调度4、设计操作系统运行的指令。
2 设计说明2.1 需求分析设计虚拟内核实现进程的调度,实现多道程序的调度。
设计调度算法计算各个进程的优先权限来确定进程执行的次序。
进程调度程序选择一个就绪状态的进程,使之在处理器上运行。
进程的调度采用最高优先数优先的调度算法和先来先服务调度算法相结合的算法,并且采用动态优先数策略,选择进程占用处理器后该进程仅能使用一个时间片,运行完后优先数减1。
2.2 设计思路本程序用两种算法对多个进程进行调度,每个进程可有三个状态,并假设初始状态为就绪状态。
为了便于处理,程序中的某进程运行时间以时间片为单位计算。
各进程的优先数或轮转时间数以及进程需运行的时间片数的初始值均由用户给定。
在优先数算法中,优先数的值为31与运行时间的差值。
进程每执行一次,优先数减1,CPU时间片数加1,进程还需要的时间片数减1。
在轮转算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了1个单位),这时,CPU时间片数加1,进程还需要的时间片数减1,并排列到就绪队列的尾上。
设计程序指令,MOV n //把整数n赋给累加器ASAV m //把累加器A的值存入地址MADD n //从累加器A的值减去整数n,结果送到累加器A。
SUB n //从累加器A的值减去整数n,结果送到累加器A。
MUL n //从累加器A的值乘以整数n,结果送到累加器A。
操作系统内核课程设计
操作系统内核课程设计一、课程目标知识目标:1. 让学生理解操作系统内核的基本概念、结构和功能,掌握操作系统的进程管理、内存管理、文件系统等核心模块的工作原理。
2. 使学生掌握操作系统内核编程的基本方法,学会使用相关工具和接口进行系统调用和驱动程序开发。
3. 帮助学生了解操作系统安全性、稳定性的重要性,掌握基本的系统调试和优化技巧。
技能目标:1. 培养学生具备分析操作系统内核源代码的能力,能够阅读和理解常见的操作系统内核模块。
2. 培养学生具备设计、编写和调试简单的操作系统内核模块的能力,能够实现特定功能并进行性能优化。
3. 提高学生运用所学知识解决实际问题的能力,能够针对具体场景提出合理的操作系统内核设计方案。
情感态度价值观目标:1. 培养学生热爱操作系统内核技术,树立积极探索、持续学习的信念。
2. 培养学生的团队协作意识,学会与他人共同分析问题、解决问题,形成良好的沟通与协作能力。
3. 引导学生关注操作系统内核技术的发展趋势,认识到技术进步对社会发展的重要性,树立社会责任感。
本课程针对高年级学生,课程性质为专业核心课。
在教学过程中,需充分考虑学生的认知特点,注重理论与实践相结合,引导学生主动探究、动手实践。
通过本课程的学习,期望学生能够掌握操作系统内核的基本知识和技能,为未来从事相关领域的研究和工作打下坚实基础。
二、教学内容本课程教学内容围绕以下三个方面展开:1. 操作系统内核基础理论- 深入讲解操作系统内核的基本概念、结构、功能和设计原理。
- 分析进程管理、内存管理、文件系统、设备管理等核心模块的工作机制。
2. 操作系统内核编程实践- 介绍操作系统内核编程的基本方法,包括系统调用、驱动程序开发等。
- 结合教材示例,指导学生阅读和分析操作系统内核源代码。
教学大纲安排:1)第1-4周:操作系统内核基础理论2)第5-8周:进程管理、内存管理编程实践3)第9-12周:文件系统、设备管理编程实践3. 操作系统内核优化与调试- 讲解操作系统内核安全性、稳定性方面的知识,分析常见漏洞和防护措施。
操作系统课程设计报告
实践课设计报告课程名称操作系统课程设计模拟设计内存管理中的地址题目转换(动态分区、页式十进制)学院班级学号姓名指导教师年月日课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目: 模拟设计内存管理中的地址转换(动态分区、页式十进制)初始条件:1.预备内容:阅读操作系统的内存管理章节内容,理解动态分区、页式、段式和段页式存储管理的思想及相应的分配主存的过程。
2.实践准备:掌握一种计算机高级语言的使用。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.下列内部存储器管理中地址转换,在完成指定存储管理技术中的地址转换基础上还可以选择其它内部存储器管理中的地址转换进行模拟设计并实现:⑴动态分区方案,用最先适用算法对作业实施内存分配,然后把作业地址空间的某一逻辑地址转换成相应的物理地址。
能够处理以下的情形:输入某一逻辑地址,程序能判断地址的合法性,如果合法,计算并输出相应的物理地址。
如果不能计算出相应的物理地址,说明原因。
⑵页式存储管理中逻辑地址到物理地址的转换(十进制)。
能够处理以下的情形:输入某一十进制逻辑地址,能检查地址的合法性,如果合法进行转换,否则显示“地址非法”;物理地址用十进制表示。
⑶页式存储管理中逻辑地址到物理地址的转换(八进制)。
能够处理以下的情形:输入某一八进制逻辑地址,能检查地址的合法性,如果合法进行转换,否则显示“地址非法”;物理地址用八进制表示。
⑷页式存储管理中逻辑地址到物理地址的转换(十六进制)。
能够处理以下的情形:输入某一十六进制逻辑地址,能检查地址的合法性,如果合法进行转换,否则显示“地址非法”;物理地址用十六进制表示。
⑸段式存储管理中逻辑地址到物理地址的转换。
能够处理以下的情形:指定内存的大小,进程的个数,每个进程的段数及段大小;能检查地址的合法性,如果合法进行转换,否则显示地址非法的原因。
⑹段页式存储管理中逻辑地址到物理地址的转换。
广工操作系统课程设计
操作系统课程设计题目名称仿真各种磁盘调度算法学院计算机学院专业软件工程班别12级4班学号3112006291姓名林炳城指导教师丁国芳2015年6 月27日仿真各种磁盘调度算法,并进行性能分析一、设计目的设计四个算法,分别是先来先服务算法,最短寻道时间优先算法,扫描(SCAN)算法,循环扫描(CSCAN)算法。
由人工输入当前的磁道数和要访问的磁道。
二、设计原理先来先服务算法(FCFS):公平,简单,每个进程的请求都能依次得到处理。
没有对寻道优化,平均寻道时间长。
最短寻道时间优先算法(SSTF):要求访问的磁道是当前磁头所在的磁道最近,每次寻道时间最短,但不能保证平均寻道时间最短。
可能导致一些请求无限期推延,产生饥饿现象。
扫描算法(SCAN):不仅考虑当前磁道的距离,优先考虑在磁道前进方向的最短时间,排除磁头在盘面上的往复运动,避免了出现“饥饿”现象。
电梯原理。
循环扫描算法(CSCAN):是SCAN的改良。
磁头改变方向时,以到达请求服务的最短时间。
对中间请求服务更有利,同时消除了对两端请求的不公平。
三、实验环境与工具(1)计算机及操作系统:PC机,Win8.1(2)程序设计语言:java(3)编译程序:eclipse四、算法流程图五、测试程序结果:一次输入要访问的磁道数以及当前的磁道数选择一:先来先服务算法(FCFS):得到的访问顺序以及平均寻道长度为选择二:最短寻道时间优先(SSTF)得到的访问顺序以及平均寻道长度为选择三:扫描算法(SCAN):分别采用移动臂向里和移动臂向外,得到的访问顺序以及平均寻道长度为选择四:循环扫描算法(SCAN):分别采用由里向外和由外向里都得到的结果。
由里向外由外向里六、性能分析:从测试结果得到的访问顺序与预期的结果一致,并且经计算从中求出移动距离以及平均寻道长度都正确,符合要求。
这次课设我是用数组来实现的。
从实验的结果得到的数据中也可以看出,光是访问三次磁道,得到的平均磁道数就各不相同,当用户访问的磁道次数频繁且不一致时,好的磁道访问算法才能加快磁道访问的速度。
广工操作系统课程设计
广工操作系统课程设计一、课程目标知识目标:1. 理解操作系统的基本概念、功能、类型及发展历程。
2. 掌握进程与线程的基本原理,能够描述进程的创建、同步、互斥与通信机制。
3. 学会内存管理的基本方法,了解虚拟内存、分页、分段等内存管理技术。
4. 熟悉文件系统的结构、功能及存储设备的工作原理。
5. 了解设备管理的基本原理,掌握I/O调度策略。
技能目标:1. 能够运用进程管理、内存管理、文件系统等知识,分析并解决实际问题。
2. 学会使用C或C++等编程语言编写简单的系统程序,如进程创建、进程通信等。
3. 能够运用操作系统原理,对计算机系统进行性能优化和故障排查。
情感态度价值观目标:1. 培养学生对操作系统知识的学习兴趣,提高学习积极性。
2. 培养学生的团队合作精神,学会与他人共同分析问题、解决问题。
3. 增强学生的计算机伦理道德观念,遵循法律法规,尊重知识产权。
本课程针对广东工业大学操作系统课程设计,结合学生特点和教学要求,注重理论与实践相结合。
课程目标旨在帮助学生掌握操作系统的基本原理,提高编程实践能力,培养学生具备解决实际问题的综合素质,同时注重培养学生的情感态度和价值观,使他们在学习过程中形成良好的学习习惯和团队合作精神。
后续教学设计和评估将围绕这些具体的学习成果展开。
二、教学内容1. 操作系统概述:介绍操作系统的基本概念、功能、类型及发展历程,对应教材第一章。
- 操作系统的定义与作用- 操作系统的历史与发展趋势- 操作系统的功能与特性2. 进程管理:讲解进程与线程的基本原理,分析进程同步、互斥与通信机制,对应教材第二章。
- 进程与线程的概念与区别- 进程的创建、调度与终止- 进程同步与互斥- 进程通信方法3. 内存管理:学习内存管理的基本方法,了解虚拟内存、分页、分段等内存管理技术,对应教材第三章。
- 内存分配与回收策略- 虚拟内存技术- 分页与分段机制- 页面置换算法4. 文件系统:熟悉文件系统的结构、功能及存储设备的工作原理,对应教材第四章。
计算机操作系统课程设计 进程管理 API C++ 实验报告 源代码
计算机学院网络工程专业《操作系统课程设计》报告——进程管理(2012/2013学年第一学期)学生姓名:张斌学生班级:网络工程102001班学生学号:201020030122指导教师:赵静2012年12月30日目录第一章课程设计的目的和意义 (1)1.1 目的 (1)1.2 意义 (1)第二章课程设计概述 (2)2.1 实验名称 (2)2.2 实验目的 (2)2.3 实验要求 (2)2.4 实验内容 (2)第三章 A PI函数简介 (3)3.1 API定义 (3)3.2 wi nd o ws A P I (3)3.3A P I的类型 (3)3.4 开放A P I平台 (4)第四章相关API函数 (5)4.1 CreateProcess (5)4.1.1 定义 (5)4.1.2 函数原型 (5)4.1.3 函数参数 (5)4.1.4 返回值 (7)4.2 GetVersion (7)4.2.1 VB声明 (7)4.2.2 说明 (7)4.2.3 返回值 (7)4.3 GetCurrentProcessId (8)4.3.1 V C声明 (8)4.3.2说明 (8)4.3.3返回值 (8)4.4 ExitProcess (8)4.4.1 V B声明 (8)4.4.2 说明 (8)4.4.3 参数类型及说明 (8)4.4.4 在VB中使用 (8)4.5 GetSystemTime (8)4.5.1 VB声明 (8)4.5.2 说明 (8)4.5.3参数表 (9)4.5.4 A d a声明 (9)第五章实验结果 (10)5.1系统运行说明 (10)5.2 实验结果分析 (11)结束语 (12)参考文献 (13)附录 (14)第一章课程设计的目的和意义1.1 目的本课程设计是为了配合操作系统课程的理论教学而设置的,目的是通过课程设计的综合训练,加强学生对操作系统概念的实际应用技能的训练,提高学生分析问题和解决问题的能力。
操作系统课程设计LRU算法完整版 内含代码
操作系统课程设计LRU页面调度算法学号:姓名:学院:专业:班级:指导老师:日期:目录一、实验题目 (1)二、课程设计的目的 (1)三、设计内容 (1)四、设计要求 (1)五、设计思想 (1)六、主要数据结构及其说明 (2)七、硬件支持 (3)八、源程序文件 (3)九、程序运行结果 (7)十、实验体会 (8)一实验题目LRU页面调度算法二课程设计的目的操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合一起,独立分析和解决实际问题的机会。
1.进一步巩固和复习操作系统的基础知识。
2. 培养学生结构化程序、模块化程序设计的方法和能力。
3.提高学生调试程序的技巧和软件设计的能力。
4.提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。
三设计内容程序应模拟实现LRU算法思想,对n个页面实现模拟调度。
四设计要求1.不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要注释清楚。
对程序其它部分也进行必要的注释。
2.对系统进行功能模块分析、画出总流程图和各模块流程图。
3.用户界面要求使用方便、简洁明了、美观大方、格式统一。
所有功能可以反复使用,最好使用菜单。
4.通过命令行相应选项能直接进入某个相应菜单选项的功能模块。
5.所有程序需调试通过。
五设计思想最近最久未使用(LRU)页调度算法是选择最近最久未使用的页面予以淘汰。
算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间,当所要访问的页面在内存块中时,就不淘汰页面,否则,淘汰页面中时间最长的,即淘汰最近最久未使用的页面。
算法流程图六主要数据结构及其说明程序执行是稳定的,高效的。
在LRU算法中,要找出最近最久未使用的页面的话,就必须设置有关的访问记录项,且每一次访问这些记录项,叶面都必须更新这些记录项。
这个记录项在此程序中为:typedef struct page{int num;/*记录页面号*/int time;/*记录调入内存时间*/}Page;//页面逻辑结构,结构为方便算法实现设计如此,显然要花费较大的系统开销(包括时间和空间上的),这也是实际系统中不采用LRU算法的直接原因,但由于其页面置换的优越性,实际系统中常使用LRU的近似算法。
《计算机操作系统》课程设计
计算机操作系统课程设计1. 引言计算机操作系统是计算机科学与技术专业中一门重要的课程,它介绍了操作系统的基本概念、原理和设计方法,培养学生对计算机操作系统的理解和应用能力。
本文将介绍《计算机操作系统》课程设计的目标、内容和方法,并提供一些实用的学习资源和建议。
2. 课程设计目标《计算机操作系统》课程设计的主要目标是通过实践,帮助学生加深对操作系统概念和原理的理解,培养学生编写和调试操作系统的能力,提高解决实际问题的能力。
具体目标如下:- 理解操作系统的基本概念和原理; - 掌握操作系统的设计与实现方法; - 学会使用工具和技术进行操作系统的调试和测试;- 培养团队合作和解决问题的能力。
3. 课程设计内容《计算机操作系统》课程设计的内容包括以下几个方面:1. 进程管理:学生需要设计和实现一个简单的进程管理系统,包括进程的创建、调度和终止等功能,并实现进程间的通信和同步。
2. 文件系统:学生需要设计和实现一个简单的文件系统,包括文件的存储和管理、文件的读写等功能,并实现文件的保护和共享。
3. 内存管理:学生需要设计和实现一个简单的内存管理系统,包括内存的分配和释放、页面置换等功能,并实现进程的虚拟内存。
4. 设备管理:学生需要设计和实现一个简单的设备管理系统,包括设备的分配和释放、设备的控制和调度等功能,并实现设备的并发和互斥。
4. 课程设计方法《计算机操作系统》课程设计采用项目驱动的方法,学生将组成小组,每个小组负责完成一个操作系统的设计和实现。
具体方法如下: 1. 项目选择:学生可以自由选择他们感兴趣的项目,也可以从老师提供的项目中选择。
2. 项目计划:学生需要制定项目计划,包括项目的目标、任务和时间安排等。
3. 项目开发:学生按照项目计划开展项目开发工作,包括需求分析、系统设计、编码和测试等环节。
4. 项目评审:学生需要定期进行项目评审,包括项目进展、问题解决和改进措施等。
5. 项目展示:学生需要最后展示他们的项目成果,包括设计文档、源代码和演示等。
(完整word版)广东工业大学操作系统课程设计
课程设计课程名称操作系统题目名称文件系统学生学院计算机学院专业班级计算机科学与技术10级8班学号学生姓名指导教师_ ______2013年1月5 日目录1 设计目的 (1)2设计内容 (1)3 设计步骤 (2)4 经验与体会 (10)5附录 (11)1 设计目的模拟文件系统实现的基本功能,了解文件系统的基本结构、内部功能和实现,通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,实现文件系统的管理和控制功能。
2设计内容2.1实现功能实现一个简单的多用户多级目录要求如下(具体选做):1)实现二级目录管理及文件管理基本操作;2)实现无穷级目录管理及文件管理基本操作;3)在1)或2)基础上实现共享“别名”;4)在1)或2)基础上加快了文件检索;5)基于某项实际应用进行文件系统设计。
2.2开辟空间在内存中开辟一个虚拟磁盘空间作为文件存储器,用位示图来管理文件存储空间,采用显式链接分配方式,将位示图合并到FAT表中。
2.3目录结构文件的物理结构采用显式链接的方式。
文件的目录结构是多用户多目录结构的。
如:主文目录MFD,用户文件目录UED,运行文件目录AFD,每级目录都有具体内容。
目录用索引节点的方式组织。
2.4实现的操作1)create:创建文件2)delete:删除文件3)open:打开文件4)close:关闭文件5)read:读文件6)write:写文件7)mkdir:创建目录(子目录)8)cd:改变当前目录9)dir:列出文件目录10)login:登陆系统11)logout:退出系统2.5设计一个用户友好的界面3 设计步骤3.1需求分析在内存中申请1M的空间来模拟存取设备,空间划分为三部分,第一部分用来存放位示图,用于标识数据块的使用情况,第二部分放置一个文件索引的数据,用于快速的查找数据,第三部分放置数据信息,第三部分划分为512块,每块512B,其256K,放置在1M空间的最末端,由第三部分的大小可知,第一部分只需64B即可,中间的部分用来存放文件索引。
c课课程设计以及源代码
c 课课程设计以及源代码一、教学目标本课程的教学目标是使学生掌握C语言的基本语法、数据结构和算法,培养学生编程思维和解决问题的能力。
具体目标如下:1.知识目标:(1)理解C语言的基本语法,包括变量、数据类型、运算符、表达式等;(2)掌握函数的定义和调用,了解作用域规则;(3)熟悉数组的声明和使用,理解字符串的基本操作;(4)了解指针的概念和应用,掌握指针与数组、指针与函数的关系;(5)学习结构体和联合体,掌握文件操作的基本方法。
2.技能目标:(1)能够运用C语言编写简单的程序,实现输入输出、数据处理等功能;(2)学会使用调试工具,能够发现和解决程序中的错误;(3)掌握常用的算法,如排序、查找、递归等,并能够灵活运用;(4)具备一定的编程规范和编程习惯,能够阅读和理解他人的代码。
3.情感态度价值观目标:(1)培养学生对计算机科学的兴趣和好奇心,激发学生主动学习的动力;(2)培养学生团队合作的精神,学会与他人交流和分享;(3)培养学生勇于面对困难和挑战,培养解决问题的能力;(4)培养学生具有良好的职业操守,注重诚信和责任心。
二、教学内容根据课程目标,本课程的教学内容主要包括以下几个方面:1.C语言的基本语法:变量、数据类型、运算符、表达式、函数等;2.数据结构:数组、字符串、指针、结构体、联合体等;3.算法:排序、查找、递归等常用算法;4.文件操作:文件的打开、关闭、读写等基本操作;5.编程实践:编写简单的程序,锻炼编程能力和解决问题的能力。
三、教学方法为了达到课程目标,本课程将采用多种教学方法,包括:1.讲授法:通过讲解和演示,使学生掌握C语言的基本语法和数据结构;2.讨论法:学生进行小组讨论,培养学生的团队合作能力和解决问题的能力;3.案例分析法:分析典型的编程案例,使学生了解C语言在实际应用中的重要性;4.实验法:让学生动手编写程序,培养学生的编程能力和实践能力。
四、教学资源为了支持教学内容和教学方法的实施,本课程将准备以下教学资源:1.教材:选用权威、实用的C语言教材,为学生提供系统的学习资料;2.参考书:提供相关的参考书籍,丰富学生的知识体系;3.多媒体资料:制作课件、教学视频等,增强课堂教学的趣味性和生动性;4.实验设备:提供计算机实验室,让学生进行编程实践和实验操作。
广东linux课程设计
广东linux课程设计一、教学目标本课程的教学目标是使学生掌握Linux操作系统的基本原理和应用技能,培养学生具备独立安装、配置和管理Linux系统的能力,提高学生在实际工作中运用Linux系统的实践能力。
具体分为以下三个部分:1.知识目标:(1)了解Linux操作系统的历史、特点和发展趋势;(2)掌握Linux文件系统结构、目录结构和权限管理;(3)熟悉Linux常用命令、shell脚本编写和系统管理;(4)了解Linux网络配置、磁盘管理、进程管理和系统监控。
2.技能目标:(1)能够独立安装、配置Linux操作系统;(2)能够使用Linux常用命令和管理工具进行日常系统维护;(3)能够编写简单的shell脚本实现自动化管理任务;(4)能够配置Linux网络环境,实现与其他操作系统的互联互通。
3.情感态度价值观目标:(1)培养学生对Linux操作系统的兴趣,提高自主学习能力;(2)培养学生团队合作精神,学会与他人分享和交流;(3)培养学生安全意识,提高防范网络风险的能力。
二、教学内容本课程的教学内容主要包括Linux操作系统的基本概念、文件系统、常用命令、shell脚本编程、网络配置、磁盘管理、进程管理和系统监控等方面。
具体安排如下:1.Linux操作系统概述:介绍Linux的历史、特点和发展趋势,使学生了解Linux操作系统的基本概念。
2.Linux文件系统:讲解Linux文件系统结构、目录结构和权限管理,培养学生熟练使用文件系统的能力。
3.Linux常用命令:介绍Linux常用命令及其功能,使学生能够熟练操作Linux系统。
4.shell脚本编程:讲解shell脚本的编写方法,培养学生编写脚本实现自动化管理任务的能力。
5.Linux网络配置:讲解Linux网络配置方法,使学生能够配置Linux网络环境,实现与其他操作系统的互联互通。
6.磁盘管理:介绍Linux磁盘管理工具,培养学生进行磁盘分区、格式化和挂载的能力。
广东linux课程设计
广东linux课程设计一、课程目标知识目标:1. 掌握Linux操作系统的基本概念和原理;2. 学会使用Linux命令行进行基本操作;3. 了解Linux文件系统结构和权限管理;4. 掌握Linux下软件安装和配置方法;5. 理解Linux网络配置和基本安全策略。
技能目标:1. 能够独立安装和配置Linux操作系统;2. 熟练运用命令行进行文件和目录操作;3. 能够进行简单的Linux系统管理和维护;4. 学会使用Linux下的文本编辑器和开发工具;5. 具备初步的Linux网络配置和安全防护能力。
情感态度价值观目标:1. 培养学生对Linux操作系统的兴趣和爱好;2. 增强学生自主学习和解决问题的能力;3. 培养学生的团队协作精神和分享意识;4. 培养学生遵守开源协议和尊重知识产权的观念;5. 提高学生对网络安全的认识和责任感。
课程性质:本课程为广东地区高中信息技术课程,以Linux操作系统为基础,结合实际应用,注重培养学生的实践操作能力和创新思维。
学生特点:高中学生具备一定的计算机操作基础,对新鲜事物充满好奇心,喜欢动手实践,但需引导培养自主学习能力和团队协作精神。
教学要求:结合课本内容,以实践操作为主,注重理论知识与实际应用相结合,提高学生的Linux操作技能和网络安全意识。
在教学过程中,关注学生的学习进度,及时调整教学策略,确保课程目标的实现。
通过课程学习,使学生能够掌握Linux操作系统的基本知识和技能,为今后的学习和工作打下坚实基础。
二、教学内容1. Linux操作系统概述- Linux发展历程和特点- Linux发行版介绍2. Linux基本操作- 命令行界面和基本命令- 文件和目录操作命令- 输入输出重定向和管道3. Linux文件系统- 文件系统结构- 文件权限和归属- 文件系统操作命令4. 软件安装与配置- 软件包管理器使用- 常用软件安装和配置- 环境变量设置5. Linux网络配置- 网络基础概念- 网络配置命令- 网络安全策略6. Linux下的编程环境- 文本编辑器使用- 编程工具和编译器- 简单脚本编写7. 系统管理与维护- 用户和群组管理- 系统监控与性能优化- 常见故障排查与解决教学内容按照以上七个方面进行组织,确保课程的科学性和系统性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计课程名称________操作系统___ ____题目名称_多用户多级目录文件系统的实现_ 学生学院________计算机学院____________ 专业班级______ _________学号________ ___________ 学生_________ _____________指导教师__________林穗______________ 2011年1月18日工业大学课程设计任务书题目名称多用户多级目录文件系统的实现学生学院计算机学院专业班级08软件工程一班姓名学号一、课程设计的容本课程设计要求设计一个模拟的多用户多级目录的文件系统。
通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统部功能和实现过程的理解。
二、课程设计的要求与数据1.在存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多用户多目录的文件系统。
2.文件物理结构可采用显式或其他方法。
3.磁盘空闲空间的管理可选择位示图或其他方法。
如果采用位示图来管理文件存储空间,并采用显式分配方式,则可以将位示图合并到FAT中。
4.文件目录结构采用多用户多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。
目录组织方式可以不使用索引结点的方式,但使用索引结点,则难度系数为1.2。
5.设计一个较实用的用户界面,方便用户使用。
要求提供以下相关文件操作:(1)具有login (用户登录)(2)系统初始化(建文件卷、提供登录模块)(3)文件的创建:create(4)文件的打开:open(5)文件的读:read(6)文件的写:write(7)文件关闭:close(8)删除文件:delete(9)创建目录(建立子目录):mkdir(10)改变当前目录:cd(11)列出文件目录:dir(12)退出:logout6.系统必须可实际演示,选用程序设计语言:C++、C等。
三、课程设计应完成的工作1.充分理解设计的任务,完成设计的基本要求。
然后根据自己的基础和能力选择不同难度的算法和实现方式,以取得更高的分数。
2. 独立独立完成系统的分析、设计、编码、测试工作。
3.完成设计报告的撰写。
4.以光盘(以班为单位刻录)方式提交已调试通过的完整的相关源程序和能够运行的执行文件;提交“课程设计报告”的书面和电子两种版本。
四、课程设计进程安排五、应收集的资料及主要参考文献[1]计算机操作系统,汤小丹等,电子科技大学[2]操作系统实验指导书,傅秀芬,工业大学(自编)[3] 计算机操作系统教程( 第二版),尧学、史美林,清华大学[4] 现代操作系统,A.S.Tanenbaum 著,向群等译机械工业发出任务书日期:2010年12月22日指导教师签名:林穗计划完成日期:2011年1月21日基层教学单位责任人签章:滕少华目录i.设计目的…………………………………………………………………ii.开发工具与环境…………………………………………………………iii.设计思想…………………………………………………………………iv.系统结构说明……………………………………………………………v.数据结构说明……………………………………………………………vi.各模块的算法流程图……………………………………………………1、程序总体源流程图……………………………………………………2、主要模块的算法流程图………………………………………………3、函数声明………………………………………………………………vii.程序运行及清单…………………………………………………………1、用户管理操作界面……………………………………………………2、文件管理操作界面……………………………………………………3、主要核心源代码………………………………………………………viii.操作说明书………………………………………………………………1、用户管理使用手册…………………………………………………2、文件操作管理使用手册……………………………………………ix.体会和建议………………………………………………………………………i.设计目的本课程设计要求设计一个模拟的多用户多级目录的文件系统。
通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统部功能和实现过程的理解。
ii.开发工具与环境a)程序设计语言:C语言b)计算机及操作系统:PC机,WindowsXPc)开发平台:Microsoft Visual C++ 6.0简化版d)运行平台:PC机,WindowsXPiii.设计思想课程设计采用Microsoft Visual C++ 6.0简化版作为开发工具,参照了windows资源管理器的结构,模拟文件管理的工作过程,通过创建一棵多叉树,及对这棵多叉树的操作,建立了一个树型文件系统,实现了文件和文件夹的创建,打开,读写,删除,关闭,复制,粘贴,查看,属性设置等十来个功能。
操作界面简单明了,操作方便。
iv.系统结构说明模拟文件管理系统可以自行设置多个用户进行管理操作,当选择已有用户时便可进入其文件管理菜单进行相应的操作(有界面提示功能),当进入系统已建立的某个用户时,可以创建用户自己的文件夹或文件,当flag=0时为创建文件,flag=1时创建文件夹(这里设置了标志位)。
文件除了名称和打开标志外,还可对他们的访问权限、文件类型和文件长度进行设置(长度设置主要在写入文件时会用到);而文件夹则可以设置访问权限等,打开文件列表的结构体包括文件名和文件的父节点地址,打开文件夹的链表中包括文件夹名称及其地址等;对文件的管理包含复制、打开、关闭、写入、读出、粘贴、新建文件(夹)、删除文件(夹)和显示文件(夹)等等,为方便操作还设置了各功能操作(如进入下一级、返回上一级、返回初始菜单、直接退出等等)。
下面的系统结构说明图示:其中P表示parent指针,C表示child指针,N表示next指针v.数据结构说明该模拟文件管理系统的文件目录检索采用简单的线性搜索,系统所采用的数据结构:typedef struct list LIST;struct list{char listname[10];int type;int length;int protect;int flag;char *content;struct list *parent;struct list *child;struct list *next;};typedef struct usd USD;struct usd{char username[10];LIST *list;struct usd *next;};vi.各模块的算法流程图1.程序总体流程图2.主要模块的算法流程图1)创建用户模块:2)删除用户3)创建文件(夹)4)删除文件夹5)复制文件3.函数声明void displayusermenu();///用户管理界面菜单void time();///系统时间void displayfilemenu();///文件管理界面菜单void creatuser();///新建用户void deleteuser();///删除用户void displayuser();///显示用户void userhelp();///用户管理帮助void filehelp();///文件管理帮助void selectuser();///选择用户void displaylist();///显示文件或者文件夹void creatfile(LIST *qq,int flag);///创建文件(夹)void deletefile(LIST *qq,int flag);///删除文件(夹)void openfile();///打开文件void readfile(); ///读取文件void writefile(); ///写入文件void closefile();///关闭文件void next();///下一层文件夹void back();//上一层文件夹void copyfile();//复制文件void pastedfile();///粘贴文件void quit();///直接退出系统vii.程序运行及清单系统界面简洁美观实用,用户无须输入过长指令就可以完成操作。
本系统还附带操作指南,用户如有疑问可查看指南说明。
虽不如可视化易操作,但也不难。
1、用户管理操作1)程序登陆界面2)程序开始界面(即用户管理界面)3)新建用户4)列出用户5)删除用户6)系统日期时间7)帮助文档8)退出系统9)选择用户输入用户名(若系统无此用户会有提示)按回车后即进入文件操作界面。
2、对文件管理操作1)进入用户后对文件操作初始界面2)新建文件3)新建文件夹4)显示当前路径文件(夹)5)删除文件文件存在时6)删除文件夹文件夹存在时7)打开文件文件存在时8)读出文件文件需要先置于打开状态,方可读取由于没有输入容所以文件容为空。
9)写入文件10)读出刚才写入的容11)关闭文件12)复制文件(先将刚才关闭的文件aa1打开再复制)如果输入的文件名不存在该用户中时会有提示信息3、主要核心源代码(见电子版)#include <stdio.h>#include <math.h>#include <malloc.h>#include <string.h>#include <conio.h>#include <time.h>#include "stdlib.h"#define NULL 0#define get(type) (type *)malloc(sizeof(type)) //分配空间typedef struct list LIST;struct list{char listname[10]; // 文件名长度int type;int length; // 文件长度int protect; // 保护模式,0为只读,1为可读写int flag; // 标志,为0时创建文件夹,为1时创建文件char *content;struct list *parent;struct list *child;struct list *next;};typedef struct usd USD;struct usd{char username[10]; // 用户名长度LIST *list;struct usd *next;};// 函数声明void displayusermenu(); // 用户管理界面菜单void login(); // 系统登陆界面void time(); // 系统时间void displayfilemenu(); // 文件管理界面菜单void creatuser(); // 新建用户void deleteuser(); // 删除用户void displayuser(); // 显示用户void userhelp(); // 用户管理帮助void filehelp(); // 文件管理帮助void selectuser(); // 选择用户void displaylist(); // 显示文件或者文件夹void creatfile(LIST *qq,int flag);// 创建文件(夹) void deletefile(LIST *qq,int flag);// 删除文件(夹)void openfile(); // 打开文件void readfile(); // 读取文件void writefile(); // 写入文件void closefile(); // 关闭文件void next(); // 下一层文件夹void back(); // 上一层文件夹void copyfile(); // 复制文件void pastedfile(); // 粘贴文件void quit(); // 直接退出系统USD *user=NULL,*currentuser=NULL;LIST *list=NULL,*currentlist=NULL,*copylist=NULL;void displayusermenu() // 显示用户菜单{system("cls"); // 清屏int button;printf("\n\n\t\t\t欢迎使用多用户多级目录文件系统\n\n"); printf("\t\t计算机学院\t\t软件工程1班\n\n");printf("\t\t \t\t \n\n\n");printf("\t\t1、新建用户\n");printf("\t\t2、删除用户\n");printf("\t\t3、选择用户\n");printf("\t\t4、列出用户\n");printf("\t\t5、系统时间\n");printf("\t\t6、帮助文档\n");printf("\t\t7、退出系统\n\n");printf("\t\t请按功能选择操作:");scanf("%d",&button);switch(button){case 1:creatuser();break; // 创建新用户case 2:deleteuser();break; // 删除用户case 3:selectuser();displayfilemenu();break; // 选择一个用户case 4:displayuser(); // 显示用户getchar();getchar();displayusermenu();break;case 5:system("cls"); //系统时间显示time();displayusermenu();break;case 6:userhelp(); // 帮助getch();displayusermenu();break;case 7:system("cls"); // 退出printf("\n\n\n\t\t\t\t欢迎再次使用!!\n\n");getch();exit(0);break;default :printf("\n\n\t\t\t你的输入有误!请重新输入!!!\n");getch();displayusermenu();break; // 输入非上述数字重新输入}}void displayfilemenu() // 显示文件管理操作菜单{system("cls"); // 清屏int choice;LIST *p=currentlist;printf("\n\t\t [%s]你好,欢迎进入文件管理系统\n",currentuser->username);//提示信息printf("\n 当前的文件路径:");// 接入目录地址do{printf("<%s",p->listname);p=p->parent;}while(p!=NULL);printf("\t\t[格式:子目录<--根目录]\n\n");printf(" 功能选择\n\n");//菜单printf("\t\t1、新建文件\t\t\t 9、复制文件\n");printf("\t\t2、删除文件\t\t\t10、粘贴文件\n");printf("\t\t3、新建文件夹\t\t\t11、显示当前路径文件(夹)\n");printf("\t\t4、删除文件夹\t\t\t12、进入下一级文件夹\n");printf("\t\t5、打开文件\t\t\t13、返回上一级文件夹\n");printf("\t\t6、读出文件\t\t\t14、返回用户管理菜单\n");printf("\t\t7、写入文件\t\t\t15、帮助与支持\n");printf("\t\t8、关闭文件\t\t\t16、直接退出系统\n\n");printf("\n\n");printf("\t\t\t按功能选择选择相应的操作(输入相关数字): ");scanf("%d",&choice);printf("\n");system("cls");switch(choice)//switch语句{case 1:creatfile(currentlist,0);break; // 创建文件case 2:deletefile(currentlist,0);break; // 删除文件case 3:creatfile(currentlist,1);break; // 创建文件夹case 4:deletefile(currentlist,1);break; // 删除文件夹case 5:openfile();break; // 打开文件case 6:readfile();displayfilemenu();break; // 读出文件case 7:writefile();displayfilemenu();break; // 写入文件case 8:closefile();break; // 关闭文件case 9:copyfile();break; // 复制文件case 10:pastedfile();break; // 粘贴文件case 11:displaylist(); // 显示文件(夹)getch();displayfilemenu();break;case 12:next();break; // 进入下一级文件夹case 13:back();break; // 返回上一级文件夹case 14:displayusermenu();break; // 退出,返回上用户管理菜单case 15:filehelp();displayfilemenu();break;case 16:quit();break;default :printf("\n\n\t\t\t你的输入有误!请重新输入!!!\n");getch();displayfilemenu();break; // 非法输入,返回文件管理菜单重新输入}}void login(){char username[20];char password[20];printf("\n\n\n\n");printf("\t\t\t系统登陆:(用户密码均为admin)\n\n");printf("\t\t\t请输入用户名:");scanf("%s",username);printf("\t\t\t请输入密码:");scanf("%s",password);if(strcmp(username,"admin")||strcmp(password,"admin")){printf("\n\t\t用户名或密码错误,请重新输入!\n");getch();system("cls");login();}}void time() // 显示系统时间日期{time_t now; // 调用系统日期时间time(&now);printf("\n\n \t\t\t系统当前日期时间\n\n");printf("\t\t\t %s",asctime(localtime(&now)));//显示系统详细时间printf("\n\n\n");getch();}void creatuser() // 创建用户{int i;char s;USD *p,*q=user;system("cls");p=get(USD);for(i=1;q!=NULL;i++)q=q->next; // i指示当前用户个数q=user;printf("\n\t\t\t\t[创建一个新用户]\n");printf("\n\t\t\t\t请输入NO.%d个用户名: ",i);scanf("%s",p->username); //输入新用户的名字LIST *l=list;l=get(LIST);strcpy(l->listname,p->username);l->next=NULL;l->type=1;l->parent=NULL;l->child=NULL;p->list=l;p->next=NULL;if(user==NULL){user=p; // 若user为空,则把P复给user}else // 若user不为空,则以有旧用户存在{while(q->next!=NULL){ // 寻找最后一个用户if(strcmp(p->username,q->username)==0){ // 比较,看系统是否已经存在该用户printf("\n\tthe user has exit ! try again !\n\n"); // 提示出错信息getchar();getchar();system("cls");displayusermenu();}q=q->next;}if(strcmp(p->username,q->username)==0){///检查提示重名并提示信息printf("\n\t\t\t该用户已经存在!无法创建该用户!\n\n");getchar();getchar();system("cls");displayusermenu();}q->next=p; //继续寻找下一个字符}printf("\n\t\t\t\t是否要再创建一个用户?(Y/N):"); //输入下一个用户scanf("%s",&s);switch(s){case 'y':creatuser();break;case 'Y':creatuser();break;case 'n':displayusermenu();break;case 'N':displayusermenu();break;default :displayusermenu();break;}}void deleteuser() //删除用户{char n[10];USD *p=user,*pre=NULL;displayuser();if(!p){printf("\n\t\t\t\t系统无用户可删除!\n"); //P为空,报错,必须先创建一个用户getchar();getchar();system("cls");displayusermenu();}printf("\n\n\t\t\t\t请输入要删除的用户名:");scanf("%s",n);while(p!=NULL){if(strcmp(p->username,n)==0) //寻找所要删除的用户{if(p==user){user=user->next; //若是第一个用户,则释放P }else{pre->next=p->next;}free(p);printf("\n\n\n\t\t\t\t 已经成功删除用户[%s]!!! ",n);break;}else{pre=p;p=p->next;}}if(p==NULL) //找不到用户{printf("\n\n\t\t\t找不到该用户!请确认该用户是否存在!\n");}getchar();getchar();system("cls"); displayusermenu();}void selectuser() //选择用户{char n[10];USD *p=user;displayuser();if(!p){printf("\n\t\t\t该用户不存在!请确认用户名是否正确!!!"); //没有用户getchar();getchar();system("cls");displayusermenu();}printf("\n\t\t\t\t[选择一个用户]");printf("\n\n\t\t\t\t请输入用户名:");scanf("%s",n); //输入用户名while(p!=NULL){if(strcmp(p->username,n)==0) //逐个比较寻找用户{currentuser=p; //找到对应用户,则把currentuser指向该用户currentlist=p->list;printf("%s\n",currentlist->listname);return;}else{p=p->next;}}if(p==NULL) //找不到用户{printf("\n\n\t\t\t\t该用户不存在!!!");getchar();system("cls");displayusermenu();}}void creatfile(LIST *qq,int flag) //创建文件(夹){LIST *temp;LIST *p=qq->child;LIST *q;temp=get(LIST);loop:q=qq->child;if(flag==0){printf("\n\t\t\t\t[创建一个新文件]\n");printf("\n\t\t\t\t请输入新建文件名: "); //输入文件名}else{printf("\n\t\t\t\t[创建一个新文件夹]\n");printf("\n\t\t\t\t请输入新建文件夹名: "); //输入文件名}scanf("%s",temp->listname);while(q!=NULL){if(strcmp(temp->listname,q->listname)==0){printf("\n\t\t\t相同路径下有重名文件!请重新输入!");goto loop;}q=q->next;}temp->content=NULL;printf("\n\t\t文件属性: 0、只读Read\t\t1、读和写Read&Write"); //设置保护模式printf("\n\n\t\t\t请根据提示选择保护模式(0/1)?: ");scanf("%d",&temp->protect);if(temp->protect!=0&&temp->protect!=1){ printf("\n\n\t\t\t你的选择有误!请重新输入(0/1)?: ");scanf("%d",&temp->protect);}if(flag==0){printf("\n\t\t\t\t请输入该文件的长度: "); //设置文件长度,供写入文件时会用到scanf("%d",&temp->length);}if(flag==0)temp->type=0; //0为文件else temp->type=1;temp->flag=0; //文件默认为关闭状态,以后需要时再打开temp->child=NULL;temp->next=NULL;temp->parent=currentlist;if(p==NULL){qq->child=temp;}else{while(p->next!=NULL){p=p->next;}p->next=temp;}getchar();displayfilemenu();}void deletefile(LIST *qq,int flag) //删除文件(夹) {char n[10];LIST *p=qq->child;LIST *pre=NULL;if(flag==0){printf("\n\t\t\t\t[删除一个文件]\n");printf("\n\t\t\t\t请输入要删除的文件名: ");}else{printf("\n\t\t\t\t[删除文件夹]\n");printf("\n\t\t\t\t请输入要删除的文件夹名: ");}scanf("%s",n);while(p!=NULL){if((strcmp(p->listname,n)==0)&&(p->type==0)){if(pre==NULL) //第一个节点{qq->child=p->next;free(p);printf("\n\n\t\t\t\t文件%s已删除成功!!!\n",n);}else{pre->next=p->next; //把前一个指针的NEXT指向N当前指针的NEXT,则删除该文件printf("\n\n\t\t\t\t文件%s已删除成功!!!\n",n);free(p);}break;}else if((strcmp(p->listname,n)==0)&&(p->type==1)){if(pre==NULL) //第一个节点{qq->child=p->next;free(p);printf("\n\n\t\t\t\t文件夹%s已经成功删除!!!\n",n);}else{pre->next=p->next; //把前一个指针的NEXT指向N当前指针的NEXT,则删除该文件printf("\n\n\t\t\t\t文件夹%s已经成功删除!!!\n",n);free(p);}break;}else{pre=p;p=p->next;}}if(p==NULL&&flag==0) //该文件不存在printf("\n\n\t\t\t\t找不到该文件!");else if(p==NULL&&flag==1) printf("\n\n\t\t\t\t找不到该文件夹!\n");getchar(); //用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中)getchar();displayfilemenu();}void openfile() ////打开文件{char n[10];LIST *p=currentlist->child;printf("\n\t\t\t\t[打开一个文件]\n");printf("\n\t\t\t\t请输入要打开的文件名: ");//输入文件名scanf("%s",n);while(p!=NULL){if((strcmp(p->listname,n)==0)&&(p->type==0)&&(p->flag==0))//比较文件以寻找要打开的文件{p->flag=1;printf("\n\t\t\t\t文件%s成功打开!!!\n",n);break;}elseif((strcmp(p->listname,n)==0)&&(p->type==0)&&(p->flag==1)) {printf("\n\t\t\t\t文件%s打开已经!!!\n",n);break;}p=p->next;}if(p==NULL){printf("\n\n\t\t\t\t找不到该文件!\n");}getchar();getchar();displayfilemenu();}void readfile() //读出文件{char n[10];LIST *p=currentlist->child;printf("\n\t\t\t\t[读取一个文件]\n");printf("\n\n\t\t\t\t请输入要读的文件名: ");scanf("%s",n);while(p!=NULL){if((strcmp(p->listname,n)==0)&&(p->type==0)&&(p->flag==1))//{printf("\n\t\t\t文件%s容是:%s",p->listname,p->content);getchar();getchar();system("cls");return;}p=p->next;}printf("\n\n\t\t读文件失败,请确认该文件是否已经打开或文件是否存在!\n");getchar();getchar();}void writefile() //写入文件{char n[10],*temp;LIST *p=currentlist->child;printf("\n\t\t\t\t[写入文件]\n");printf("\n\t\t\t\t请输入要写的文件名: ");scanf("%s",n);while(p!=NULL)if((strcmp(p->listname,n)==0)&&(p->type==0)){if(p->flag==0){printf("\n\t\t\t文件未打开,无法写入!请将文件置打开状态!!!\n");getchar();getchar();system("cls");}else if(p->protect==0){printf("\n\n\t\t\t操作受限!该文件不能写!!!\n"); //该文件限制读写getchar();system("cls");return;}else{temp=(char *)malloc(sizeof(char)*p->length);printf("\n\n\t\t\t\t请输入文件容(length<=%d):\n\n\t",p->length);scanf("%s",temp);p->content=temp;getchar();system("cls");}return;}p=p->next;}printf("\n\n\t\t\t该文件不存在!获取失败!!!\n");//提示getchar();getchar();}void closefile() //关闭文件{char n[10];LIST *p=currentlist->child;printf("\n\t\t\t\t[关闭一个文件]\n");printf("\n\t\t\t\t请输入要关闭的文件名: ");scanf("%s",n);while(p!=NULL){if((strcmp(p->listname,n)==0)&&(p->type==0)&&(p->flag==1))//寻找需要文件。