操作系统课程简介

2024-04-18

操作系统课程简介(共6篇)

篇1:操作系统课程简介

JZ女士速成裁剪系统课程系统简介

JZ速成剪发系统是可以让我们更清晰的了解明白到设计发型的由来,如何更透彻的了解剪发技巧。如包含剪发基本的“方”“圆”“三角”的基础元素。“点”“线”“面”的设计理念,如何将一款发型剖析化分解发型的组合的创造元素,更好的训练个人的剪发功底和开创裁剪的构思,开发设计师对发型创造的灵感。我们是用简单而基本的手法与快速掌握容易理解为目的,将剪发更精细透彻细致的方式将剪发元素呈现于眼前把最基本的东西重复做,把麻烦的东西简单呈现,做到基本功训练发型创作理念于一体更有效提升技术技能的多元化。

课程内容:

NO1.ONE LING

NO2.光环

NO3.均等层次

NO4.层次

NO5.高层次加高层次

NO6.BOB

NO7.低层次加高层次

NO8.高渐层次

概念:

发型的由来也就是“方”“圆”“三角”(点,线,面)为设计方向而演变的,由每个区与区之间的精细紧密连接而产生的,发型的多方面由来都是每一项小小的精细技术组合而成,而jz速成剪发系统就包含着这些每一小项的技术,经不断重复训练得到扎实的功底然而带来无限的创作灵感。

篇2:操作系统课程简介

(操作系统课程设计)

连续动态分区内存

管理模拟实现

学生姓名: 韩 慧 学生学号: 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->fromfrom)

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->fromfrom)

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->fromfrom)

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->fromfrom)

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->fromfrom)

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级计算机专业操作系统课程设计

篇3:Linux操作系统简介

一、Linux的主要特点

作为一个操作系统, Linux几乎满足当今Unix操作系统的所有要求, 因此, 它具有Unix操作系统的基本特征。

1符合POSIX 1003.1标准

POSIX 1003.1标准定义了一个最小的Unix操作系统接口, 任何操作系统只有符合这一标准, 才有可能运行Unix程序。考虑到Unix具有丰富的应用程序, 当今绝大多数操作系统都把满足POSIX 1003.1标准作为实现目标, Linux也不例外, 它完全支持POSIX 1003.1标准。另外, 为了使Unix System V和BSD上的程序能直接在Linux上运行, Linux还增加了部分System V和BSD的系统接口, 使Linux成为一个完善的Unix程序开发系统。

2支持多用户访问和多任务编程

Linux是一个多用户操作系统, 它允许多个用户同时访问系统而不会造成用户之间的相互干扰。另外, Linux还支持真正的多用户编程, 一个用户可以创建多个进程, 并使各个进程协同工作来完成用户的需求。

3采用页式存储管理

页式存储管理使Linux能更有效地利用物理存储空间, 页面的换入换出为用户提供了更大的存储空间。

4支持动态链接

用户程序的执行往往离不开标准库的支持, 一般的系统往往采用静态链接方式, 即在装配阶段就已将用户程序和标准库链接好, 这样, 当多个进程运行时, 可能会出现库代码在内存中有多个副本而浪费存储空间的情况。Linux支持动态链接方式, 当运行时才进行库链接, 如果所需要的库已被其它进程装入内存, 则不必再装入, 否则才从硬盘中将库调入。这样能保证内存中的库程序代码是唯一的。

5支持多种文件系统

Linux能支持多种文件系统。目前支持的文件系统有:EXT2、EXT、XIAFS、ISOFS、HPFS、M SDOS、UM SDOS、PROC、NFS、SYSV、M INIX、SM B、UFS、NCP、VFAT、AFFS。Linux最常用的文件系统是EXT2, 它的文件名长度可达255字符, 并且还有许多特有的功能, 使它比常规的Unix文件系统更加安全。

6网络功能强

