题目1 连续动态内存管理模拟实现。
1.1 题目的主要研究内容及预期达到的目标。
1)针对操作系统中内存管理相关理论进行设计,编写程序并进行测试,该程序管理一块虚拟内存。重点分析三种连续动态内存分配算法,即首次适应算法、循环首次适应算法和最佳适应算法。
2)实现内存分配和**功能。
1.2 题目研究的工作基础或实验条件。
1)硬件环境:pc机。
2)软件环境:windows xp,visual c++ 6.0
1.3 设计思想。
首次适应算法的实现:从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法的目的在于减少查找时间。为适应这种算法,空闲分区表中的空闲分区要按地址由低到高进行排序。
该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高址空间保留大的空闲区。
循环首次适应算法的实现:在分配内存空间时,不再每次从表头开始查找,而是从上次找到空闲区的下一个空闲开始查找,直到找到第一个能满足要求的的空闲区为止,并从中划出一块与请求大小相等的内存空间分配给作业。该算法能使内存中的空闲区分布得较均匀。
最佳适应算法的实现:从全部空闲区中找到能满足作业要求的、且最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表中的空闲分区要按从小到大进行排序,从表头开始查找第一个满足要求的自由分配。
1.4 流程图。
内存分配流程图,如图1-1所示。是。否。
否。是。是。否。
图1-1 内存分配流程图。
内存**流程图,如1-2所示。
图1-2 内存**流程图。
1.5 主要程序**。
1)分配内存。
void allocate(char z,float l)
int i,k;
float ad;
k=-1;for(i=0;iif(free_table[i].length >=l &&free_table[i].flag ==1)
if(k==-1 ||free_table[i].lengthk=i;
if(k==-1)
printf("无可用空闲区");
return;
if(free_table[k].length-l <=minisize)
free_table[k].flag=0;
ad=free_table[k].address;
l=free_table[k].length;
elsefree_table[k].length=free_table[k].length-l;
ad=free_table[k].address+free_table[k].length;
i=0;while(used_table[i].flag!=0 &&ii++;
if(i>=n)
printf("无表目填写已分分区,错误");
if(free_table[k].flag==0)
free_table[k].flag=1;
elsefree_table[k].length=free_table[k].length+l;
return;
elseused_table[i].address=ad;
used_table[i].length=l;
used_table[i].flag=z;
return;
2)**内存。
void reclaim(char z)
int i,k,j,s,t;
float s,l;
s=0;while((used_table[s].flag!=z ||used_table[s].flag==0)&&s s++;
if(s>=n)
used_table[s].flag=0;
s=used_table[s].address;
l=used_table[s].length;
j=-1;k=-1;
i=0;while(i i++;
if(k!=-1)
if(j!=-1)
elsefree_table[k].length=free_table[k].length+l;
else if(j!=-1)
elsereturn;
3)主函数。
void main( )
int i,a;
float l;
char z;
free_table[0].address=10240;
free_table[0].length=102400;
free_table[0].flag=1;
for(i=1;i free_table[i].flag=0;
for(i=0;i used_table[i].flag=0;
while(1)
1.6 运行结果及分析。
1)分配主存。
设作业名为w,作业所需长度为10。如图1-3所示。
图1-3 分配主存。
2)显示主存。
因为空闲区的初始地址为10240,空闲区的初始长度为102400,由于分配给作业w的作业所需长度为10,故未分配的分区长度为102390。如图1-4所示。
图1-4 显示主存。
输出已分配区表,如图1-5所示。
图1-5 输出已分配区表。
由图1-5可知,根据首次适应算法,首先选择地址较低的空闲区。因此分配给作业w的起始地址即为112630。
3)**主存。
由于已分配给作业w的分区长度为10,此时**其主存,已将作业w从中去除,故该分区为空(“0”表示“空栏目”),但此时已存在一个长度为10的分区。如图1-6所示。
操作系统课程设计报告书
目录。进程调度模拟程序 1 一 设计目的及要求 1 二 概要设计 1 三 算法流程图 2 四 源程序及注释 6 五 运行结果及分析 16 六 课程设计总结 19 七 参考文献 19 编写一个进程调度程序,允许多个进程并行执行。本次设计将采用三种算法实现进程。的并行执行,分别是最高优先数优先的调度算法...
操作系统课程设计报告
西安郵電大學。院系名称 计算机学院。专业名称 软件工程。班级 1104 学生姓名 赵大伟。学号 8位 04113124 指导教师 舒新峰。设计起止时间 2013.11.10 2013.11.20 1 通过观察 分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在posix 规范中...
操作系统课程设计报告
课程设计。课程名称操作系统。题目名称多级文件系统 2 学生学院计算机学院 专业班级。学号。学生姓名。指导教师。年月日。目录。一 课程设计 6 二 开发工具及环境 6 三 设计内容 6 四 结构图 8 五 部分 9 六 运行截图 11 七 参考文献 15 八 心得体会 15 本课程设计要求设计一个模拟...