一、需求分析
动态分区和固定分区的方案都有缺陷,固定分区方案限定了活动进程的数目,并且如果可用分区的大小与进程大小非常不匹配则内存空间的利用率非常低。而动态分区的维护十分的复杂,并且引入了进行压缩的额外开销。伙伴系统作为一种折中的方案,能够克服固定分区和可变分区系统的缺陷,在并行系统中有广泛的应用。基于伙伴系统的优秀特点,本次综合实验将实现伙伴系统的典型功能。
二、概要设计
本程序程序代码设计主要建立了9个类,共同完成伙伴系统的各项功能:
BuddyFrame类:主要实现了用户界面的搭建,确定框架大小,初始化窗口界面。
BuddyPanel类:用户界面的基本布局,包括按钮、文本等。
Control类:主要执行整个程序的核心流程,以及对内存分配和释放作出判断。
Criteria类:判定匹配内存的大小,如请求510KB,该类将返回512KB最佳匹配内存。
NCPD类:为内存判断的简写,即内存分配与内存释放的核心算法,基于二叉树设计。
Process类:定义了随机产生的进程的相关属性,如请求大小、完成需时的。
ProcessLabel类:即已分配内存的进程转化为Label在界面上显示的对应特征,如颜色大小等。
以下是整个程序的运行流程设计:
数据关系设计:
一、详细设计
1、进程的属性设定:
public class Process {
public int size;//生成的内存大小
public int time;//完成需时
public int situation;//内存分配地址
public int width;//匹配内存大小
public int flag;//是否被阻塞
}
2、内存的分配判断
public int f(int i){
输入值为i即可判断匹配大小为2^iKB的大小
如果有对应大小的内存块可分配,即将该数组flag值设为1表明以使用该内存块
返回值为j,如果有可分配的内存大小即返回对应数组值j;否则返回-1。
}
例如:
if(i==7)
{
for(j=0;j<2;j++)
{
if(node7flag[j]==0)
{
node7flag[j]=1;
for(k=j*2;k<=j*2+1;k++)//可写成递归(j,i-1)
{
node6flag[k]=1;
}
for(k=j*4;k<=j*4+3;k++)
{
&n

该程序基于伙伴系统算法实现内存分配和回收,克服固定和动态分区的缺陷。通过9个类完成核心功能,包括进程属性设定、内存分配和释放判断。程序随机生成进程,动态显示内存状态,提供暂停和继续功能。
最低0.47元/天 解锁文章
5万+

被折叠的 条评论
为什么被折叠?