网络功能是Linux系统的一又一重要特色, 作为Internet网技术和异种机连接重要手段的TCP/IP协议就是在Linux上开发和发展起来的。TCP/IP是所有Linux系统不可分割的组成部分。因此, UNIX服务器在Internet服务器中占80%以上, 占绝对优势。此外, UNIX还支持所有常用的网络通信协议, 包括NFS、DCE、IPX/SPX、SLIP、PPP等, 使得Linux系统能方便地与已有的主机系统, 以及各种广域网和局域网相连接, 这也是Linux具有出色的互操作性 (Interoperability) 的根本原因。

7开放性好

开放性是Linux最重要的本质特性。开放系统概念的形成与Linux是密不可分的。Linux是开放系统的先驱和代表。由于开放系统深入人心, 几乎所厂商都宣称自己的产品是开放系统, 确实每一种系统都能满足某种开放的特性, 如可移植性、可兼容性、可伸缩性、互操作性等。但所有这些系统与开放系统的本质特征—不受某些厂商的垄断和控制相去甚远, 只有Linux完全符合这一条件。

8可靠的系统安全

Linux采取了许多安全技术措施, 包括对读、写进行权限控制、带保护的子系统、审计跟踪、核心授权等, 这为网络多用户环境中的用户提供了必要的安全保障。

9良好的可移植性

可移植性是指将操作系统从一个平台转移到另一个平台使它仍然能按其自身的方式运行的能力。Linux是一种可移植的操作系统, 能够在从微型计算机到大型计算机的任何环境中和任何平台上运行。可移植性为运行Linux的不同计算机平台与其他任何机器进行准确而有效的通信提供了手段, 不需要另外增加特殊的和昂贵的通信接口。

二、Linux发行的各种版本

Linux的发行版本可以大体分为两类, 一类是商业公司维护的发行版本, 一类是社区组织维护的发行版本。这些发行版中较知名的有:Slack W are、Red Hat、Debain、M andrake、Su SE、Xlinux、Turbo Linux、Blue Point、Red Flag、Xterm等。

三、Linux与其他操作系统的区别

Linux可以与M S-DOS、W indows等操作系统共存于同一台机器上。它们均为操作系统, 具有一些共性, 但是相互之间各有特色, 有所区别。

首先看一下Linux与M S-DOS之间的区别。在同一系统上运行Linux和M S-DOS已很普遍, 就发挥处理器功能来说, M S-DOS没有完全实现x86处理器的功能, 而Linux完全在处理器保护模式下运行, 并且开发了处理器的所有特性。Linux可以直接访问计算机内的所有可用内存, 提供完整的Unix接口。而M S-DOS只支持部分Unix的接口。

就操作系统的功能而言, M S-DOS是单任务的操作系统, 一旦用户运行了一个M S-DOS的应用程序, 它就独占了系统的资源, 用户不可能再同时运行其他应用程序。而Linux是多任务的操作系统, 用户可以同时运行多个应用程序。

再看一下LINUX与W INDOW S的区别。两者都是多任务的操作系统, 都支持同样的用户接口、网络和安全性。但是, W INDOW S是专用系统, 由开发的公司控制接口和设计, 并建立了严格的标准, 而且购买的价格高。而LINUX是自由软件, 其开发采用开放和协作的模式, 因而有利于充分程序人员的集体智慧, 大量减少不必要的重复劳动, 并使得自由软件的弱点能及时发现和得到克服, 具有强大的生命力。它是目前唯一可以与M ICROSOFT W INDOW S抗衡的操作系统;盖茨也承认LINUX是微软的竞争对手。

Linux与M S-DOS、W indows等操作系统还有一个重要的区别, 那就是在价格上Linux是免费的软件。显然, 在这一点上LINUX要占优势。

四、结束语

综上所述, Linux作为一种开放的、不断革新和发展的操作系统, 具有极强的生命力。特别是它因Internet而生, Internet的爆炸性发展和以网络为中心的计算模式 (如电子商务被迅速接受和普及) , 为Linux提供了更巨大的机会;再加上其价格上的优势。可以相信Linux未来将会有很大的发展空间。

