内存分配实验报告模板.docx
《内存分配实验报告模板.docx》由会员分享,可在线阅读,更多相关《内存分配实验报告模板.docx(19页珍藏版)》请在冰豆网上搜索。
内存分配实验报告模板
河北建筑工程学院
实验报告
年月日
班级
物联142
姓名
孙胜杰
学号
20143260218
评分
实验台号
同组人员
实验名称
可变分区存储管理的内存分配算法模拟实现----首次适应算法
课程名称
操作系统
仪器名称
型号规格
仪器编号
装有eclipse和Java环境的PC机一台
一实验目的
1深刻理解可变分区的首次适应算法。
2掌握可变分区存储管理方式,使用可变分区的首次适应算法进行内存分配。
二实验设备
PC机
三实验内容
在Java开发环境下模拟可变分区的内存分配,使用首次适应算法,内存分配。
四程序的主要代码
package首次适应算法;
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.GridLayout;
importjava.awt.Label;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JOptionPane;
importjavax.swing.JPanel;
importjavax.swing.JTextArea;
importjavax.swing.JTextField;
importjavax.swing.SwingConstants;
importjavax.swing.GroupLayout;
importjavax.swing.GroupLayout.Alignment;
importjavax.swing.LayoutStyle.ComponentPlacement;
publicclassFFMethodextendsJFrame{
/**
*首次适应算法
*/
privatestaticfinallongserialVersionUID=1889348358576796305L;
protectedJTextFieldblank0,blank1,blank2,blank3,
blank4,blank5,blank6,blank7,
blank8,blank9,blank10,blank11,
blank12,blank13,blank14,blank15,
blank16,blank17,
blank18,blank19,blank20,blank21,blank22,blank23,
blank24,blank25,blank26,blank27,
blank28,blank29,blank30,blank31;//定义30个进程块
protectedJTextFieldapplyMemTF,releaseMemTF;//申请大小、释放块号的编辑框
protectedJTextAreashowMemStatusTF;//内存分配情况显示框
protectedJButtonapplyMemButton,releaseMemButton;//定义申请大小、释放块号和清空内存三个按钮
int[]processBlock=newint[32];//表示进程块
int[]processBlockStartAdd=newint[32];//表示存储起始地址
int[]processBlockLength=newint[32];//表示存储进程长度
publicFFMethod(){
setForeground(Color.BLACK);
setResizable(false);
getContentPane().setBackground(Color.CYAN);
setBackground(Color.WHITE);
setFont(newFont("黑体",Font.PLAIN,15));
setTitle("\u64CD\u4F5C\u7CFB\u7EDF\u2014\u2014\u9996\u6B21\u9002\u5E94\u7B97\u6CD5");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanelp5=newJPanel();
p5.setBackground(Color.YELLOW);
Fontfont1=newFont("SansSerif",Font.BOLD,16);
GroupLayoutgroupLayout=newGroupLayout(getContentPane());
groupLayout.setHorizontalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addContainerGap()
.addComponent(p5,GroupLayout.PREFERRED_SIZE,612,GroupLayout.PREFERRED_SIZE)
.addContainerGap(589,Short.MAX_VALUE))
);
groupLayout.setVerticalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addContainerGap()
.addComponent(p5,GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addContainerGap(81,Short.MAX_VALUE))
);
JPanelp3=newJPanel(newGridLayout(11,1,20,0));
p3.setBackground(Color.YELLOW);
JLabellabel=newJLabel("\u5185\u5B58\u5BB9\u91CF32");
label.setHorizontalAlignment(SwingConstants.LEFT);
p3.add(label);
p3.add(blank0=newJTextField(3));
p3.add(blank1=newJTextField(3));
p3.add(blank2=newJTextField(3));
p3.add(blank3=newJTextField(3));
p3.add(blank4=newJTextField(3));
p3.add(blank5=newJTextField(3));
p3.add(blank6=newJTextField(3));
p3.add(blank7=newJTextField(3));
p3.add(blank8=newJTextField(3));
p3.add(blank9=newJTextField(3));
p3.add(blank10=newJTextField(3));
p3.add(blank11=newJTextField(3));
p3.add(blank12=newJTextField(3));
p3.add(blank13=newJTextField(3));
p3.add(blank14=newJTextField(3));
p3.add(blank15=newJTextField(3));
p3.add(blank16=newJTextField(3));
p3.add(blank17=newJTextField(3));
p3.add(blank18=newJTextField(3));
p3.add(blank19=newJTextField(3));
p3.add(blank20=newJTextField(3));
p3.add(blank21=newJTextField(3));
p3.add(blank22=newJTextField(3));
p3.add(blank23=newJTextField(3));
p3.add(blank24=newJTextField(3));
p3.add(blank25=newJTextField(3));
p3.add(blank26=newJTextField(3));
p3.add(blank27=newJTextField(3));
p3.add(blank28=newJTextField(3));
p3.add(blank29=newJTextField(3));
p3.add(blank30=newJTextField(3));
p3.add(blank31=newJTextField(3));
JPanelp1=newJPanel(newGridLayout(3,2,5,2));
p1.setBackground(Color.YELLOW);
p1.add(applyMemButton=newJButton("\u7533\u8BF7\uFF08\u5757\u6570\uFF09"));
applyMemButton.setBackground(Color.BLUE);
p1.add(applyMemTF=newJTextField(3));
applyMemTF.setToolTipText("");
p1.add(releaseMemButton=newJButton("\u91CA\u653E\uFF08\u5757\u53F7\uFF09"));
releaseMemButton.setBackground(Color.BLUE);
p1.add(releaseMemTF=newJTextField(3));
p1.add(newLabel("\t\u5185\u5B58\u5206\u914D\u60C5\u51B5\uFF1A"));
JPanelp2=newJPanel();
p2.setBackground(Color.YELLOW);
p2.add(showMemStatusTF=newJTextArea());
GroupLayoutgl_p2=newGroupLayout(p2);
gl_p2.setHorizontalGroup(
gl_p2.createParallelGroup(Alignment.LEADING)
.addGroup(gl_p2.createSequentialGroup()
.addComponent(p1,GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addGap(28))
.addGroup(gl_p2.createSequentialGroup()
.addComponent(showMemStatusTF,GroupLayout.DEFAULT_SIZE,265,Short.MAX_VALUE)
.addContainerGap())
);
gl_p2.setVerticalGroup(
gl_p2.createParallelGroup(Alignment.LEADING)
.addGroup(gl_p2.createSequentialGroup()
.addComponent(p1,GroupLayout.PREFERRED_SIZE,131,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(showMemStatusTF,GroupLayout.DEFAULT_SIZE,175,Short.MAX_VALUE))
);
JButtonbutton=newJButton("\u6E05\u7A7A\u5185\u5B58");
button.setBackground(Color.RED);
button.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
for(intcc=0;cc<10;cc++)
processBlock[cc]=0;
colorr();
applyMemTF.setText("");
releaseMemTF.setText("");
showMemStatusTF.setText("");
}
});
p1.add(button);
p2.setLayout(gl_p2);
applyMemTF.setFont(font1);
releaseMemTF.setFont(font1);
showMemStatusTF.setFont(font1);
//申请空间的运算
applyMemButton.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
intn=Integer.parseInt(applyMemTF.getText());//进程块的大小
if(n>32||n<0){
JOptionPane.showMessageDialog(null,"进程大小违规,请重新输入!
");
}
outher:
//向内存中添加进程
for(inti=0;i<32;i++){//向内存中添加进程
if(processBlock[i]==0&&Sum(processBlock,i,n)==0){
processBlockStartAdd[i]=i;//存储起始地址
processBlockLength[i]=n;//存储进程长度
for(intss=i;ss<(i+n);ss++)
processBlock[ss]=1;//找到合适的位置,置1
colorr();
JOptionPane.showMessageDialog(null,"成功分配到内存!
");
showMemStatusTF.append("块号:
"+processBlockStartAdd[i]+"起始位置:
"+
processBlockStartAdd[i]+"大小:
"+processBlockLength[i]+"\n");
breakouther;
}
if(i==31){
JOptionPane.showMessageDialog(null,"内存不足,请等待...");
breakouther;
}
}
}
});
//释放内存按钮监听
releaseMemButton.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
intm=Integer.parseInt(releaseMemTF.getText());//进程块的起始位置和长度
for(intff=m;ff<(m+processBlockLength[m]);ff++){
processBlock[ff]=0;
}
processBlockStartAdd[m]=0;
processBlockLength[m]=0;
colorr();
showMemStatusTF.setText("");
for(intbb=0;bb<10;bb++){
if(processBlockLength[bb]!
=0)
showMemStatusTF.append("块号:
"+processBlock[bb]+"起始位置:
"+
processBlockStartAdd[bb]+"大小:
"+processBlockLength[bb]+"\n");
}
}
});
GroupLayoutgl_p5=newGroupLayout(p5);
gl_p5.setHorizontalGroup(
gl_p5.createParallelGroup(Alignment.LEADING)
.addGroup(gl_p5.createSequentialGroup()
.addGap(20)
.addComponent(p2,GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.UNRELATED)
.addComponent(p3,GroupLayout.PREFERRED_SIZE,273,Short.MAX_VALUE)
.addGap(26))
);
gl_p5.setVerticalGroup(
gl_p5.createParallelGroup(Alignment.LEADING)
.addGroup(gl_p5.createSequentialGroup()
.addGroup(gl_p5.createParallelGroup(Alignment.LEADING,false)
.addComponent(p3,GroupLayout.DEFAULT_SIZE,GroupLayout.DEFAULT_SIZE,Short.MAX_VALUE)
.addGroup(gl_p5.createSequentialGroup()
.addGap(26)
.addComponent(p2,GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)))
.addContainerGap(27,Short.MAX_VALUE))
);
p5.setLayout(gl_p5);
getContentPane().setLayout(groupLayout);
}
//判断内存空间是否足够
publicintSum(int[]pp,intmm,intk){
intsum=0;
if((mm+k)<=32){
for(intzz=mm;zz<(mm+k);zz++)
sum+=pp[zz];
}
else{
sum=1;
}
returnsum;
}
//内存与processBlock数组相对应,占用颜色为绿色,空白为蓝色
publicvoidcolorr(){
if(processBlock[0]==1)
blank0.setBackground(Color.GREEN);
else
blank0.setBackground(Color.WHITE);
if(processBlock[1]==1)
blank1.setBackground(Color.GREEN);
else
blank1.setBackground(Color.WHITE);
if(processBlock[2]==1)
blank2.setBackground(Color.GREEN);
else
blank2.setBackground(Color.WHITE);
if(processBlock[3]==1)
blank3.setBackground(Color.GREEN);
else
blank3.setBackground(Color.WHITE);
if(processBlock[4]==1)
blank4.setBackground(Color.GREEN);
else
blank4.setBackground(Color.WHITE);
if(processBlock[5]==1)
blank5.setBackground(Color.GREEN);
else
blank5.setBackground(Color.WHITE);
if(processBlock[6]==1)