当前位置:
文档之家› 死锁的检测与解除(操作系统实验报告)
死锁的检测与解除(操作系统实验报告)
publicstaticvoidmain(String[] args) {
try{
OSExperiment window =newOSExperiment();
window.open();
}catch(Exception e) {
e.printStackTrace();
}
}
publicvoidopen() {
composite2=newComposite(composite1, SWT.BORDER);
composite2.setBackgroundMode(SWT.INHERIT_FORCE);
composite2.setData("name","composite2");
formToolkit.adapt(composite2);
label_6.setText("已获资源数量");
label_7=newLabel(composite4, SWT.NONE);
label_7.setFont(SWTResourceManager.getFont("微软雅黑", 12, SWT.NORMAL));
label_7.setBounds(0, 23, 46, 26);
bel;
importorg.eclipse.swt.widgets.Shell;
importorg.eclipse.st.widgets.Text;
importorg.eclipse.ui.forms.widgets.FormToolkit;
importorg.eclipse.swt.events.SelectionEvent;
importorg.eclipse.swt.widgets.Button;
posite;
importorg.eclipse.swt.widgets.Display;
/*------------------------面板---------------------*/
composite=newComposite(shell, SWT.BORDER);
composite.setBounds(10, 10, 697, 492);
composite.setData("name","composite");
label_5.setBounds(0, 55, 112, 26);
label_5.setData("name","label_5");
formToolkit.adapt(label_5,true,true);
label_5.setText("最大资源需求量");
label_6=newLabel(composite4, SWT.NONE);
Display display = Display.getDefault();
createContents();
shell.open();
yout();
while(!shell.isDisposed()) {
if(!display.readAndDispatch()) {
display.sleep();
label_7.setData("name","label_7");
formToolkit.adapt(label_7,true,true);
label_7.setText("进程");
label_11=newLabel(composite4, SWT.NONE);
label_11.setFont(SWTResourceManager.getFont("微软雅黑", 12, SWT.NORMAL));
formToolkit.adapt(label_3,true,true);
label_3.setText("资源数量为");
label_5=newLabel(composite4, SWT.NONE);
label_5.setFont(SWTResourceManager.getFont("微软雅黑", 12, SWT.NORMAL));
importcom.swtdesigner.SWTResourceManager;
publicclassOSExperiment {
protectedShellshell;
privatefinalFormToolkitformToolkit=new
FormToolkit(Display.getDefault());
formToolkit.adapt(composite3);
formToolkit.paintBordersFor(composite3);
composite3.setLayout(stackLayout2);
composite4=newComposite(composite3, SWT.BORDER);
privateButtonbutton3;
privateLabellabel_7;
privateTexttheProcess;
privateTexttheKind2;
privateLabellabel_11;
privateButtontest;
privateint[][]Max;
privateint[][]Allocation;
编程员:蓝冠恒
程序源代码:
packageosExperiment;
importorg.eclipse.jface.dialogs.MessageDialog;
importorg.eclipse.swt.SWT;
importorg.eclipse.swt.custom.StackLayout;
importorg.eclipse.swt.events.SelectionAdapter;
privatebooleanillegalProvide=false;
privateButtonRemoveDeadLock;
privateintN;
privateintM;
privateinti=0;
privateintj=0;
privateintk=0;
privateintwhichProcess;
privateLabellabel_3;
privateTextkindNumbers;
privateButtonbutton2;
privateTexttheKind1;
privateLabellabel_5;
privateLabellabel_6;
privateTextMaxText;
privateTextAllocationText;
privateint[][]Need;
privateint[]Available;
privateint[]Work;
privateboolean[]Finish;
privatebooleannotEnough=true;
privatebooleanisDeadlock=false;
privateboolean[]isNull;
三、设计思路:
1.输入系统进程数量n和资源类型数量m。
2.输入每类资源的数量。
3.输入每个进程每类资源的最大需求量和已获资源量。
4.检验系统的安全系。
5.若检测结果为系统不安全,可以对死锁进行解除,直到安全为止,再检测。
6.重复5操作,直到所有进程运行完毕。
四、实验结果与结论:(经调试正确的源程序和程序的运行结果)
label_6.setFont(SWTResourceManager.getFont("微软雅黑", 12, SWT.NORMAL));
label_6.setBounds(0, 87, 112, 26);
label_6.setData("name","label_6");
formToolkit.adapt(label_6,true,true);
composite4.setData("name","composite4");
formToolkit.adapt(composite4);
formToolkit.paintBordersFor(composite4);
/*--------------------------------标签---------------------------------------*/
label_11.setBounds(80, 23, 50, 26);
label_11.setData("name","label_11");
formToolkit.adapt(label_11,true,true);
label_11.setText("对资源");
label_1=newLabel(composite0, SWT.NONE);
formToolkit.adapt(composite);
formToolkit.paintBordersFor(composite);
composite0=newComposite(composite, SWT.NONE);
composite0.setBounds(0, 1, 210, 156);
label_3=newLabel(composite2, SWT.HORIZONTAL);
label_3.setFont(SWTResourceManager.getFont("微软雅黑", 12, SWT.NORMAL));