参考文献

[1]张献忠:《操作系统学习辅导》, 清华大学出版社, 出版日期:2004-11-1[1]张献忠:《操作系统学习辅导》, 清华大学出版社, 出版日期:2004-11-1

[2]GB17859-1999, 《计算机信息系统安全保护等级划分准则》[S].[2]GB17859-1999, 《计算机信息系统安全保护等级划分准则》[S].

[3]季庆光, 唐柳英:《结构化保护级》安全操作系统安全策略模型[R].北京:中科院信息安全技术工程研究中心, 中软网络技术股份有限公司, 2002.[3]季庆光, 唐柳英:《结构化保护级》安全操作系统安全策略模型[R].北京:中科院信息安全技术工程研究中心, 中软网络技术股份有限公司, 2002.

篇4:“操作系统”课程的教学方法改革

【关键词】操作系统 教学方法 改革

【中图分类号】G64 【文献标识码】A 【文章编号】2095-3089(2013)01-0046-01

一、引言

《操作系统》课程是计算机学科的重要专业基础课程,同时也是计算机学科国家统一研究生入学考试中指定的专业考试科目之一。该课程介绍操作系统的基本原理和实现技术,是理解计算机系统工作、用户与计算机系统交互和设计开发应用系统等基本知识结构的重要途径;通过本课程的学习,使学生掌握操作系统的基本概念、工作原理和实现方法;掌握操作系统各个部分之间的有机联系,从而了解操作系统在整个计算机系统中的地位和作用,提高对计算机专业知识理解的系统性和完整性,并为分析或设计操作系统和其它应用软件打下理论基础。该门课程的学习对于计算机专业的学生及相关技术人员十分重要。

二、操作系统课程的教学现状

《操作系统》课程的内容庞杂、理论性强、概念抽象,原理枯燥难懂,加之教学方法不够灵活,形成一种“灌输式”或“填鸭式”的教学方法,使学生对本课程的学习缺乏兴趣,很容易使学生陷入疲于记忆的状态。良好的教学模式对于增强学生对于操作系统原理的深入掌握具有十分重要的意义。如何提高学生学习的主动性,拓展学生对抽象知识的深层次思考,使枯燥的操作系统原理变得生动有趣,已经成为操作系统教学要解决的重要问题。

三、操作系统课程教学方法改革

为了改善教学效果,本人通过课下调查并结合课上的教学感受,分析并总结了本学院学生学习操作系统课程时存在的困难,提出并实践了以下教学方法,并取得了一定的成效。

1.首先,建立操作系统各部分的有机联系,提高操作系统的“整体性”。

在操作系统教学中,尽管在开始就介绍了操作系统是管理计算机硬、软件资源的最基本的系统软件,并强调操作系统的整体性,但在其后进行处理机管理、存储器管理、设备管理、文件管理和用户接口等内容分章节的教学中,学生仍容易得到零散的知识。基于此,在各章的教学中,始终以“程序的执行过程”为主线实施整体知识的贯穿,并采用“任务驱动教学法”对“程序的执行过程”这一主线的每一细节或步骤进行深入讲解。例如,通过操作系统提供的用户接口,用户输入程序,并以文件的形式存储在磁盘中。而在运行过程中,不仅需要CPU的控制,还需将程序调入到内存,并可能需要从键盘(输入设备)接收数据并由显示器(输出设备)显示数据等,从而将各章节内容有机联系起来,以强调操作系统的“整体性”。

2.应用类比教学法,建立“操作系统与生活”之间的联系,深入浅出,并增强操作系统课程的“亲和力”。

