操作系统课程论文设计
(操作系统课程设计)
连续动态分区内存
管理模拟实现
学生姓名: 韩 慧 学生学号: 031140312 班 级: 031140--3 0311401、02、03、04班制
二〇一三年十二月 湖北民族学院信息工程学院11级计算机专业操作系统课程设计
目录
《操作系统》课程设计.......................................................1 引言......................................................................3 课程设计目的和内容......................................................3 需求分析.........................................................................3 概要设计...................................................................3 开发环境........................................................................4 系统分析设计.....................................................................4 有关了解内存管理的相关理论..................................................4 内存管理概念........................................................................4 内存管理的必要性..............................................................4 内存的物理组织.............................................................4 什么是虚拟内存.................................................................5 连续动态分区内存管理方式...................................................5 单一连续分配(单个分区)...................................................5
固定分区存储管理...............................................................5 可变分区存储管理(动态分区)..............................................5 可重定位分区存储管理........................................................5 问题描述和分析....................................................................6 程序流程图........................................................................6 数据结构体分析..................................................................8 主要程序代码分析...............................................................9 分析并实现四种内存分配算法.................................................11 最先适应算.....................................................................11 下次适应分配算法..........................................................13 最优适应算法...............................................................16 最坏适应算法...............................................................18 回收内存算法................................................................20 调试与操作说明.................................................................22
初始界面.......................................................................22 模拟内存分配...............................................................23
已分配分区说明表面............................................................24 空闲区说明表界面.............................................................24 回收内存界面.....................................................................25 重新申请内存界面..........................................................26.总结与体会......................................................................28 湖北民族学院信息工程学院11级计算机专业操作系统课程设计
参考文献.........................................................................28
引言
操作系统是最重要的系统软件,同时也是最活跃的学科之一。我们通过操作系统可以理解计算机系统的资源如何组织,操作系统如何有效地管理这些系统资源,用户如何通过操作系统与计算机系统打交道。
存储器是计算机系统的重要组成部分,近年来,存储器容量虽然一直在不断扩大,但仍不能满足现代软件发展的需要,因此,存储器仍然是一种宝贵而又紧俏的资源。如何对它加以有效的管理,不仅直接影响到存储器的利用率,而且还对系统性能有重大影响。而动态分区分配属于连续分配的一种方式,它至今仍在内存分配方式中占有一席之地。
课程设计目的和内容:
理解内存管理的相关理论,掌握连续动态分区内存管理的理论;通过对实际问题的编程实现,获得实际应用和编程能力。
编写程序实现连续动态分区内存管理方式,该程序管理一块虚拟内存,实现内存分配和回收功能。分析并实现四种内存分配算法,即最先适应算法,下次最先适应算法,最优适应算法,最坏适应算法。内存分配算法和回收算法的实现。
需求分析
动态分区分配是根据进程的实际需要,动态地为之分配内存空间。在实现动态分区分配时,将涉及到分区分配中所用的数据结构、分区分配算法和分区的分配和回收操作这样三个问题。常用的数据结构有动态分区表和动态分区链。在对数据结构有一定掌握程度的情况下设计合理的数据结构来描述存储空间,实现分区存储管理的内存分配功能,应该选择最合适的适应算法(首次适应算法,最佳适应算法,最后适应算法,最坏适应算法),在动态分区存储管理方式中主要实现内存分配和内存回收算法,在这些存储管理中间必然会有碎片的产生,当碎片产生时,进行碎片的拼接等相关的内容
概要设计
本程序采用机构化模块化的设计方法,共分为四大模块。⑴最先适应算法实现
从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法目的在于减少查找时间。为适应这种算法,空闲分区表(空闲区链)中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高地址空间保留大的空闲区。⑵下次适应分配算法实现 湖北民族学院信息工程学院11级计算机专业操作系统课程设计
该算法是最先适应算法的变种。在分配内存空间时,不再每次从表头(链首)开始查找,而是从上次找到空闲区的下一个空闲开始查找,直到找到第一个能满足要求的的空闲区为止,并从中划出一块与请求大小相等的内存空间分配给作业。该算法能使内存中的空闲区分布得较均匀。⑶最优适应算法实现
它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。⑷最坏算法实现
最坏适应分配算法要扫描整个空闲分区或链表,总是挑选一个最大的空闲分区分割给作业使用。该算法要求将所有的空闲分区按其容量从大到小的顺序形成一空闲分区链,查找时只要看第一个分区能否满足作业要求。
开发环境:
win7 下 VC++6.0 系统分析设计:
相关算法原理,算法流程图,涉及的数据结构内容都相应包含在各章节中
有关了解内存管理的相关理论
内存管理概念:
内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。内存不是预先划分好的,而是在系统运行的过程中建立分区.当作业装入主存时,根据作业所需要的主存容量查看是否有足够的主存空间,若有则按需要分割一个分区给该作业;否则令该作业等待.分区长度不固定分区个数不固定。这种存储管理的方法克服了固定分区严重浪费主存的问题,提高了主存资源的利用率。
内存管理的必要性:
内存管理对于编写出高效率的 Windows 程序是非常重要的,这是因为Windows 是多任务系统,它的内存管理和单任务的 DOS 相比有很大的差异。DOS是单任务操作系统,应用程序分配到内存后,如果它不主动释放,系统是不会对它作任何改变的;但 Windows 却不然,它在同一时刻可能有多个应用程序共享内存,有时为了使某个任务更好地执行,Windows 系统可能会对其它任务分配的内存进行移动,甚至删除。因此,我们在 Windows 应用程序中使用内存时,要遵循Windows 内存管理的一些约定,以尽量提高 Windows 内存的利用率。湖北民族学院信息工程学院11级计算机专业操作系统课程设计
1.3 内存的物理组织:
物理地址:
把内存分成若干个大小相等的存储单元,每个存储单元占 8 位,称作字节(byte)。每个单元给一个编号,这个编号称为物理地址(内存地址、绝对地址、实地址)。
二、物理地址空间: 物理地址的集合称为物理地址空间(主存地址空间),它是一个一维空间。
什么是虚拟内存:
虚拟内存是内存管理技术的一个极其实用的创新。它是一段程序(由操作系统调度),持续监控着所有物理内存中的代码段、数据段,并保证他们在运行中的效率以及可靠性,对于每个用户层(user-level)的进程分配一段虚拟内存空间。当进程建立时,不需要在物理内存件之间搬移数据,数据储存于磁盘内的虚拟内存空间,也不需要为该进程去配置主内存空间,只有当该进程被被调用的时候才会被加载到主内存。
连续动态分区内存管理方式的实现
在早期的操作系统中,主存分配广泛采用连续分配方式。连续分配方式,是指为一个用户程序分配一个连续的内存空间,该连续内存空间指的的是物理内存。下面介绍连续分配的四种方式。
单一连续分配(单个分区)
最简单的存储管理方式,用于多道程序设计技术之前。内存分为系统区和用户区,系统区由操作系统使用。用户区作为一个连续的分区分配给一个作业。分区存储管理是满足多道程序设计的最简单的一种存储管理方法,它允许多 4个用户程序同时存在系统内存中,即共享内存空间。按分区划分方式可分为固定分区和可变分区。
固定分区存储管理
把内存的用户区预先划分成多个分区,每个分区大小可以相同,也可以不同。(分区的划分由计算机的操作员或者由操作系统给出,并给出主存分配表)分区个数固定,分区的大小固定。一个分区中可装入一个作业,作业执行过程中不会改变存放区域。早期的 IBM 的 OS/MFT(具有固定任务数的多道程序系统)采用了这种固定分区的方法。
可变分区存储管理(动态分区)
内存不是预先划分好的,而是在系统运行的过程中建立分区.当作业装入主存时,根据作业所需要的主存容量查看是否有足够的主存空间,若有则按需要分割一个分区给该作业;否则令该作业等待。分区长度不固定分区个数不固定。这种存储管理的方法克服了固定分区严重浪费主存的问题,提高了主存资源的利用率。IBM操作系统OS/MVT采用可变分区存储管理。湖北民族学院信息工程学院11级计算机专业操作系统课程设计
可重定位分区存储管理
解决碎片问题的一种简单方法是采用可重定位分区分配.。其中心思想是,把不同程序,且在内存中地址不连续的想法让他们连续。
例:内存中现有 3 个空闲区,现有一作业到达,要求获得 30k 内存空间,没有分区满足容量要求,若想把作业装入,可将内存中所有作业进行移动,这样把原来分散的空闲区汇集成一个大的空闲区。将内存中的作业进行移动使它们连接在一起把原来分散的多个小分区拼接成一个大的空闲区.这个过程称为”紧凑”或”移动”。需解决的问题:每次”紧凑”后程序或数据装入的物理地址变化采用动态重定位。
问题描述和分析
系统应利用某种分配算法,从空闲分区链表中找到所需大小的分区,如果空闲分区大小大于请求分区大小,则从该分区中按改请求的大小划分出一块内存空间大小划分出一块内存空间分配出去,余下的部分仍留在空闲链表中。然后,将分配区的首址返回给调用者。
当进程运行完毕师范内存时,系统根据回收区的首址,从空闲区中找到相应的插入点,此时可能出现以下四种情况之一:
⑴该空闲区的上下两相邻分区都是空闲区:将三个空闲区合并为一个空闲区。新空闲区的起始地址为上空闲区的起始地址,大小为三个空闲区之和。空闲区合并后,取消可用表或自由链中下空闲区的表目项或链指针,修改上空闲区的对应项。
⑵该空闲区的上相邻区是空闲区:将释放区与上空闲区合并为一个空闲区,其起始地址为上空闲区的起始地址,大小为上空闲区与释放区之和。合并后,修改上空闲区对应的可用表的表目项或自由链指针。
⑶该空闲区的下相邻区是空闲区:将释放区与下空闲区合并,并将释放区的起始地址作为合并区的起始地址。合并区的长度为释放区与下空闲区之和。同理,合并后修改可用表或自由链中相应的表目项或链指针。
⑷两相邻区都不是空闲区:释放区作为一个新空闲可用区插入可用表或自由链。
程序流程图
内存分配流程图,如图
湖北民族学院信息工程学院11级计算机专业操作系统课程设计
从头开始查表检索完否?NY返回分区大小>所需大小N继续检索下一个表项Y分区大小-所需大小<=不可再分割大小N从该分区中划出所需大小的新分区Y将该分区从链中移出将该分区分配给请求者修改有关数据结构返回
内存回收流程图,如图
湖北民族学院信息工程学院11级计算机专业操作系统课程设计
开始判断空闲区上下内存情况上为空下为空上下都为空上下都不为空将上面的空闲区合并,并回收将下面的空闲区合并,并回收将上下的空闲区合并,并回收直接将其回收结束 数据结构体分析
⑴进程属性结构体 typedef struct readyque { char name[10];int size;}readyque,*readyqueue;⑵空闲链表结构体 typedef struct idlyspace { int from;int size;idlyspace * next;}idlyspace,*idly;⑶已分配链表结构体 typedef struct busyspace { int from;readyque r;湖北民族学院信息工程学院11级计算机专业操作系统课程设计
busyspace * next;}busyspace,*busy
主要程序代码分析
⑴主函数//代码请添加适当的注释。int main(){ Is=(idly)malloc(sizeof(idlyspace));Is->from=0;Is->size=256;Is->next=NULL;Is2=Is;Bs=(busy)malloc(sizeof(busyspace));Bs->next=NULL;int t,t1;printf(“n.......................欢迎来到动态分区存储管理系统..................nn”);printf(“...........................请选择要执行的算法:...........................n”);printf(“.........................1.最先适应算法
...............................n”);printf(“.........................2.下次适应算法............................n”);printf(“..........................3.最优适应算法
...............................n”);printf(“.........................4.最坏适应算法................................n”);printf(“........................................................................n”);printf(“请输入您的选择:”);scanf(“%d”,&t);int i;while(i!=5){
printf(“........................................................................n”);
printf(“.........................操作菜单如下:(请选择).......................n”);
printf(“..........................1.输入进程分配空间...........................n”);
printf(“.........................2.进程撤销回收空间...........................n”);
printf(“.........................3.输出所有空闲分区
..........................n”);
printf(“..........................4.输出所有已分配分区..........................n”);
printf(“..........................5.退
出..........................n”);
printf(“........................................................................n”);
scanf(“%d”,&i);
switch(i)
{
case 1:
switch(t)
{
case 1:
t1=FF();湖北民族学院信息工程学院11级计算机专业操作系统课程设计
break;
case 2:
t1=NF();
break;
case 3:
t1=BF();
break;
case 4:
t1=WF();
break;
default:
printf(“选择算法错误n”);
return 1;
}
if(t1)
printf(“分配空间成功n”);
else
printf(“分配空间失败n”);
break;
case 2:
t1=recover();
if(t1)
printf(“回收成功n”);
else
printf(“回收失败n”);
break;
case 3:
Isprint();
break;
case 4:
Bsprint();
break;
} } return 0;}
第三章 :分析并实现四种内存分配算法
最先适应算法
空闲区按地址从小到大的次序排列。
分配:当进程申请大小为 SIZE 的内存时,系统顺序查找空闲区表(链),直到找到容量满足要求(≥SIZE)的空闲区为止。从该空闲区中划出大小为 SIZE的分区分配给进程,余下的部分仍作为一个空闲区,但要修改其首址和大小。湖北民族学院信息工程学院11级计算机专业操作系统课程设计
优点:这种算法是尽可能地利用低地址部分的空闲区,而尽量地保证高地址 6部分的大空闲区,有利于大作业的装入。
缺点:主存低地址和高地址分区利用不均衡。在低地址部分集中了许多非常小的空闲区碎片降低了主存的利用率。最先适应算法 int FF(){ int t=0;readyque D;printf““请输入进程名:””);scanf““%””,D.name);
printf““输入进程申请空间大小:””);scanf““%””,&D.size);
idly l=Is;int mt=256;busy b=Bs;idly min=NULL;while(l)
//寻找空闲表中大小满足申请进程所需大小并且起址最小的空闲结点
{
if(D.size<=l->size)
{
if(l->from { mt=l->from;min=l;t=1; } } l=l->next;} if(mt!=256) { busy j; j=(busy)malloc(sizeof(busyspace)); //如果找到则为进程分配空间 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 j->from=min->from; for(int i=0;i<10;i++) { j->r.name[i]=D.name[i]; } j->r.size=D.size; while(b->next) { if(b->next->from b=b->next;else break; } j->next=b->next; b->next=j; min->from=min->from+D.size; min->size=min->size-D.size;} return t;} 下次适应分配算法 最先适应算法的变种。 总是从空闲区上次扫描结束处顺序查找空闲区表(链),直到找到第一个满足容量要求的空闲区为止,分割一部分给作业,剩余部分仍作为空闲区。下次适应分配算法 int NF(){ int t=0;readyque D;printf““请输入进程名:””);scanf““%””,D.name); 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 printf““输入进程申请空间大小:””);scanf““%””,&D.size); int mt=256;idly l=Is2;idly min=NULL;busy b=Bs;while(l)//寻找空闲表中大小满足申请进程所需大小并且起址最小的空闲结点 { if(D.size<=l->size) { if(l->from { mt=l->from;min=l;t=1; } } l=l->next;} if(mt!=256) { busy j; j=(busy)malloc(sizeof(busyspace)); j->from=min->from; for(int i=0;i<10;i++) { j->r.name[i]=D.name[i]; } j->r.size=D.size; while(b->next) { if(b->next->from b=b->next;else break; //如果找到则为进程分配空间 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 } //将申请空间进程插入到已分配链表中 j->next=b->next; b->next=j; //修改相应空闲节点的起址和大小 min->from=min->from+D.size; min->size=min->size-D.size; Is2=min->next; 结点 t=1; return t;} l=Is;//l指向空闲表的头 while(l!=Is2) { if(D.size<=l->size) { if(l->from { mt=l->from;min=l;t=1; } } l=l->next;} if(mt!=256){ busy j; j=(busy)malloc(sizeof(busyspace)); j->from=min->from; for(int i=0;i<10;i++) { //ls2指向修改结点的下一个 //循环查找 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 j->r.name[i]=D.name[i]; } j->r.size=D.size; while(b->next) { if(b->next->from b=b->next;else break; } j->next=b->next; b->next=j; min->from=min->from+D.size; min->size=min->size-D.size; Is2=min->next; t=1; return t;} return t;} 最优适应算法 空闲区按容量递增的次序排列。 分配:当进程申请存储空间,系统顺序查找空闲区表(链),直到找到第一个满足容量要求的空闲区为止。采用最优适应算法选中的空闲区是满足容量要求的最小空闲区。优点:选中的空闲区是满足容量要求的最小空闲区,而不致于毁掉较大的空闲区。 缺点:空闲区的大小一般与申请分区大小不相等,因此将其一分为二,留下来的空闲区一般情况下是很小的,以致无法使用。随着时间的推移,系统中的小空闲区会越来越多,从而造成存储空间的浪费。最优适应算法 int BF(){ int t=0;湖北民族学院信息工程学院11级计算机专业操作系统课程设计 readyque D;printf““请输入进程名:””);scanf““%””,D.name); printf““输入进程申请空间大小:””);scanf““%””,&D.size); idly l=Is;idly min=NULL;int mt=256;busy b=Bs;while(l)//在空闲链中寻找第一个大于所输入的进程大小的空闲块 { if(D.size<=l->size) { if(l->size { mt=l->size;min=l;t=1; } } l=l->next;} if(mt!=256) { busy j; j=(busy)malloc(sizeof(busyspace));空间 j->from=min->from; //申请分配用于存放进程的内存 //找到第一个满足要求的空闲块 //将第一个满足要求的空闲块(min)的首地址赋给j for(int i=0;i<10;i++) { j->r.name[i]=D.name[i];16 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 } j->r.size=D.size; while(b->next) //按从小到大的顺序查找新进程在已分配区中的位置 { if(b->next->from b=b->next;else break; } j->next=b->next; b->next=j; min->from=min->from+D.size; min->size=min->size-D.size; } return t;} 最坏适应算法 为了克服最佳适应算法把空闲区切割得太小的缺点,人们提出了一种最坏适应算法,即每次分配时,总是将最大的空闲区切去一部分分配给请求者,剩余的部分仍是一个较大的空闲区。避免了空闲区越分越小的问题。要求空闲区按容量递减的顺序排列。 分配:进程申请存储区时,检查空闲区表(链)的第一个空闲区的大小是否满足要求,若不满足则令进程等待;若满足则从该空闲区中分配一部分存储区给用户,剩下的部分仍作为空闲区。最坏适应算法 int WF(){ int t=0;readyque D;printf““请输入进程名:””);scanf““%””,D.name); printf““输入进程申请空间大小:””); //将所输入的进程插入进程链 //改变该空闲块的起始地址 //改变该空闲块的剩余大小 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 scanf““%””,&D.size); //输入进程申请的空间大小 idly l=Is;//l指向空闲链表ls头 idly min=NULL;int mt=0;busy b=Bs; //b指向已分配链表Bs头 //找到空闲分区中大小满足进程的请求且尺寸最大的结点 while(l){ if(D.size<=l->size)//判断进程所申请的大小是否小于空闲区的各结点大小 { if(l->size>mt) { mt=l->size;min=l;//min指向空闲区中尺寸最大的结点 t=1; } } l=l->next;} if(mt!=0)点 { busy j; j=(busy)malloc(sizeof(busyspace)); j->from=min->from; for(int i=0;i<10;i++) { j->r.name[i]=D.name[i]; } j->r.size=D.size; //判断是否找到了空闲区的满足结 //l指向空闲链表下一个结点 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 while(b->next)置 //寻找插入到已分配链表中的位 { if(b->next->from b=b->next;else break; } //把此进程结点j插入到已分配链表中 j->next=b->next; b->next=j; //修改空闲链表的相应结点的参数 min->from=min->from+D.size; min->size=min->size-D.size;} return t;} 可变分区的回收 当某个进程释放某存储区时,系统首先检查释放区是否与系统中的空闲区相邻若相邻则把释放区合并到相邻的空闲区去,否则把释放区作为一个空闲区插入到空闲表的适当位置。 释放区与空闲区相邻的四种情况。 (1)释放区与前空闲区相邻:把释放区与前空闲区合并到一个空闲区。其首址仍为前空闲区首址,大小为释放区大小与空闲区大小之和。 (2)释放区与后空闲区相邻:则把释放区合并到后空闲区,其首地址为释放区首地址,大小为二者之和。 (3)释放区与前后两空闲区相邻:这三个区合为一个空闲区,首地址为前空闲区首址,大小为这三个空闲区之和,并取消后空闲区表目。 (4)释放区不与任何空闲区相邻:将释放区作为一个空闲区,将其大小和首址插入到空闲区表的适当位置。 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 回收内存算法 int recover(){ readyque D;printf““请输入想要回收的进程名””); scanf““%””,D.name); busy b=Bs;idly l=Is;while(b->next)链表中 { bool yo=1; for(int i=0;i<10;i++) { if(b->next->r.name[i]==D.name[i])yo=yo*1; else yo=0; } //如果在已分配链表中则释放该结点所占空间 if(yo) { int t=b->next->from; int ts=b->next->r.size; //查找输入的进程名是否在已分配湖北民族学院信息工程学院11级计算机专业操作系统课程设计 while(l) { if(l->from>t+ts)不邻接 { idly tl;tl=(idly)malloc(sizeof(idlyspace));tl->from=t;tl->size=ts;tl->next=l;Is=tl;break;} if(l->from==t+ts) l->from=t; l->size=l->size+ts; busy tb=b->next; b->next=b->next->next; free(tb); return 1;} if(l->from+l->size idly tl; tl=(idly)malloc(sizeof(idlyspace)); tl->from=t; tl->size=ts; tl->next=l->next; l->next=tl; break;} else if(l->from+l->size==t) //所回收进程与空闲结点上邻接 { //所回收进程与空闲结点上下都不邻接 //所回收进程与空闲结点下邻接 { //所回收进程与空闲结点上下都 21 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 l->size=l->size+ts; if(l->from+l->size==l->next->from)接 { l->size=l->size+l->next->size; idly tm=l->next; l->next=l->next->next; freI); } br l=l->next; } //从已分配链表中释放所回收进程 busy tb=b->next; b->next=b->next->next; free(tb); return 1; } b=b->next;} printf(“没找到这”进程n”);return 0;} //所回收进程与空闲结点上下都邻调试与操作说明 初始界面 程序初始界面,有四个块选择,选择要执行的算法,调试以最坏算法为例,如图 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 选择最坏适应算法,如图 模拟内存分配 给进程a分配内存20,如图 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 已分配分区说明表界面 同理,给进程b分配内存30,给进程c分配内存40,给进程d分配50,给进程e分配60,如图 空闲分区说明表界面 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 查看空闲分区,如图 回收内存界面 回收进程b和d所占内存,如图 已分配分区说明表和空闲分区说明表 如图 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 重新申请内存界面 再为新进程i分配内存30,如图 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 根据最坏适应算法结合图所示可知,该算法将会从空闲分区表中选择一块最大的内存空间分配给进程i,从图也可看出该模拟算法实现了最坏适应算法 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 总结与体会 本次做的课题是动态分区分配算法实现,此次课程设计成功实现了内存分配和内存回收,内存分配中包含了四种算法,分别是首次适应算法,循环首次适应算法,最佳适应算法和最坏适应算法。经编码调试,表明该程序模块是有效可行的。 通过这门课程的学习让我充分了解了内存管理的机制实现,从而更深一步的的对计算机 有了很多了解,这对于以后我们的研究和学习计算机系统起到了很重要的作用。 对于本次论文制作,自己的编程能力有所提高,对操作系统内存分配,存储空间的回收都有全新的认识。 在这次操作系统课程设计中,我使用了c++编写系统软件,对os中可变分区存储管理有了深刻的理解,但是过程中遇到了很多困难,一边做一边学,对c++有了比较多的理解。 实验中遇到很多问题,浪费了很多时间,总而言之是自己学习还不够好,不扎实,希望在以后学习中加以改善,学到更多知识。 参考文献 【1】 汤子瀛,哲凤屏,汤小丹.计算机操作系统.西安:西安电子科技大学出版社,2001.。湖北民族学院信息工程学院11级计算机专业操作系统课程设计 一、课程教学难点 1. 理论性强 该课程教学内容理论性强、概念抽象、涉及知识面广,学生时其整体实现思想和技术往往难以理解,学习时有较大难度,大部分学生有一种畏难情绪。因此学生很容易陷入疲于记忆的状态,忽略了对课程各部分间关系和课程教学目标的把握。因而该课程是计算机专业中教师“最难教”,学生“最难学”的课程之一。 2. 学习效果见效不快 很多学生对学后有立竿见影效果的课程兴趣较大,如程序设计语言,学生学会了便很快可以就某个问题编写程序上机运行,颇有成就感;而对诸如操作系统这样原理性强,实验要求高,设计一个操作系统又不现实的课程,一些学生因感觉学习后效应不会立即显现而对课程重视度较低。 二、教学目标 操作系统是目前最复杂、技术含量最高的软件,在计算机专业软、硬件课程的设置上起着承上启下的作用,其中的许多设计思想、技术和算法都可以推广和应用到大型的、复杂的系统设计,以及其他领域。因此,其教学目标应重在培养学生理解和掌握计算机操作系统的基本工作原理、设计技术及设计方法,培养学生开发系统软件和大型应用软件的意识和能力,同时还要让学生了解现代操作系统的新思想、新技术和发展研究动向。 三、课程知识体系设计 鉴于以上课程教学难点,教师若能从繁杂抽象的理论中理出一个脉络清晰的课程知识体系呈现给学生,将为有效达到教学目标要求起到事半功倍的作用。该课程教学内容有纵、横两条主线,纵线主要指操作系统各功能的设计思想、处理机制,横线主要指功能实现的具体技术方法、不同环境下的实现差异。因此,整个课程知识体系可按纵、横两条线展开,遵循知识、能力、素质协调发展的原则,从知识模块、知识单元和知识点3个层次来设计。其中知识模块代表特定学科子领域,可包括若干知识单元;知识单元代表知识模块中的不同方向,可包括若干知识点;知识点代表知识模块中单独的主题,是教学活动中传递教学信息的基本单元。 1. 纵向功能线 本文的纵向功能线是从资源管理功能出发来设计,通过基于操作资源管理功能的知识建构,学生能明确所学内容在知识体系中的层次、位置、关系。此处为使结构更清晰,按操作系统资源管理功能出发的纵向功能线细化为进程管理、处理机管理、存储器管理、设备管理、文件管理和用户接口六个知识模块,由此设计的纵向功能线知识结构如下: (1)进程管理知识模块包括进程概念、进程调度、进程互斥、进程同步、进程通信、进程死锁各知识单元。进程概念包含进程特征、进程状态与转换、进程控制各知识点;进程调度包含调度时机、调度算法、调度过程各知识点;进程互斥包含与时间有关的错误、临界资源与临界区、临界区使用原则、临界区互斥访问的解决途径、临界区互斥访问的解决途径各知识点;进程同步包含信号量同步机制、生产者与消费者问题、读者与写者问题、哲学家进餐问题各知识点;进程通信包含忙等待策略、睡眠和唤醒策略、消息传递策略各知识点;进程死锁包含产生原因、必要条件、解决途径各知识点。 (2)处理机管理知识模块包括分级调度、调度算法、算法评价各知识单元。分级调度包含作业调度、交换调度、进程调度各知识点;调度算法包含作业调度算法、进程调度算法各知识点;算法评价包含作业调度算法评价、进程调度算法评价各知识点。 (3)存储器管理知识模块包括存储管理功能、存储管理方案各知识单元。存储管理功能包含内存分配与回收、地址映射、内存共享、内存保护、内存扩充各知识点;存储管理方案包含分区存储管理、页式存储管理、段式存储管理、段页式存储管理各知识点。 (4)设备管理知识模块包括数据传送控制方式、并行技术各知识单元。数据传送控制方式包含程序直接控制方式、中断方式、DMA方式、通道控制方式各知识点;并行技术包含通道技术、中断技术、缓冲技术、分配技术、虚拟技术各知识点。 (5)文件管理知识模块包括文件结构、文件存储空间管理、文件目录管理、文件存取控制各知识单元。文件结构包含文件逻辑结构与文件存取、文件物理结构与存储设备各知识点;文件存储空间管理包含空闲文件目录、空闲块链、位示图各知识点;文件目录管理包含文件目录形式、文件共享与保护、目录检索各知识点;文件存取控制包含文件存取控制方法。 (6)用户管理知识模块包括命令接口和系统调用知识单元。命令接口包含脱机控制命令、联机控制命令知识点;系统调用包含设备管理类命令、文件管理类命令、进程管理类命令、存储管理类命令、线程管理类命令各知识点。 2. 横向技术线 操作系统知识点看似繁杂,但究其原理,在对不同系统资源功能进行管理时,所采取的策略和方法有很多是相同的。因此通过对重要方法和机制进行贯穿式的横向技术线,可使被条块分割的教学内容有效关联起来;通过横纵交错的连接,可使看似离散的知识有稳固而紧密衔接的结构。从操作系统四种重要实现技术出发的横向技术线包括中断技术、共享技术、虚拟技术和缓冲技术。当然,有些技术在其它相关课程中已有介绍,也可看出其在整个计算机系统中的重要程度,由此设计横向技术线知识结构如下: (1)中断技术知识模块是实现程序并发执行与设备并行操作的基础,它包括中断类型、中断优先级、中断事件各知识单元。中断类型知识单元包括外中断、内中断知识点;中断优先级知识点在不同的系统中有不同的规定;中断事件知识单元包括进程创建与撤消、进程阻塞与唤醒、分时时间片、缺页中断与缺段中断、I/O操作、文件操作各知识点。 (2)共享技术知识模块是提高资源利用率的必然途径,它包括处理机共享、存储共享、设备共享、文件共享各知识单元。处理机共享包含进程的并发执行;存储共享包含外存储器共享、内存储器共享知识点;设备共享包含SPOOLing系统;文件共享包含便于共享的文件目录。 (3)虚拟技术知识模块是把一个物理实体变为若干面向用户的逻辑单元,使资源的用户使用与系统管理相分离,从而提高资源利用率和安全性方,它包括虚拟处理机、虚拟存储器、虚拟存储器方法、虚拟设备、虚拟文件各知识单元。虚拟处理机包含多进程管理;虚拟存储器包含地址转换、中断处理过程、置换知识点;虚拟存储器方法包含页式管理、段式管理、段页式管理各知识点;虚拟设备包含设备共享;虚拟文件包含文件共享。 (4)缓冲技术知识模块是异步技术的实现前提,可大大提高相关资源的并行操作程度,它包括存储管理缓冲技术、设备管理缓冲技术、文件管理缓冲技术各知识单元。存储管理缓冲技术包含快表;设备管理缓冲技术包含硬缓冲、软缓冲、SPOOLing系统中的输入/输出井知识点;文件管理缓冲技术包含记录成组技术、文件表的打开。 四、课程知识体系操作 知识体系的设计显然要有必要的操作作为支持才能使其与学习者间进行互动,形成交流并达到知识的内化。依据上述的知识体系设计,该课程教学可采用以下两个步骤进行操作,一是以“核心拓展”的方式进行纵向功能学习,二是以“小组学习和共同学习相结合”方式进行横向技术综合学习。 “核心拓展”方式中核心指六大知识模块,它们也是该课程的核心内容,教师应结合具体系统的具体实例以讲授方式进行,讲授过程中对于一些关键算法一定要以具体实例加以讲解,不能照本宣科。“小组学习和共同学习相结合”方式可采用将多次出现的具体技术单独提出来,讨论哪些功能应用了该技术。分小组,一个小组负责总结一项技术,然后以小组宣讲共同讨论的方式来加深技术对功能的应用。 通过这两个步骤的操作,整个课程的知识体系便可以横、纵两条线的形式清晰地呈现在学生面前,为培养学生从离散到系统性的学习和思维习惯创造条件。 参考文献 [1]李月明等.无机非金属材料工程专业知识体系和课程体系的构建[J].安徽工业大学学报, 2008, (1) . 【摘要】基于高职与普本分段培养“3+2”学生与普本学生的差异性,论文明确了《物流信息系统分析与设计》课程教学目标与定位,设计了面向“3+2”学生的教学内容、方法,提出采用理论教学、实例教学、课程设计为一体、模块化的教学方法,并注重建设教材库,以促进“3+2”学生成为高端技术型、技能型、服务型人才这一培养目标的实现。 【关键词】高职与普本分段培养 “3+2”学生 物流信息系统分析与设计 教学内容 教学方式 【中图分类号】F252【文献标识码】A 【文章编号】2095-3089(2016)31-0225-01 引言 “高职与普通本科分段培养”项目即高等职业教育学习3年(五年制高职学习5年),经过资格考核,进入普通本科教育学习2年。该类“3+2”学生学习期间,由对口试点的高职和本科院校,统筹制定对口专业理论知识课程和技能训练课程衔接贯通教学体系,系统化培养本科层次高端技能人才。南京林业大学与南京交通职业技术学院、南京铁道职业技术学院、江苏海事职业技术学院三所高职院校联合进行物流工程专业的“高职与普通本科分段培养”,共同培养本科层次高端技能型人才。作者基于南京林业大学物流工程专业“3+2”学生培养、授课经历,发现该类学生在高职阶段学习、专业基础与普本学生有所差异,《物流信息系统分析与设计》作为物流工程专业的必修主干课,在课程定位、教学内容上还需与普本学生有所区别与侧重,创新教学方法、教学模式,以适应学生培养要求。 1.课程教学定位 1.1学生培养要求 物流工程专业“3+2”学生的培养目标是掌握物流与综合运输管理方面基础理论和专业知识,具备在各级物流流通部门与交通运输领域从事客货运输调度与管理、物流系统设计与管理、物流技术装备应用等方面的管理和技术工作的本科层次高端技术技能复合型人才。 “3+2”学生相比普本学生,在仓储配送管理、电子商务、运输组织等实务、实训、实践应用方面有明显优势,然而存在专业基础知识不够扎实、知识的综合运用能力不强等问题。该类学生本科阶段培养目标与要求方面也与普本学生存在差异,在本科教学过程中需对其专科阶段学过的基本理论、基本原理等作进一步的延伸与拓展,且强化保持实践应用能力这一特长。 1.2 课程教学目标与定位 《物流信息系统分析与设计》是物流工程专业的一门必修主干课,通过本课程的学习与实践,学生应达到下列基本要求:1)理解物流信息、物流信息系统的基本概念;2)掌握物流信息的支持技术;3)掌握物流信息系统的开发方法,包括系统规划方法、分析方法、设计方法;4)熟悉物流信息系统的运行管理与项目管理。 这门课要求学生既通晓物流管理,又能运用信息技术、编程技术进行系统开发。基于“3+2”学生专业基础薄弱、实践能力强的特点,需有针对性地加强物流管理与信息科学、计算机科学专业基础知识的讲授,适当弱化已具备实践操作能力方面知识点,如物流信息采集识别?鄄条码、RFID技术的介绍。 2.课程教学内容设计 《物流信息系统分析与设计》课程含课内教学、课程设计两大内容,其中课内教学2学分、32学时,课程设计2学分,集中安排2周时间进行。 2.1 课内教学 教学内容含教学目标、学时分配如表1所示。与面向普本学生的课程教学内容相比,作了如下调整:简化2物流信息技术与应用章节的学时由8减为6;强化物流信息系统设计方法,学时由4增为6。 2.2 课程设计 课程讲授结束后安排2周时间完成课程设计训练,要求学生自行开发小型物流信息系统,提高开发信息系统的实践能力。基本要求:1)实现基本功能:数据录入、查询、统计报表、目录维护四个基本功能;2)6-7人分组选择适当规模大小的设计课题;3)开发工具自选;4)撰写相关技术文档,提交课程设计报告。 课程设计成果要求能开发出可以运行的物流信息系统,通过上机检查、课程设计答辩。由指导教师综合课程设计报告质量、系统开发成果、平时考勤进行打分。 3.课程教学方式设计 采用理论教学、实例教学、课程设计为一体的教学方法进行授课。每个知识点均有安排实例阅读,课程设计充分调动学生积极性和能动性,重视学生自学能力的培养。 采用模块化教学方法,制作模块化的课程PPT,适应不同讲课对象。将教学内容分成独立的若干模块,一篇或一章为一个模块,便于针对3+2类、普本学生进行取舍和组合,形成不同的教学方案。 教材库建设方面,暂未有一本教材完全适应3+2类学生的学习,因此会挑选1本主教材和多本辅助教材,形成教材库。 结束语 为培养“3+2”学生成为高端技术型、技能型、服务型人才,基于学生差异性、课程特殊性,论文明确了《物流信息系统分析与设计》课程教学目标与定位,设计了面向“3+2”学生的教学内容、方法与手段,提出主要采用理论教学、实例教学、课程设计为一体、模块化的教学方法,并注重建设教材库,以促进人才培养目标的实现。 参考文献: [1]安立华,李洋,马超等.《物流信息系统》课程建设研究[J].物流科技,2015年11期. [2]宋志兰,冉文学,刘丽.基于CDIO模式的“物流系统设计”课程的教与学[J].中国物流与采购,2014年15期. [3]邹勇,曾懿,雷方俊.物流信息系统课程实践教学方案设计与探索[J].商场现代化,2012年31期. [4]章文燕.物流信息管理课程设计[J].中国物流与采购,2011年10期. 作者简介: #include “stdlib.h” #define MAX 1000 struct file/*普通文件的结构体*/ { //int type;//0无作用,当做一个空节点存在;1为记录型文件;2为执行文件 //前两个变量为文件的权限设置,1为允许操作,0为不允许操作 int write;//可写 int read;//可读 int length;//文件的长度 char ch[MAX];};typedef struct file File; typedef struct ffile/*定义文件类型的结构体*/ { int type;//1为文件夹; 2为文件; char name[20];//文件(夹)名字 int open;//文件打开标志,0为关,1为开 File iffile;//如果为文件时有的信息 struct ffile *parent;//指向上一级文件的指针 struct ffile *brother;//指向同级兄弟文件(夹)的指针 struct ffile *child;//指向下一级文件(夹)的指针 }Ffile;typedef Ffile *FFile; /*typedef struct Open/*记录打开文件的结构体 { char name[20];//记录打开文件(夹)的名字 FFile* add;//记录打开文件上一级文件地址的指针 }Open;*/ //全局变量 FFile user1;//用户1 FFile user2;//用户2 FFile copyf;//记录被复制文件(夹)的上一级文件地址 //Open openf[20];//记录打开文件的队列 FFile init(void)/*初始化,创建根结点*/ { FFile c;c=(Ffile*)malloc(sizeof(Ffile)); c->type=2;c->open=0;//c->iffile.type=2;c->iffile.write=1;c->iffile.read=1;c->iffile.length=0;strcpy(c->name,“file1”);c->parent=NULL;c->child=NULL;c->brother=NULL;strcpy(c->iffile.ch,“NULL”);return(c);} /*void initopen(){ int a,b;a=20;for(b=1;b<=a;b++){ openf[b].add=NULL;} }*/ //传递要显示文件的parent的地址 void show(FFile user)/*显示当前界面存在的文件*/ { user=user->child;if(user==NULL){ printf(“该文件内没有任何文件(夹)。n”);return;} printf(“n”);for(;user!=NULL;){ printf(“<%s”,user->name);if(user->type==2){ /*if(user->iffile.type==1) printf(“/记录型文件/”); else printf(“/执行文件/”);*/ printf(“/%dk”,user->iffile.length);} else { printf(“/文件夹”); } printf(“>n”); user=user->brother;} } void creatf(FFile user)/*创建文件 || 文件夹*/ { FFile parent;char ch[20];//FFile user0;//parent=(Ffile*)malloc(sizeof(Ffile));parent=user;printf(“输入要创建文件(夹)的名字:n”); scanf(“%s”,ch);if(user->child==NULL){ user->child=(Ffile*)malloc(sizeof(Ffile)); user=user->child;}else { user=user->child; for(;;) { if(user->type==0)//开端的空结点,用新结点覆盖 break; if(!strcmp(user->name,ch)) { printf(“错误:该文件名已经存在,文件(夹)创建失败!n”); return; } if(user->brother==NULL) { user->brother=(Ffile*)malloc(sizeof(Ffile)); user=user->brother; break; } user=user->brother; } } } //设置新文件(夹)的信息 strcpy(user->name,ch);printf(“选择创建对象:1文件夹; 2文件;n”);scanf(“%d”,&user->type);user->open=0;if(user->type==2)//添加文件信息 { //printf(“选择文件类型:1记录型文件;2执行文件;n”);//scanf(“%d”,&user->iffile.type);printf(“能否对文件进行读:0禁止;1允许;n”);scanf(“%d”,&user->iffile.read);printf(“能否对文件进行写:0禁止;1允许;n”);scanf(“%d”,&user->iffile.write);//printf(“设置文件大小(单位:K):n”);//scanf(“%d”,&user->iffile.length);user->iffile.length=0;strcpy(user->iffile.ch,“NULL”);} user->brother=NULL;user->child=NULL;user->parent=parent;printf(“文件创建成功!n”);void deletechildtree(FFile user)/*删除子树--结合deletefile();使用*/ { if(user->brother!=NULL)//从下到上,从右到左删除 { deletechildtree(user->brother);} if(user->child!=NULL){ deletechildtree(user->child);} if(user!=NULL){ free(user);} } void deletefile(FFile user,char ch[20])/*删除文件 || 文件夹*/ { FFile p,parent; int a;parent=user;if(user->child==NULL){ printf(“错误:删除失败,该目录下没有可删除的文件(夹)!n”);return;} user=user->child;p=user;for(a=1;;a++)//找出要删除文件的所在位置 { if(!strcmp(user->name,ch)) break;if(user->brother==NULL){ printf(“错误:删除失败,当前位置没有该文件!n”); return;} if(a>1) p=user;user=user->brother;} if(user->open==1)//判断文件的开关情况 { } printf(“错误:删除失败,选择文件处于打开状态!n”);return;if(p==user)//被删文件在文件队列的开头 { if(user->brother==NULL)//该文件队列只有有一个文件 { parent->child=NULL; if(user->child!=NULL)//删除的是文件(夹)子树 { deletechildtree(user);}else { free(user);//删除的是文件(夹)结点 } printf(“删除成功!n”);return;} //文件队列有多个文件 p=user->brother; } parent->child=p;p->parent=parent;if(user->child!=NULL){ deletechildtree(user);}else { free(user);} printf(“删除成功!n”);return;else//被删文件不在队列开头 { if(user->brother==NULL)//被删文件在文件队列最末尾 { p->brother=NULL;if(user->child!=NULL){ deletechildtree(user);}else { free(user);} } printf(“删除成功!n”);return; //被删文件在文件队列中间 p->brother=user->brother; if(user->child!=NULL) { deletechildtree(user); } else { free(user); } } printf(“删除成功!n”);} FFile openfolder(FFile user)/*打开文件夹*/ { } //int a,b;//a=0;/*if(user->child==NULL){ user->child=(Ffile*)malloc(sizeof(Ffile));user->child->type=0;user->child->brother=NULL;user->child->parent=user;user->child->child=NULL; } /*for(b=1;b<=20;b++){ if(openf[b].add!=NULL) a++;} if(a==20){ printf(“错误:打开列表溢出!”);return(user);} for(b=1;;b++){ if(openf[b].add==NULL) break;}*/ user->open=1;//设置文件为打开 //strcpy(openf[b].name,user->name);//openf[b].add=user;printf(“文件夹打开成功。n”);return(user);//返回被打开的文件夹的地址 void openfile(FFile user)/*打开普通文件*/ { if(user->open==1){ printf(“错误:打开失败,此文件已经被打开!n”); return;} user->open=1;printf(“普通文件打开成功!n”);} FFile openff(FFile user)/*打开文件(夹)*/ { char ch[20];FFile parent; int a;printf(“选择要打开的文件名:n”);scanf(“%s”,ch); parent=user;if(user->child==NULL){ printf(“错误:打开失败,该目录下没有可打开的文件(夹)!n”);return(parent);} user=user->child;for(a=1;;a++)//找出要打开文件的所在位置 { if(!strcmp(user->name,ch)) break;if(user->brother==NULL){ printf(“错误:打开失败,当前位置没有该文件!n”); return(parent);} user=user->brother;} if(user->type==1){ printf(“开始打开文件夹。。n”);user=openfolder(user);} else if(user->type==2){ printf(“开始打开普通文件。。n”); openfile(user); user=user->parent;} return(user);} void closefile(FFile user)/*关闭普通文件*/ { char ch[20];int a;printf(“选择要打开的文件名:n”);scanf(“%s”,ch);if(user->child==NULL){ printf(“错误:关闭失败,该目录下没有可关闭的文件!n”);return;} user=user->child;for(a=1;;a++)//找出要关闭文件的所在位置 { if(!strcmp(user->name,ch)) break;if(user->brother==NULL){ printf(“错误:关闭失败,当前位置没有该文件!n”); return;} user=user->brother;} if(user->open==0){ printf(“错误:关闭失败,该文件已经是关闭状态!n”); return;} user->open=0;printf(“文件已经成功关闭!”);} /*没有文件夹关闭原因: 文件夹一打开就会跳向打开的新文件里 而文件夹关闭就会直接返回上一级的目录,若想整个文件夹都关闭,直接退出就可以了 因此不会直接关闭某个特定的文件*/ FFile backf(FFile user)/*返回上一层目录*/ { if(user->parent==NULL){ printf(“错误:返回失败,此处是最顶层目录!n”); return(user);} } user->open=0;user=user->parent;return(user);void readfile(FFile user)/*读文件*/ { char ch[20];int a; printf(“选择要读取的文件名:n”);scanf(“%s”,ch);if(user->child==NULL){ printf(“错误:读取失败,该目录下没有可读取的文件!n”);return;} user=user->child;for(a=1;;a++)//找出要读取文件的所在位置 { if(!strcmp(user->name,ch)) break;if(user->brother==NULL){ printf(“错误:读取失败,当前位置没有该文件!n”); return;} user=user->brother;} if(user->open==0){ printf(“错误:文件读取失败,该文件处于关闭状态!n”);return;} else if(user->iffile.read==0){ printf(“错误:文件读取失败,该文件受保护,禁止读取!n”);return;} printf(“读操作,该文件中的内容:n”);if(!strcmp(user->iffile.ch,“NULL”)){ printf(“该文件内没有可读内容!n”);return; } } printf(“%sn”,user->iffile.ch);printf(“文件读取成功!n”);void writefile(FFile user)/*写文件*/ { char ch[20];int a; } printf(“选择要进行写操作的文件名:n”);scanf(“%s”,ch);if(user->child==NULL){ printf(“错误:写操作失败,该目录下没有可写的文件!n”);return;} user=user->child;for(a=1;;a++)//找出要读取文件的所在位置 { if(!strcmp(user->name,ch)) break;if(user->brother==NULL){ printf(“错误:写操作失败,当前位置没有该文件!n”); return;} user=user->brother;} if(user->open==0){ printf(“错误:文件写操作失败,该文件处于关闭状态!n”);return;} else if(user->iffile.write==0){ printf(“错误:文件写操作失败,该文件受保护,禁止写!n”);return;} printf(“写操作,输入内容:n”);scanf(“%s”,user->iffile.ch);user->iffile.length=strlen(user->iffile.ch);printf(“文件进行写操作成功!n”); FFile copyfile(FFile user,FFile copyf)/*拷贝文件*/ { char ch[20];int a;printf(“选择要进行拷贝的文件(夹)名:n”);scanf(“%s”,ch); if(user->child==NULL){ printf(“错误:拷贝失败,该目录下没有可拷贝的文件!n”); return(NULL);} user=user->child;for(a=1;;a++)//找出要拷贝文件的所在位置,用user替代 { if(!strcmp(user->name,ch)) break; if(user->brother==NULL) { printf(“错误:拷贝失败,当前位置没有该文件!n”); return(NULL); } user=user->brother;} copyf=user; } printf(“拷贝成功!n”);return(copyf);FFile fenpei(FFile copyf,FFile user,FFile parent)/*粘贴时,给已拷贝项分配内存空间,以及给对应信息赋值*/ { user=(Ffile*)malloc(sizeof(Ffile)); //parent对child的连接,以及brother之间的连接已经完成if(copyf->brother==NULL && copyf->child==NULL){ user->parent=parent; user->child=NULL; user->brother=NULL;} else{ if(copyf->brother!=NULL){ user->brother=fenpei(copyf->brother,user->brother,parent);//brother连接,兄弟节点有同一个父结点 user->brother->parent=user->parent;} else { user->brother=NULL;} if(copyf->child!=NULL){ //parent=p;user->child=fenpei(copyf->child,user->child,user); user->child->parent=user;//完成child对parent的连接 //child连接,自己孩子的父结点就是自己 } else { user->child=NULL; user->child->parent=user;} } //设置结点对应的信息 strcpy(user->name,copyf->name);user->open=copyf->open;user->type=copyf->type;if(user->type==2){ user->iffile.length=copyf->iffile.length; user->iffile.read=copyf->iffile.read; //user->iffile.type=copyf->iffile.type; user->iffile.write=copyf->iffile.write; strcpy(user->iffile.ch,copyf->iffile.ch);} return(user);} void prastefile(FFile user,FFile copyf)/*粘贴文件*/ //user是要粘贴的地方,copyf是要粘贴的内容,//有相同文件名的会判断会不会覆盖,或者是重命名 //在原树中进行新建操作 { int i,j;char ch[20];FFile p,user0,parent;parent=user;//记录父结点 user=user->child; p=user;//记录当前结点的前一个brother结点 strcpy(ch,“NULL”);if(copyf==NULL)//判断有没有拷贝文件 { printf(“错误:粘贴失败,还没有拷贝任何文件(夹)!n”); return;} //p=(Ffile*)malloc(sizeof(Ffile));//p->child=(Ffile*)malloc(sizeof(Ffile));//先给粘贴项分配内存空间 //p->child=fenpei(copyf,p->child,p); if(user==NULL)//当前位置没有任何文件结点 { } user=fenpei(copyf,user,parent);//是他自己要分配,不是孩子结点!!parent->child=user;user->brother=NULL;user->parent=parent;return;//该位置没有任何文件 for(j=1;;j++){ if(user->type==0)//开端的空结点,用新结点覆盖,即:当前位置没有文件结点 { user=user->parent; deletechildtree(p); user=fenpei(copyf,user->child,user);//返还增加的结点 user->brother=NULL; user->parent=parent; parent->child=user; } return;if(!strcmp(user->name,copyf->name)){ printf(“提示:该文件名已经存在!n”); printf(“请重命名文件:n”); printf(“输入新文件名:n”); scanf(“%s”,ch); } if(user->brother==NULL)//普通的退出条件 { break;} p=user;user=user->brother;} user->brother=fenpei(copyf,user->brother,user->parent);user->brother->parent=user->parent;//若要更名,粘贴分配完内存空间返回时再改变 if(strcmp(ch,“NULL”)) strcpy(user->brother->name,ch);printf(“粘贴成功。n”);} void showroute(FFile user)/*显示当前路径*/ { if(user->parent!=NULL){ showroute(user->parent);} printf(“%s/”,user->name);//路径中每个结点的输出项 } void change(FFile user){ char ch[20];int a,b; if(user->child==NULL) { } printf(“错误:属性修改失败,该目录下没有可修改的文件!n”);return;printf(“选择要进行属性修改的文件(夹)名:n”);scanf(“%s”,ch);user=user->child;for(a=1;;a++)//找出要拷贝文件的所在位置,用user替代 { if(!strcmp(user->name,ch)) break;if(user->brother==NULL){ printf(“错误:属性修改失败,当前位置没有该文件!n”); return;} user=user->brother;} if(user->type==1){ printf(“错误:文件夹不能进行属性修改!n”);return;} for(;;){ printf(“1.修改读权限;n”);printf(“2.修改写权限;n”);printf(“3.返回;n”);printf(“选择操作:n”);scanf(“%d”,&a);if(a==1){ printf(“0.禁止; 1.允许;n”);printf(“请选择:n”);scanf(“%d”,&b);user->iffile.read=b;printf(“修改成功!n”);} else if(a==2){ printf(“0.禁止; 1.允许;n”);printf(“请选择:n”);scanf(“%d”,&b);user->iffile.write=b; } } printf(“修改成功!n”);} else if(a==3){ return;} else { } printf(“错误:没有该操作!n”);void main()/*主函数*/ { FFile d,e,f;//f记录当前显示界面父结点位置 int a,b,c;char ch[20];a=0;printf(“******************************目录******************************n”);printf(“ 1.选择用户n”);printf(“ 2.退出n”); printf(“****************************************************************n”);for(;;){ printf(“选择操作:n”);scanf(“%d”,&a);if(a==1){ printf(“选择用户:n”);printf(“1.user1;n2.user2;n”);scanf(“%d”,&b);break;} else if(a==2){ printf(“欢迎使用。n”);exit(0);//系统退出的操作码 } else { printf(“错误:没有该操作!n”); } } //初始化打开列表 //initopen();//初始化各个用户的信息 //copyf=(Ffile*)malloc(sizeof(Ffile));//copyf=NULL;copyf=NULL;user1=init();strcpy(user1->name,“user1”);user2=init();strcpy(user2->name,“user2”);d=init();e=init();user1->child=d;user2->child=e;d->parent=user1;e->parent=user2;printf(“%d”,user1->child->type);if(b==1){ printf(“已经进入user1系统n”);f=user1;show(user1);}else{ } printf(“已经进入user2系统n”);f=user2;show(user2); for(;;){ printf(“****************************************************************n”);printf(“1.创建文件(夹) 5.读文件 9.显示当前路径 n”);printf(“2.删除文件(夹) 6.写文件 10.返回上一层目录 n”);printf(“3.打开文件(夹) 7.拷贝文件 11.改变普通文件属性n”);printf(“4.关闭普通文件 8.粘贴文件 12.退出n”);printf(“****************************************************************n”);printf(“选择操作:n”);scanf(“%d”,&c);if(c==12){ break;}else if(c==1){ creatf(f);} else if(c==2){ printf(“选择要删除的文件(夹)的名字:n”);scanf(“%s”,ch);deletefile(f,ch);} else if(c==3){ f=openff(f);} else if(c==4){ closefile(f);} else if(c==5){ readfile(f);} else if(c==6){ writefile(f);} else if(c==7){ copyf=copyfile(f,copyf);} else if(c==8){ prastefile(f,copyf);copyf=NULL;} else if(c==9){ printf(“路径为:n”);showroute(f);printf(“n”);} else if(c==10){ } f=backf(f); 课程类型:专业必修课 学 分:0.5 计划周数:1周 预修课程:高级语言程序设计、微机原理、数据结构 开设学期:第四学期 适用专业:计算机科学与技术本科、网络工程本科、软件工程本科 一、课程设计目的与任务 《操作系统》是一门重要的专业基础课,是涉及较多硬件知识的计算机系统软件课程。在计算机软硬件课程的设置上,它起着承上启下的作用。操作系统对计算机系统资源实施管理,是所有其他软件与计算机硬件的唯一接口,用户在使用计算机时都要得到操作系统提供的服务。操作系统课程设计的主要任务是研究计算机操作系统的基本原理和算法,掌握操作系统的进程管理、存储管理、文件管理和设备管理的基本原理与主要算法。目的是使学生掌握常用操作系统(如DOS、Windows或Linux)的一般管理方法,了解它是如何组织和运作的,对操作系统的核心概念和算法有一个透彻的理解,并对系统运行的机制有一个全面的掌握,从而充分理解系统调用与程序设计之间的关系。 二、课程设计选题 设计项目一:动态资源分配算法演示程序(银行家算法) 内容: 主要用于解决多种资源被多个独立执行的进程共享的安全算法。采用矩阵存储资源的数据,通过对系统资源预分配后检查系统状态,以避免死锁的产生。要求: 1.资源种类与数目可在界面进行设置,在资源分配过程中可以随时增加进程及其对资源的需求。 2.可读取样例数据(要求存放在外部文件中)进行资源种类、数目与进程数的初始化。3.在资源分配过程中可以随时进行系统安全状态检测。 4.如果能够通过系统安全状态检测,则系统对该进程进行资源分配;当进程满足所有资源分配后能够自行释放所有资源,退出资源竞争。 5.要求进行安全性检查时按指定策略顺序进行,即按每个进程当前Need数由小至大进行排序,如果Need数相同,则按序号由小至大进行排序; 6.具有一定的数据容错性。 设计项目二:通用处理机调度演示程序 内容: 设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念。要求: 1.进程调度算法包括:时间片轮转算法、先来先服务算法、短作业优先算法、静态优先权优先调度算法、高响应比调度算法。 2.每一个进程有一个PCB,其内容可以根据具体情况设定。 3.进程数、进入内存时间、要求服务时间、作业大小、优先级等均可以在界面上设定。4.可读取样例数据(要求存放在外部文件中)进行进程数、进入内存时间、时间片长度、作业大小、进程优先级的初始化 5.可以在运行中显示各进程的状态:就绪、执行(由于不要求设置互斥资源与进程间的同步关系,故只有两种状态) 6.采用可视化界面,可在进程调度过程中随时暂停调度,查看当前进程的状态及相应的阻塞队列。 7.有性能比较功能,可比较同一组数据在不同调度算法下的平均周转时间。 设计项目三:用多进程同步方法演示“桔子苹果”问题 内容: 有两类生产者,一类负责生产桔子,一类负责生产苹果;有两类消费者,一类负责消费桔子,一类负责消费苹果;他们共享一个有20个存储单元的有界缓冲区,每个存储单元只能放入一种产品(桔子/苹果)。要求: 1.二类生产者与二类消费者数目均为20,即20个生产者负责生产桔子,20个生产者负责生产苹果;20个消费者负责消费桔子,20个消费者负责消费苹果。2.二类生产者的生产速度与二类消费者的消费速度均可独立在程序界面调节,在运行中,该值调整后立即生效。 3.多个生产者或多个消费者之间必须有共享对缓冲区进行操作的函数代码,同时需要考虑算法的效率性。 4.每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容、当前生产者与消费者的指针位置,以及生产者和消费者线程标识符。 5.采用可视化界面,可在运行过程中随时暂停,查看当前生产者、消费者以及有界缓冲区的状态。 设计项目四:存储管理动态分配算法的模拟 内容:设计主界面以灵活选择某算法,且以下算法都要实现:首次适应算法、循环首次适应算法、最佳适应算法; 要求:用一种结构化高级语言构造分区描述器,编制动态分区分配算法和回收算法模拟程序,并掌握分配算法的特点,提高编程技巧和对算法的理解和掌握。 设计项目五:存储管理之虚拟存储器实现(页面置换算法) 内容:编程序实现先进先出算法(FIFO)、最近最久未使用算法(LRU)算法、最佳置换算法(OPT)的具体实现过程,并计算访问命中率。 要求: 1.设计主界面以灵活选择某算法,且以上算法都要实现。2.用随机数方法产生页面走向。3.假定初始时页面都不在内存。 设计项目六:文件系统设计 内容:以内存作为存储区,模拟UNIX的文件系统结构,设计一个简单的文件系统,并提供以下的文件和目录操作接口:创建文件、删除文件、打开文件、关闭文件、读文件、写文件。 要求:设计文件系统的数据结构和数据结构间的关系,设计文件的基本操作算法,完成系统的总控模块编程和各个操作模块编程。上机测试各个模块,没执行一个操作,打印有关数据结构的内容,判断操作的正确性。 设计项目七:编程序实现下述磁盘调度算法,并求出每种算法的平均寻道长度。 内容:设计一个磁盘调度系统,针对磁盘访问序列,可以选择先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)、循环扫描算法(CSCAN)来实现。 要求: 1.系统主界面可以灵活选择某种算法。 2.每种调度算法实现之后,要计算出每种算法的平均寻道长度,并比较结果。 3.采用改进算法之后是否会使性能提高? 设计项目八: 内容:在Windows环境下,编程实现基于共享内存的多个进程间通信。要求:(1)当两个进程通信时需满足进程同步机制。(2)当多个进程(大于2)通信时需使用信号量机制实现互斥操作。 1.1 单片机概述 单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。 单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit),常用英文字母的缩写MCU表示单片机,它最早是被用在工业控制领域。单片机由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。 单片机比专用处理器更适合应用于嵌入式系统,因此它得到了最多的应用。它又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。1.2 温度采集设计背景 随着科技的不断发展,现代社会对各种信息参数的准确度和精确度的要求都有了几何级的增长,而如何准确而又迅速的获得这些参数就需要受制于现代信息基础的发展水平。在三大信息信息采集(即传感器技术)、信息传输(通信技术)和信息处理(计算机技构中,传感器属于信息技术的前沿尖端产品,尤其是温度传感器技术,在我国各领域己经引用的非常广泛,可以说是渗透到社会的每一个领域,人民的生活与环境的温度息息相关,在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和装置具有重要的意义。 测量温度的关键是温度传感器,温度传感器的发展经历了三个发展阶段: ①传统的分立式温度传感器 ②模拟集成温度传感器 中北大学计算机控制课程设计说明书 图(9)系统流程图 软件程序设计 PORTA EQU 020H ;定义端口地址 PORTB EQU 021H PORTC EQU 022H 中北大学计算机控制课程设计说明书 PORTD EQU 023H DATA SEGMENT TABLE DB 40H DB 4FH DB 24H DB 30H DB 19H DB 12H DB 02H DB 78H DB 00H DB 10H BUFDA1 DB ? BUFDA2 DB ? BUFDA3 DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,98H OUT PORTD,AL ;8255的初始化 ;***************************** MOV AL,01 OUT PORTC,AL MOV AL,00 OUT PORTC,AL ;PC0 为0,启动A/D转换 FIND: IN AL,PORTC TEST AL,010H 中北大学计算机控制课程设计说明书 JNZ FIND ;读PC4的值,如为1则继续查询 MOV AL,01 OUT PORTC,AL ;使PC0为1,撤消启动信号 IN AL,PORTA ;读取转换数据 ;****************************** MOV CL,100 ;计算百位,十位,个位 DIV CL MOV BUFDA1,AL XOR AL,AL MOV CL,10 MOV BL,AH MOV AL,BL MOV AH,0 DIV CL MOV BUFDA2,AL MOV BUFDA3,AH ;****************************** DISPLAY:MOV BX,OFFSET TABLE MOV AL,[DI+0] XLAT ;换码 MOV DX,PORTB OUT DX,AL MOV CX,30H ;延迟程序 DELAY: LOOP DELAY RET ;********************************** MOV CX,30H DISPLAY1:MOV AL,06H OUT PORTD,AL 中北大学计算机控制课程设计说明书 MOV AL,05H OUT PORTD,AL MOV AL,03H OUT PORTD,AL MOV DI,OFFSET BUFDA1 CALL DISPLAY ;使LED0工作 MOV AL,07H OUT PORTD,AL MOV AL,04H OUT PORTD,AL MOV AL,03H OUT PORTD,AL MOV DI,OFFSET BUFDA2 CALL DISPLAY ;使LED1工作 MOV AL,07H OUT PORTD,AL MOV AL,05H OUT PORTD,AL MOV AL,02H OUT PORTD,AL MOV DI,OFFSET BUFDA3 CALL DISPLAY ;使LED2工作 LOOP DISPLAY1;延迟 ;*********************************** MOV AH,4CH INT 21H CODE ENDS END START 中北大学计算机控制课程设计说明书 总结心得 本课程设计是基于AT89C51单片机的温室检测系统。该课程是以单片机8051为核心,以热敏电阻为测温元件对温度进行有效的测量,通过ADC0809芯片将电压信号转化为数字信号,经过单片机处理后通过8255芯片扩展的I/O以动态方式显示,再加上相应的时钟电路、复位电路、分频电路,最后编写程序,温度采集系统的设计就完成了。 在做课程设计的过程中,除了了解相关设计的硬件原理电路图外,还要了解具体的型号,熟悉相关软件的使用,如AutoCAD、Protel、Word等,虽然在实际操作过程中遇到了很多困难,但经过不懈努力还是完成了本课程的设计。 在这一周的设计中,不仅使我增长了很多课堂上所学不到的知识,而且还让我对A/D转换和扩展I/O有了更深入的了解。对一些单片机原理及应用有了更加深刻的认识。 第 13 页 共 15 页 中北大学计算机控制课程设计说明书 附图 电路接线仿真图 256912151619Q0Q1Q2Q3Q4Q5Q6Q7U374LS373OELE3478***C11nFD0D1D2D3D4D5D6D7U2VREF(-)VREF(+)***21282726U1X1CRYSTAL19XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD*********617C21nF18XTAL2RST1nF293031PSENALEEA22232425ALEADD CADD BADD AADC0809R1100k12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51U5NORU4NOR第 14 页 共 15 页 27.0C39***192021GND2-8LSB2-72-62-52-42-32-22-1MSBVCCCLOCKOUTPUT ENABLEEOCSTARTIN7IN6IN5IN4IN3IN2IN1IN03U6VOUTLM351中北大学计算机控制课程设计说明书 参考文献 [1] 李朝青.单片机原理及接口技术〔简明修订版).杭州:北京航空航天大学出版社,1998年 [2] 李广弟.单片机*MB rmi.北京:北京航空航天大学出版社,1994年 [3] 孙育才.单片机微型计算机及其应用.南京:东南大学出版社,2004年 [4] 沈德金,陈粤初.单片机接口电路与应用称序实例.北京:北京航天航空大学出版社,1990年 [5] 李广弟.单片机基础[M].北京:北京航空航天大学出版杜,1994年 [6] 陈汝全.电子技术常用器件应用手册,第二版.北京:机械工业出版社,2001年7月 [7] 戴梅萼,史嘉权.微型计算机技术及应用,第三版.北京:清华大学出版社,2003年11月 [8] 沈美明,温冬婵.IBM-PC汇编语言程序设计.北京:清华大学出版社,1998年8月 [9] 顾德英.计算机控制技术,第二版.北京:北京邮电大学出版社,2005年 [10] 李顺增,吴国东,赵河明,乔志伟.微机原理及接口技术.北京:机械工业出版社,2004年 第 15 页 信息化教学,是以现代教学理念为指导,以信息技术为支持,应用现代教学方法的教学。本课题完成的研究目标是建设一个可以把与课程相关的文本、图像、多媒体文件等内容通过超文本的形式结合起来,利用网络环境进行教学资源信息化发布的教学平台。通过本课题研究,可以使计算机网络课程教学质量得到提高,人才培养模式改革取得突破,教学环节和人才培养的结合更加紧密[1]。同时也满足国家提出的“科教兴国和人才强国”高等教育要求。目前各高校都以课程信息化建设作为课程教学改革的主要手段。 本系统决定采用PHP作为系统的编程语言,使用基于Thinkphp开源框架的One Think内容管理框架进行开发。Think PHP是一个快速、简单的基于MVC和面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,从诞生以来一直秉承简洁实用的设计原则。在保持出色的性能和至简的代码的同时,尤其注重开发体验和易用性,并且拥有众多的原创功能和特性,为WEB应用开发提供了强有力的支持[2]。One Think则提供了用户Passport系统、配置管理系统、权限控制系统、后台建模系统、多级分类系统、用户行为系统、钩子和插件系统、系统日志系统、数据备份和还原等基础功能,能够大大的统一所开发系统的各部分结构,减少基础功能的开发时间,是编码重心转移到项目所关注的业务层。对于大型Web系统而言,可大大提升代码开发和管理的能力,并提高开发效率[3]。 对于一个复杂系统,数据库相关操作至关重要,也是复杂的,Thinkphp提供了对于数据库的高度封装,使得数据库操作更加方便快捷,Thinkphp还对数据库相关操作提供诸如缓存,延时执行等功能,从而可以使开发的重点在业务逻辑的编写而不再需要考虑和编写复杂的SQL语句。 2 前台设计 计算机网络课程的前台主要包括课堂教学、作业安排、知识答疑、习题练习等几个部分。因此,计算机网络课程信息化平台将重点实现以下功能,如图1所示。 2.1 在线课堂 “在线课堂”模块实现在线听课的功能。学生不仅可以观看教学视频,而且在听课的过程中,系统会在某个时间点上进行所看教学视频相关内容的提问。若回答失败,则无法继续观看教学视频,需重新开始寻找正确答案。 如果教师在课程中设置有时间点,那么当学生在播放视频课程并达到时间点是,就会暂停播放,并弹出提示要求回答问题,如果问题回答正确,那么可以继续播放该视频,如果回答的答案是错误的,那么系统会将用户播放器退回上个时间点或者视频头部。视频播放器的进度条是不可以拖动的,所以学生无法改变播放进度或跳过时间点。 在教师添加课程时间点时,教师所填写的时间点格式为xsxm,如图2 所示。而播放器的时间以秒为单位,所以这就涉及了转换的问题。在学生前台模块的课程控制器(Course Cortroller)中,使用time Convert()方法对时间点的时间做出转换,然后才发送给播放器。 在播放界面,系统通过Ajax方式获取时间点和时间点问题的内容,通过firebug可以看到,在播放界面请求了Home/Course/getpoints地址,获取了json数据格式的时间点信息。 代码如下: 在播放界面,系统通过Ajax方式获取时间点和时间点问题的内容,通过firebug可以看到,在播放界面请求了Home/Course/getpoints地址,获取了json数据格式的时间点信息。 代码如下: 2.2 在线练习 “在线练习”模块提供课程题目的练习功能。提交答卷后可即时改卷并打分,填空部分可以使用相似度的技术进行打分。 2.3 作业管理 “作业管理”模块实现学生的作业提交和教师的作业批改功能。另外,由于计算机网络作业题目中有拓扑图的相关内容,本系统将提供画板,完成拓扑图的绘制。 2.4 在线答疑 “在线答疑”模块为用户提供了学生与老师交流的平台。学生可以选择老师将自己的疑问提出,教师定期地进行问题的解答。 2.5 电子课件 “电子课件”模块可以将计算机网络课程中相关的原理内容通过动画的形式进行演示,使学生加深对知识的理解。 2.6 教学资料浏览 将与计算机网络课程的教学文件和相关的专业文章通过系统进行发布,使学生能够了解计算机网络课程中的教学内容、教学重点、教学难点。 2.7 交流中心 通过聊天室或论坛的形式为学生和老师提供交流的平台。 2.8 平台工具 1)日程管理:日程表记录和提醒用户每天的安排; 2)站内e-mail:接受管理员或者其他用户的信件; 3)收藏夹:收藏用户感兴趣的课程视频。 3 后台设计 后台部分分为管理员后台和教师后台,后台部分登陆是同权限控制机制,在登录时判定用户权限,使得用户能够登陆不同的后台。 教师后台功能模块提供对学生提交的Ticket的处理功能,以及对学生学习状态显示。最后,教师后台可以使得教室能够在自己所管辖的班级或者栏目中发布自己的课程,如图3 所示。 管理员后台部分主要分为四个主要模块:课程管理、文章管理、会员管理、会员管理以及系统管理。课程管理能够让管理员管理全站课程。文章管理是对整站文章进行方便的管理。会员管理可对用户进行查阅,更改,删除和权限变更等操作。最后系统管理提供了一些系统常见杂项的管理,如图4所示。 4 结论 关键词: 慕课 课程设计 教学改革 引言 随着现代信息技术的迅猛发展,互联网已经成为功能应用和社会服务的重要平台。“慕课”正是在这一背景下出现的一种新的课程教学模式,这种教育模式不同于传统的课堂授课方式,它能较好地提高学习效率和自由度。作为理论与实践结合非常紧密的一门计算机专业课程,《操作系统》是高等院校相关专业的必修课程。为进一步提高教学质量,如何利用“慕课”进行课程教学改革正是我们关注的首要问题。 1.操作系统课程设计的现状 1.1教学现状 通过收集资料和实地访谈发现目前操作系统课程的教学存在一些问题:首先与国际相比,国内采用的一些教材内容较为陈旧,只能反映经典内容,应用实例多以类Unix为主,与主流市场应用存在距离,无法体现当代操作系统的发展状况和态势,不能满足社会发展对人才的培养需求;其次,操作系统具有理论性强、内容涉及面广、概念较为抽象和需要多门前导专业基础课程支撑等特点,对教师而言,授课难度较大,而对学生来说,则难以掌握课程要领,甚至部分学生在学完之后感到收效甚微;再次,理论较多,动手实践课程较少,学生对该课程的学习不感兴趣。 1.2“慕课”的优越性和必要性 “慕课”(M0OCs)是大规模开放在线课程的英文缩写。其优越性主要有:(1)免费共享优质教学资源,不仅开放教师授课视频,还为学生提供包括学习阅读资料和学习辅导等在内的一整套优质教育资源;(2)“慕课”借助现代信息技术和互联网这个平台试图将传统高等学校的课堂教学活动转移到互联网平台,让更多的学习者在这个虚拟的教室里自由学习;(3)学习活动并不局限于传统的课堂,可以使用互联网在任何地点、任何时间,借助任何通讯手段都可以参加到这个虚拟课堂教学活动中来。简单地说“慕课”就是借用现代科技实施教学的一种手段。其核心的教学思想仍然是借助技术手段帮助学生掌握知识、方法;培养学生的创新能力和探索新知识的能力,借助信息技术、扩大受众面。 综上所述,利用“慕课”平台进行操作系统课程设计的教学改革对强化学习效果、提高教学质量有着重要意义。 2.“慕课”平台上的操作系统课程设计的改革 “慕课”帮助学生理解和掌握课程内容的关键知识点,同时让学生有机会亲自动手实践其关键算法和应用功能:进程调度、进程同步、内存管理、文件系统设计和驱动程序设计等。在操作系统教学过程中,笔者尝试借助“慕课”平台实现对操作系统的课程内容、教学模式和课程评价机制等课程设计的改革如下: 2.1操作系统教学内容的改革 传统的课程教学主要以教师讲授,学生听和记笔记的方式完成该课程的学习。缺点:60%的学生认为该课程枯燥无趣味,上课不积极,作业不按时完成;部分学生认为该课程太难、听不懂、学不会,产生放弃的念头;部分学生愿意学,缺乏预习和复习的资料。教师针对学生的上课现状和存在的问题结合“慕课”的特点,对课程内容进行分类、简化和加工处理,把理论性较强、概念较为抽象的课程内容设计成一些视频片段,借助多媒体软件上传到“慕课”平台供学生下载和反复收看;设计一些有趣课件PPT、课后小测验、进程调度小程序帮助学生练习和总结。 2.2操作系统教学模式的改革 变传统讲授模式为诱导教学模式、开放教学模式和技能教学模式,把讲堂变成以学生讨论和成果展示为主的课堂。主要模式:预习,学生注册“慕课”网上平台,登录教师制定操作系统课程的视频进行学习,掌握关键点知识并完成教师布置任务;上课讨论,在指定的教室,学生自己分成小组展示学习成果和学习过程中遇到的问题,教师引导学生讨论并帮助其解决问题;课后,教师布置任务,督促学生动手实践联系,如设计小程序解决实际问题等。 2.3操作系统评价模式的改革 传统课堂教学,教师对学生的形成性评价主要依赖于课堂观察、考试或者辅助调查问卷等手段。通过“慕课”平台可以实现多元性的形成性评估,如教师可以随时监控学生的学习过程,还可以如通过查看同伴评语、过关问题、小实验测试、在线测试等多元手段及时发现学生在学习中的问题,从而创造条件帮助或引导学生解决问题,进而提高学习效率。 3.课程设计任务的实施 借鉴“慕课”模式,笔者做了一个为期4个月的操作系统课程设计的教学改革实验,分为实验班A和对比班B,每班60人。关于实验班,首先,教师给学生介绍“慕课”上课模式,并强调需提前了解课程表、章节内容和学习期限;其次,教师按照“慕课”的模式设计操作系统的课程内容,按照章节的先后顺序制作10~20分钟左右的视频突出各章、节的重点、难点、疑点,之后用PPT呈现各章节的练习题和动手实践任务;再次,教师并未放手让学生自由学习,而是把每周二上课时间变成小组讨论和成果展示时间。对比班B仍然按照传统的教学方式进行上课。 4.教学效果的验证 尽管在实施过程中面临诸多困难,但是绝大多数学生都能积极配合教师,在慕课平台上学习该学期的操作系统课程,并取得一定的课程改革成效。经过4个月的努力,笔者设计了操作系统课程设计、考试结果统计表和程序结果统计表等三种问卷进行调查验证,以了解学生在这种新模式下学习的效果。 由表1可以看出大部分学生喜欢并且能够接受在线课程,而仅有6%的学生不喜欢也不接受“慕课”在线课程,还有10%的学生保持中立,不了解“慕课”也不积极了解和使用“慕课”在线课程模式进行学习。 经过一个学期的学习,笔者对两个班的学生进行笔试测验,进一步验证“慕课”对学生学习的影响。从上表统计的结果可以看出,实验班A借助“慕课”平台学习操作系统课程,考试及格率为97%,对比班B仍按照传统的授课模式学习,考试的及格率仅为75%。两个班的及格率差距充分说明“慕课”平台比传统的教学模式优越,有助于学生掌握抽象概念和系统原理,有助于提高学生学习的兴趣和效率。 表3主要验证学生的动手实践能力,要求学生独立设计一个小程序,完成程序设计者加20分。从统计结果可以看出实验班大部分的学生都能够独立完成任务,对比班仅有33%的学生能够完成任务,这充分说明借助“慕课”平台学习更能增强学生的实践动手能力。 综上所述,“慕课”为操作系统课程教学改革提供了高效的平台和课程模式。笔者在后续工作中将更充分利用这一平台,进一步优化操作系统课程的教学过程,持续加强操作系统课程教学的改革与创新。 参考文献: [1]王亮.浅谈慕课背景下计算机网页设计课程的教学改革.科教,2015(7). [2]刘海舟.李涛安.基于慕课的大学英语翻转课堂教学模式研究[J].考试周刊,2014(69):93-94. [3]张玉宏,李歆,马宏琳.Android平台下操作系统课程设计的教学改[J].计算机教育,2014. [4]姚红岩,谭丹丹.面向卓越软件工程师培养的操作系统教学策略[J].计算机教育,2013(15). 【操作系统课程论文设计】推荐阅读: 《Linux 操作系统》课程教学心得10-08 物流系统规划课程设计10-28 图书馆系统课程设计06-05 公路工程系统设计的论文06-06 电力系统综合设计课程教学措施论文09-06 数据结构课程设计-_平衡二叉树操作09-29 ODS质量设计管理系统的设计论文06-19 信息系统分析与设计课程设计教学大纲06-26 嵌入式系统设计课程设计大纲(给学生)10-22 04-操作系统05-25操作系统课程论文设计 篇2
操作系统课程论文设计 篇3
操作系统课程设计文件管理 篇4
操作系统课程论文设计 篇5
温度采集系统课程设计 篇6
课程信息化平台系统设计 篇7
操作系统课程论文设计 篇8