例如,食谱可以比作程序,而按照食谱的步骤制作美味佳肴的过程可以比作进程,从而突出程序的静态以及进程的动态之间的区别;将商场试衣间(假设在某一时刻只允许一位顾客使用)比作临界资源,而顾客进入试衣间试穿衣服的前提要求试衣间的门锁是开着的状态,进入试衣间后随手将门关锁以防止其他顾客进入,离开试衣间时再次将门锁打开以允许其他顾客进入,以此例来加深学生对临界资源访问方法的掌握。针对操作系统中很多较抽象的知识点,可以结合生活中的实例,用浅显的语言表述高深、抽象的理论知识,使学生能够容易地接受并掌握知识的重点和难点,获得规律性认识,从而增强操作系统课程的“亲和力”。

3.采用“提问-引导并启发-总结”的问题情景式教学法。

在每次课的开始以提问的方式帮助学生回顾上次的授课内容,在巩固所学知识并了解学生课下复习情况的同时,可以更好地与新课内容衔接起来,做到承上启下。在授课过程中仍然通过提前设计好的问题启发学生思考并合理引导学生思考的方向,激发学生思考的激情,归纳总结学生群体思考讨论得出的结论,从而引出新的原理。这种合理导向的问题情景式教学能够充分发挥学生的自我探索、自主学习的精神,从而调动学生的主观能动性。

4.教学以学生为本,分层次教学,激励个性化、更深层次的学习。

学生兴趣爱好不同,专业知识的层次也各不相同。对于所有学生,掌握操作系统的基本概念、原理和算法是教学的基本目標,而对能力较强的学生,可以在教学中提些拓展思维的问题,以激发他们课下查找资料并独立思考,给他们充分的发展空间。此外,针对学生的不同需求和兴趣穿插讲解难度不同的内容。例如,在授课过程中,列举典型的考研和程序员的题型,以使计算机专业计划考研或考程序员的学生能够更好地把握知识点的考查范围和考查方式,方便课下准备相关知识以更好的应试。以教学大纲为基本,以学生的需求为目标进行教学,从而激发学生的学习兴趣,培养学生的能力。

四、改革效果

课堂之外,笔者与学生通过面对面、网络等多种方式进行交流,及时接收学生的反馈信息,并从中总结教学的不足。课下组织学生通过本院搭建的操作系统学习网站进行作业提交,答疑、并组织课堂调查问卷,从以上结果来看,学生对知识点的掌握程度以及运用能力明显提高。同时,在网站上留言并参加讨论的学生逐渐增多,可见以上教学方法改变了操作系统教学枯燥、乏味、难懂的现状,激发了学生对操作系统课程的学习兴趣,提高了学生的学习积极性。实践证明,以上教学方法收到了良好的效果,在操作系统课程的教学中切实可行。

参考文献:

[1]于广斌,葛元康,李宗民. “操作系统”课程改革的探索与实践[J]. 计算机教育. 2009(14)

[2]郭玲玲,袁满,富宇,高俊涛. 基于案例驱动的研究性教学[J]. 计算机教育. 2011(05)

[3]江志华. 浅谈类比教学法在操作系统教学中的应用[J]. 福建电脑. 2008(08)

篇5:操作系统课程设计报告

学院:计算机科学与技术学院

班级:计112

学号:1113022032

姓名:

一、实验名称:

用C++实现驱动调度算法、页面替换算法、银行家算法、处理器调度算法

二、实验要求:

书写实验报告,包括的内容有:

(1)实验题目

(2)程序中使用的数据结构及主要文字说明

(3)带有注释的源程序

(4)执行程序说明,表明各进程控制快的初始状态,以及各算法的运行状态

(5)通过实验后的收获与体会及对实验的改进意见和见解

二、实验目的:

通过自己编程来实现各类操作系统算法,进一步理解操作系统的概念及含义,提高对操作系统的认识,同时提高自己的动手实践能力。加强我们对各类算法的理解。

三、实验内容:

1、实现页面替换算法

(1)FIFO 先进先出页面替换算法

(2)LRU最近最少使用页面替换算法

(3)LFU最少使用频率页面替换算法

2、银行家算法

3、实现驱动调度算法

(1)先来先服务算法

(2)电梯算法

(3)扫描算法

4、实现处理器调度

(1)先进先出处理器调度

(2)时间片轮转法

(3)优先级调度

四、实验原理:

1、页面替换算法

先进先出页面置换算法:该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面加以淘汰。将已调入内存的页面按先后次序链接成一个队列,将最先调入的页面与新页面进行置换

最近最久未使用置换算法:该算法是利用“最近的过去”作为“最近的将来”,将最近最久未使用的页面加以淘汰。将已调入内存的页面按先后顺序链接成一个队列,为每一个页面增加一个访问字段,用来记录一个页面自上次被访问以来所经历的是时间t,当需淘汰一个页面时,选择现有页面中其t值最大,即最近最久未使用的页面加以淘汰

2、银行家算法

先对用户提出的请求进行合法性检查,即检查请求的是不大于需要的,是否不大于可利用的。若请求合法,则进行试分配。最后对试分配后的状态调用安全性检查算法进行安全性检查。若安全,则分配,否则,不分配,恢复原来状态,拒绝申请。

3、驱动调度算法

先进先出算法(FIFO):总是严格按时间顺序对磁盘请求予以处理。算法实现简单、易于理解并且相对公平,不会发生进程饿死现象。但该算法可能会移动的柱面数较多并且会

经常更换移动方向,效率有待提高

电梯调度算法:总是将一个方向上的请求全部处理完后,才改变方向继续处理其他请求。

扫描算法(scan algorithm):总是从最外向最内(或最内向最外)进行扫描,然后在从最内向最外(或最外向最内)扫描。该算法与电梯调度算法的区别是电梯调度在没有最外或最内的请求时不会移动到最外或最内柱面。

4、处理器调度算法

先进先出处理器调度:按照作业进入系统后备工作队列的先后次序来挑选作业,先进入系统的作业将优先被挑选进入主存,创建用户进程,分配所需资源,然后移入就绪队列。

时间片轮转法调度算法:调度次序每次把CPU分配给就绪队列进程/线程使用规

定的时间间隔,就绪队列中每个进程/线程轮流的运行一个时间片,当时间片耗尽时,就强迫当前运行进程/线程让出处理器,转而排列到就绪队列尾部,等候下一轮调度。

优先级调度:根据确定的优先级来选取进程/线程,总是选择就绪队列中的优先

级最高者投入运行,即优先级越高,先被调用。

五、数据结构设计

对操作系统的各类算法设计数据结构如下:

页面替换算法:void FIFO();void LRU();void LFU();

银行家算法:void Init()初始化算法

void Bank()银行家算法

bool Safe()安全性算法

驱动调度算法:

struct MagneticHead//磁头构成{

int site;

int count;

bool direct;

};

struct Range//磁盘磁道范围

{

int mStart;

int mEnd;

};

struct RequestList//请求序列

{

int site;

bool state;

};

struct Data//基本数据集合{

MagneticHead magneticHead;

RequestList *requestList;

int *executeList;

Range range;

int length;

};

处理器调度:

typedef struct pcb//时间片轮转法

{

char pname[N];

int runtime;

int arrivetime;

char state;

struct pcb*next;

}PCB;

typedef struct PCB1//先进先出服务

{

char ID[3];//进程号

char name[10];//进程名

char state;//运行状态

floatarrivetime;//到达时间

floatstarttime;//进程开始时间

floatfinishtime;//进程结束时间

floatservicetime;//服务时间

float turnaroundtime;//周转时间

float weightedturnaroundtime;//带权周转时间

struct PCB1 *next;//指向下个进程

}pcb1;

struct pcb2 {优先级调度

char name[10];

char state;

int super;

int ntime;

int rtime;

struct pcb2* link;

}*ready=NULL,*d;

typedef struct pcb2 PCB2;

六、课程设计总结

篇6:操作系统课程设计3

package sheji;

import java.awt.Color;import java.awt.Dimension;import java.awt.GridLayout;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;

import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.JTextArea;import javax.swing.JTextField;

public class Banker extends JFrame implements ActionListener{

JTable table1;Object[][] data;JPanel p0,p1,p11,p12,p13,p14,p2,p3,p31,p32,p33,p34,p4;JLabel t1,t2,t3,t4,t5,t6,t7,t8,t9;//t10输出安全序列省去

JButton b1,b2,b3,b6,b5;TextField text01,text02,text03,text5,text6;JTextField[] text1,text2,text3,text4;JTextArea text7;

String s1,s2 = new String();int M,N,i,j,count = 0,flag = 0;int[][]Max,Need,Allocation;int[] Available,Work,Request,Temp;

public Banker(){ super(“211213067 秦瑛 银行家算法模拟系统”);p0 = new JPanel();p1 = new JPanel();p11 = new JPanel();p12 = new JPanel();p13 = new JPanel();p14 = new JPanel();p2 = new JPanel();p3 = new JPanel();p31 = new JPanel();p32 = new JPanel();p33 = new JPanel();p34 = new JPanel();p4 = new JPanel();

p0.setLayout(new GridLayout(4,1));p1.setLayout(new GridLayout(4,1));p3.setLayout(new GridLayout(4,1));

p1.add(p11);p1.add(p12);p1.add(p13);p1.add(p14);

p3.add(p31);p3.add(p32);p3.add(p33);p3.add(p34);

p0.add(p1);p0.add(p2);p0.add(p3);p0.add(p4);

t1=new JLabel(“进程数”);t2=new JLabel(“资源数”);t3=new JLabel(“进程号”);t4=new JLabel(“已分配资源”);t5=new JLabel(“资源最大需求”);t6=new JLabel(“可用资源”);t7=new JLabel(“请求资源进程号”);t8=new JLabel(“请求资源为”);t9=new JLabel(“安全检测”);

b1=new JButton(“确定”);b2=new JButton(“添加”);b3=new JButton(“确定”);b5=new JButton(“请求”);b6=new JButton(“安全检测”);

text1 = new JTextField[6];text2 = new JTextField[6];text3 = new JTextField[6];text4 = new JTextField[6];

for(int i=0;i<6;i++){

text1[i] = new JTextField(4);

text2[i] = new JTextField(4);

text3[i] = new JTextField(4);

text4[i] = new JTextField(4);}

text01 = new TextField(4);text02 = new TextField(4);text03 = new TextField(4);text5 = new TextField(4);text6 = new TextField(50);

String[] columnNames1 = {“进程号”,“资源最大需求Max”,“已分配的资源Allocation”,“需要的资源Need”,“可利用的资源Available”};data = new Object[100][5];table1 = new JTable(data, columnNames1);table1.setPreferredScrollableViewportSize(new Dimension(550, 100));table1.setRowHeight(20);table1.doLayout();JScrollPane pane1 = new JScrollPane(table1);

text7 = new JTextArea(“ ”,6,40);JScrollPane pane2 = new JScrollPane(text7);text7.setEditable(false);

p11.add(t1);p11.add(text01);p11.add(t2);p11.add(text02);p11.add(b1);p12.add(t3);p12.add(text03);p12.add(b2);p13.add(t4);for(int i=0;i<6;i++)

p13.add(text1[i]);p14.add(t5);for(int i=0;i<6;i++)

p14.add(text2[i]);p2.add(pane1);

p31.add(t6);for(int i=0;i<6;i++)

p31.add(text3[i]);p31.add(b3);p32.add(t7);p32.add(text5);p32.add(t8);for(int i=0;i<6;i++)

p32.add(text4[i]);p33.add(b6);p33.add(b5);p34.add(t9);p34.add(text6);p4.add(pane2);

b1.addActionListener(this);b2.addActionListener(this);b3.addActionListener(this);b5.addActionListener(this);b6.addActionListener(this);

p0.setBackground(Color.lightGray);

setContentPane(p0);this.setVisible(true);this.pack();

}

public void Diguisafe(int k,int n){//递归求解安全序列函数

int m,a;if(k==n){

for(int j=0;j

Work[j] = Available[j];

if(Safe()==1){

for(a=0;a

s1 += Temp[a]+“->”;

s1 +=Temp[a]+“"+”n“;

count++;

for(int j=0;j

Work[j] = Available[j];

} } else

for(i=k;i<=n;i++){//n全排列

m=Temp[k];

Temp[k]=Temp[i];

Temp[i]=m;

Diguisafe(k+1,n);

m=Temp[k];

Temp[k]=Temp[i];

Temp[i]=m;

} }

public int Safe(){//求是否安全序列

int i;for(i=0;i

if(Small(Temp[i]-1)==1){

CountWork(Temp[i]-1);

continue;

}

else break;

} if(i==M)return 1;else return 0;

}

public void CountWork(int i){//计算工作向量函数

for(int j=0;j

Work[j] = Work[j]+Allocation[i][j];

}

public int Small(int i){//判断是否满足需求函数

int flag = 0;for(int j=0;j

if(Need[i][j]<=Work[j])flag=1;

else{

flag =0;

break;

} } return flag;

} public int Req_need(){//判断是否满足需求资源函数

int flag = 0;for(int i=0;i

if(Need[j-1][i]>=Request[i])flag = 1;

else{

flag=0;break;

} } return flag;}

public int Req_ava(){//判断是否满足可用资源数

int flag=0;for(int i=0;i

if(Available[i]>=Request[i])flag=1;

else

{

flag=0;break;

} } return flag;}

public void Changedata(){//预分配函数

String s_available = new String();for(int i=0;i

Available[i] = Available[i]-Request[i];

Allocation[j-1][i] = Allocation[j-1][i]+Request[i];

Need[j-1][i] = Need[j-1][i]-Request[i];

s_available += Available[j]+” “;} data[0][4] = s_available;table1.repaint();text6.setText(” “);text7.setText(” “);}

public void Qingqiu(){//资源请求函数 count = 0;if(Req_need()==1&&Req_ava()==1){//不满足需求

Changedata();//预分配

} else{

s2 =”不能分配“;

text6.setText(s2);} }

public void actionPerformed(ActionEvent e){ if(e.getSource()==b1){

M = Integer.parseInt(text01.getText());

N = Integer.parseInt(text02.getText());

Max = new int[M][N];

Allocation = new int[M][N];

Need = new int[M][N];

Available = new int[N];

Request = new int[N];

Work = new int[N];

Temp = new int[M];}

if(e.getSource()==b2){ i = Integer.parseInt(text03.getText());int max,allocation;String s_max,s_need,s_allocation;s_max = new String();s_need = new String();s_allocation = new String();

for(int j=0;j

for(int j=0;j

if(e.getSource()==b3){ int available;String s_available=new String();for(int j=0;j

available = Integer.parseInt(text3[j].getText());

Available[j] = available;

s_available += Available[j]+” “;} data[0][4] = s_available;table1.repaint();}

if(e.getSource()==b5){ flag =1;//请求

int request;text6.setText(” “);text7.setText(” “);j = Integer.parseInt(text5.getText());for(int i=0;i

request = Integer.parseInt(text4[i].getText());

Request[i] = request;} Qingqiu();}

if(e.getSource()==b6){//安全序列

s1=new String();

count=0;Diguisafe(0,M-1);if(count==0&&flag==0){

s2 =”系统处于不安全状态,不能请求“;} else if(count==0&&flag==1){

s2 =”系统处于不安全状态,不能分配“;} else

s2=”有“+count+”个安全序列,";text7.setText(s1);text6.setText(s2);flag = 0;} } public static void main(String[] args){

new Banker();} } 二. 运行界面

进入界面:

上一篇:双层皮幕墙技术浅探-生态技术论文下一篇:锦瑟的唯美句子