import java.awt.*; import java.awt.*; //import Brace; | import Brace; class AddressCanvas extends Canvas{ class AddressCanvas extends Canvas{ private final boolean UP = true, private final boolean UP = true, DOWN = false; DOWN = false; private int mem_size, ca_size ,bl_size ,se_size,method ; private int mem_size, ca_size ,bl_size ,se_size,method ; private String memS_String ,caS_String ,blS_String ,seS_Str private String memS_String ,caS_String ,blS_String ,seS_Str private final int xBase = 10, private final int xBase = 10, yBase = 50, yBase = 50, unit_width = 20, unit_width = 20, unit_height = 30; unit_height = 30; private Font font = new Font("TimesRoman", Font.BOLD, 14); private Font font = new Font("TimesRoman", Font.BOLD, 14); private Font sub_font = new Font("TimesRoman", Font.BOLD, 1 private Font sub_font = new Font("TimesRoman", Font.BOLD, 1 FontMetrics fm; FontMetrics fm; Color subColor = Color.blue; Color subColor = Color.blue; Color back_gr = new Color( Color back_gr = new Color( (float)0.9444,(float)0.9444,(float)0.9444); (float)0.9444,(float)0.9444,(float)0.9444); //************************************************ //************************************************ //*** Constructor *** //*** Constructor *** AddressCanvas(int M, int C, int B, int T, int S, AddressCanvas(int M, int C, int B, int T, int S, String MStr, String CStr, String BStr, String String MStr, String CStr, String BStr, String super(); super(); SetAll( M,C, B,T, S, MStr, CStr, BStr, SStr); SetAll( M,C, B,T, S, MStr, CStr, BStr, SStr); setBackground(back_gr); setBackground(back_gr); setFont(font); setFont(font); } } //************************************************ //************************************************ public void SetAll(int M, int C, int B, int T, int S, public void SetAll(int M, int C, int B, int T, int S, String MStr, String CStr, String BStr, S String MStr, String CStr, String BStr, S mem_size = M; mem_size = M; ca_size = C; ca_size = C; bl_size = B; bl_size = B; se_size = S; se_size = S; method = T; method = T; memS_String = new String(MStr); memS_String = new String(MStr); caS_String = new String(CStr); caS_String = new String(CStr); blS_String = new String(BStr); blS_String = new String(BStr); seS_String = new String(SStr); seS_String = new String(SStr); } } //************************************************ //************************************************ public void paint( Graphics a){ public void paint( Graphics a){ //address area //address area int addr_width = mem_size * unit_width; int addr_width = mem_size * unit_width; a.setColor(AddressForm.fillColor); a.setColor(AddressForm.fillColor); a.fillRect (xBase, yBase, addr_width, unit_height); a.fillRect (xBase, yBase, addr_width, unit_height); a.setColor(AddressForm.drawColor); a.setColor(AddressForm.drawColor); a.drawRect(xBase, yBase, addr_width, unit_height); a.drawRect(xBase, yBase, addr_width, unit_height); //bits in address //bits in address for (int i = 1; i<=mem_size; i++){ for (int i = 1; i<=mem_size; i++){ a.drawLine(xBase+unit_width*i, yBase, a.drawLine(xBase+unit_width*i, yBase, xBase+unit_width*i, yBase+unit_height); xBase+unit_width*i, yBase+unit_height); } } //curly brace for total memory size //curly brace for total memory size Brace br = new Brace(a); Brace br = new Brace(a); fm = getFontMetrics(font); fm = getFontMetrics(font); br.DrawCurBr(fm, xBase, yBase+unit_height, addr_width, DO br.DrawCurBr(fm, xBase, yBase+unit_height, addr_width, DO mem_size + " bits"); mem_size + " bits"); //calculate and draw Offset //calculate and draw Offset int Offset_width = bl_size * unit_width; int Offset_width = bl_size * unit_width; int xOffset= xBase + addr_width- Offset_width; int xOffset= xBase + addr_width- Offset_width; a.drawLine(xOffset+1, yBase, xOffset+1, yBase+unit_height a.drawLine(xOffset+1, yBase, xOffset+1, yBase+unit_height br.DrawCurBr(fm, xOffset, yBase, Offset_width, UP, br.DrawCurBr(fm, xOffset, yBase, Offset_width, UP, bl_size + " bits"); bl_size + " bits"); a.drawString("Offset",xOffset+Offset_width/2-15, a.drawString("Offset",xOffset+Offset_width/2-15, yBase+unit_height/2+5); yBase+unit_height/2+5); //calculate and draw Index //calculate and draw Index boolean index_status = true; boolean index_status = true; int Index_width = 0 ; int Index_width = 0 ; int Index_bit_count = 0; int Index_bit_count = 0; if (method == AddressForm.DIRECT){ if (method == AddressForm.DIRECT){ //direct //direct Index_bit_count = ca_size - bl_size; Index_bit_count = ca_size - bl_size; Index_width = (ca_size - bl_size) * unit_width; Index_width = (ca_size - bl_size) * unit_width; } } else else if (method == AddressForm.SET){ if (method == AddressForm.SET){ //set associative //set associative //*********** the following commented line has been c //*********** the following commented line has been c Index_bit_count = ca_size - (se_size+bl_size); Index_bit_count = ca_size - (se_size+bl_size); //Index_bit_count = ca_size - ((int)(Math.log(se_size //Index_bit_count = ca_size - ((int)(Math.log(se_size //*************************************************** //*************************************************** Index_width = Index_bit_count * unit_width; Index_width = Index_bit_count * unit_width; } } else { else { //method is "fully associative" //method is "fully associative" index_status = false; index_status = false; } } if (index_status){ if (index_status){ int xIndex = xBase + addr_width - Index_width - Offset_ int xIndex = xBase + addr_width - Index_width - Offset_ a.drawLine(xIndex+1, yBase, xIndex+1, yBase+unit_height a.drawLine(xIndex+1, yBase, xIndex+1, yBase+unit_height br.DrawCurBr(fm, xIndex, yBase, Index_width, UP, br.DrawCurBr(fm, xIndex, yBase, Index_width, UP, Index_bit_count + " bits"); Index_bit_count + " bits"); a.drawString("Index",xIndex+Index_width/2-15,yBase+unit a.drawString("Index",xIndex+Index_width/2-15,yBase+unit } } //draw tag //draw tag int Tag_width = addr_width - Offset_width - Index_width; int Tag_width = addr_width - Offset_width - Index_width; int Tag_bit_count = mem_size - bl_size - Index_bit_count; int Tag_bit_count = mem_size - bl_size - Index_bit_count; if (Tag_bit_count <= 0) if (Tag_bit_count <= 0) a.setColor(Color.red); a.setColor(Color.red); br.DrawCurBr(fm, xBase, yBase, Tag_width, UP, br.DrawCurBr(fm, xBase, yBase, Tag_width, UP, Tag_bit_count + " bits"); Tag_bit_count + " bits"); a.drawString("Tag",xBase+Tag_width/2-5,yBase+unit_height/ a.drawString("Tag",xBase+Tag_width/2-5,yBase+unit_height/ //explanations under address //explanations under address int yTextBase = yBase+unit_height+50; int yTextBase = yBase+unit_height+50; int stepDown = 20; int stepDown = 20; //total //total a.drawString("Memory size = "+ memS_String + " = 2" , a.drawString("Memory size = "+ memS_String + " = 2" , xBase,yTextBase+stepDown); xBase,yTextBase+stepDown); a.setFont(sub_font); a.setFont(sub_font); Color prev_color = a.getColor(); Color prev_color = a.getColor(); a.setColor(subColor); a.setColor(subColor); a.drawString(mem_size+"", xBase+165,yTextBase+stepDown-7) a.drawString(mem_size+"", xBase+165,yTextBase+stepDown-7) a.setFont(font); a.setFont(font); a.setColor(prev_color); a.setColor(prev_color); //offset //offset a.drawString("Block size = "+ blS_String + " = 2" , a.drawString("Block size = "+ blS_String + " = 2" , xBase,yTextBase+stepDown*3); xBase,yTextBase+stepDown*3); //subscript!!! //subscript!!! a.setFont(sub_font); a.setFont(sub_font); prev_color = a.getColor(); prev_color = a.getColor(); a.setColor(subColor); a.setColor(subColor); a.drawString(bl_size+"", xBase+135,yTextBase+stepDown*3-7 a.drawString(bl_size+"", xBase+135,yTextBase+stepDown*3-7 a.setFont(font); a.setFont(font); a.setColor(prev_color); a.setColor(prev_color); //Index //Index if (index_status){ if (index_status){ if (method == AddressForm.SET){ if (method == AddressForm.SET){ a.drawString("Number of sets in cache = "+ a.drawString("Number of sets in cache = "+ "Cache Size / ( Set Size * Block Size ) "Cache Size / ( Set Size * Block Size ) xBase,yTextBase+stepDown*5); xBase,yTextBase+stepDown*5); a.drawString(" " + caS_String + " / a.drawString(" " + caS_String + " / seS_String + seS_String + " * "+ " * "+ blS_String + blS_String + " ) = 2 / ( 2 * 2 ) = 2", " ) = 2 / ( 2 * 2 ) = 2", xBase,yTextBase+stepDown*6); xBase,yTextBase+stepDown*6); //subscripts !!! //subscripts !!! a.setFont(sub_font); a.setFont(sub_font); prev_color = a.getColor(); prev_color = a.getColor(); //int exp_se_size = (int) (Math.log(se_size)/Math.log //int exp_se_size = (int) (Math.log(se_size)/Math.log a.drawString(ca_size+"", xBase+265,yTextBase+stepDown a.drawString(ca_size+"", xBase+265,yTextBase+stepDown a.drawString(se_size+"", xBase+300,yTextBase+stepDown a.drawString(se_size+"", xBase+300,yTextBase+stepDown a.drawString(bl_size+"", xBase+335,yTextBase+stepDown a.drawString(bl_size+"", xBase+335,yTextBase+stepDown a.setColor(subColor); a.setColor(subColor); a.drawString(Index_bit_count+"", xBase+375,yTextBase+ a.drawString(Index_bit_count+"", xBase+375,yTextBase+ a.setFont(font); a.setFont(font); a.setColor(prev_color); a.setColor(prev_color); }else{ }else{ a.drawString("Number of blocks in cache = "+ a.drawString("Number of blocks in cache = "+ "Cache Size / Block Size = ", "Cache Size / Block Size = ", xBase,yTextBase+stepDown*5); xBase,yTextBase+stepDown*5); a.drawString(" " + caS_String + " / a.drawString(" " + caS_String + " / blS_String + blS_String + " = 2 / 2 = 2", " = 2 / 2 = 2", xBase,yTextBase+stepDown*6); xBase,yTextBase+stepDown*6); //subscripts !!! //subscripts !!! a.setFont(sub_font); a.setFont(sub_font); prev_color = a.getColor(); prev_color = a.getColor(); a.drawString(ca_size+"", xBase+180,yTextBase+stepDow a.drawString(ca_size+"", xBase+180,yTextBase+stepDow a.drawString(bl_size+"", xBase+215,yTextBase+stepDow a.drawString(bl_size+"", xBase+215,yTextBase+stepDow a.setColor(subColor); a.setColor(subColor); a.drawString(Index_bit_count+"", xBase+245,yTextBase a.drawString(Index_bit_count+"", xBase+245,yTextBase a.setFont(font); a.setFont(font); a.setColor(prev_color); a.setColor(prev_color); } } } } //Tag //Tag a.drawString("Number of bits in Tag = "+mem_size+ a.drawString("Number of bits in Tag = "+mem_size+ " - "+Index_bit_count+" - "+ bl_size+ " - "+Index_bit_count+" - "+ bl_size+ " = ", " = ", xBase,yTextBase+stepDown*8); xBase,yTextBase+stepDown*8); prev_color = a.getColor(); prev_color = a.getColor(); a.setColor(subColor); a.setColor(subColor); a.drawString(Tag_bit_count+"", xBase+245,yTextBase+stepDo a.drawString(Tag_bit_count+"", xBase+245,yTextBase+stepDo a.setColor(prev_color); a.setColor(prev_color); if (Tag_bit_count <= 0) { if (Tag_bit_count <= 0) { Color next_color = Color.black; Color next_color = Color.black; for( int j = 0; j<10; j++){ for( int j = 0; j<10; j++){ try{ try{ Thread.sleep(200); Thread.sleep(200); a.setColor(next_color); a.setColor(next_color); if (next_color == Color.black) next_color = Color.r if (next_color == Color.black) next_color = Color.r else next_color = Color.black; else next_color = Color.black; a.drawString("Number of bits in Tag = "+mem_size+ a.drawString("Number of bits in Tag = "+mem_size+ " - "+Index_bit_count+" - "+ bl_size+ " - "+Index_bit_count+" - "+ bl_size+ " = ", " = ", xBase,yTextBase+stepDown*8); xBase,yTextBase+stepDown*8); prev_color = a.getColor(); prev_color = a.getColor(); a.setColor(subColor); a.setColor(subColor); a.drawString(Tag_bit_count+"", xBase+245,yTextBase+ a.drawString(Tag_bit_count+"", xBase+245,yTextBase+ a.setColor(prev_color); a.setColor(prev_color); }catch(InterruptedException ent){} }catch(InterruptedException ent){} }//for }//for }//if }//if }//paint }//paint } } //**************************** END ************************** //**************************** END ************************** import java.applet.Applet; import java.applet.Applet; import java.awt.*; import java.awt.*; public class AddressForm extends Applet{ public class AddressForm extends Applet{ private final String[][] Table_of_mem_sizes ={ private final String[][] Table_of_mem_sizes ={ {"16 MB ","8 MB ","4 MB ","2 MB ","1 MB ","512 KB","2 {"16 MB ","8 MB ","4 MB ","2 MB ","1 MB ","512 KB","2 {"24", "23", "22", "21", "20", "19", {"24", "23", "22", "21", "20", "19", private final String[][] Table_of_cac_sizes = { private final String[][] Table_of_cac_sizes = { {"512 KB","256 KB","128 KB","64 KB "}, {"512 KB","256 KB","128 KB","64 KB "}, {"19", "18", "17", "16" }}; {"19", "18", "17", "16" }}; private final String[][] Table_of_blo_sizes = { private final String[][] Table_of_blo_sizes = { {"32 B","16 B","8 B "}, {"32 B","16 B","8 B "}, {"5", "4", "3" }}; {"5", "4", "3" }}; private final String[][] Table_of_set_sizes = { private final String[][] Table_of_set_sizes = { {"2 blocks","4 blocks","8 blocks"}, {"2 blocks","4 blocks","8 blocks"}, {"1", "2", "3" }}; {"1", "2", "3" }}; public static final int DIRECT = 0, public static final int DIRECT = 0, FULL = 1, FULL = 1, SET = 2; SET = 2; private Choice MemSize, CacheSize, BlockSize, SetSize; private Choice MemSize, CacheSize, BlockSize, SetSize; private Button Solve; private Button Solve; private CheckboxGroup Method; private CheckboxGroup Method; private Checkbox direct, full, set; private Checkbox direct, full, set; private int mem_index = 0, private int mem_index = 0, cac_index = 0, cac_index = 0, blo_index =0, blo_index =0, set_index =0, set_index =0, method ; method ; private Panel p5,p6,p7, p_s, p_l,p_head, p_Sizes; private Panel p5,p6,p7, p_s, p_l,p_head, p_Sizes; private AddressCanvas a ; private AddressCanvas a ; public static final Color fillColor= public static final Color fillColor= new Color ((float)0.625,(float)0.8125,(float)0.8125); new Color ((float)0.625,(float)0.8125,(float)0.8125); public static final Color drawColor = Color.black; public static final Color drawColor = Color.black; Font font = new Font("TimesRoman", Font.BOLD, 14); Font font = new Font("TimesRoman", Font.BOLD, 14); //********************************************************* //********************************************************* public void init(){ public void init(){ boolean b ; boolean b ; setBackground ( setBackground ( new Color((float)0.9444,(float)0.9444,(flo new Color((float)0.9444,(float)0.9444,(flo setFont(font); setFont(font); //creating,filling and adding choice buttons //creating,filling and adding choice buttons MemSize = new Choice(); MemSize = new Choice(); for (int i = 0; i0; i-=10){ for (int i = 90; i>0; i-=10){ f_value.addItem(i+""); f_value.addItem(i+""); } } s_value = new Choice(); s_value = new Choice(); for (int i = 10; i<100; i+=10){ for (int i = 10; i<100; i+=10){ s_value.addItem(i+""); s_value.addItem(i+""); } } p1 = new Panel(); p1 = new Panel(); p1.add(new Label("Make ")); p1.add(new Label("Make ")); p1.add(f_value); p1.add(f_value); p1.add(new Label("% of a program ")); p1.add(new Label("% of a program ")); p2=new Panel(); p2=new Panel(); p2.add(new Label("run ")); p2.add(new Label("run ")); p2.add(s_value); p2.add(s_value); p2.add(new Label(" times faster.")); p2.add(new Label(" times faster.")); p3=new Panel(); p3=new Panel(); p3.add(new Label("Overall Speedup: ")); p3.add(new Label("Overall Speedup: ")); p3.add(t = new TextField(5)); p3.add(t = new TextField(5)); t.setText(CalcSp(f,s)); t.setText(CalcSp(f,s)); t.setEditable(false); t.setEditable(false); add(p1); add(p1); add(p2); add(p2); add(b=new Button("Solve")); add(b=new Button("Solve")); add(p3); add(p3); resize(250,250); resize(250,250); } } //************************************************* //************************************************* public boolean action(Event e, Object o){ public boolean action(Event e, Object o){ if (e.target ==f_value){ if (e.target ==f_value){ f= Integer.parseInt(e.arg.toString()); f= Integer.parseInt(e.arg.toString()); } } if (e.target ==s_value){ if (e.target ==s_value){ s= Integer.parseInt(e.arg.toString()); s= Integer.parseInt(e.arg.toString()); } } if (e.target ==b){ if (e.target ==b){ t.setText(CalcSp(f,s)); t.setText(CalcSp(f,s)); } } return true; return true; } } //****************************************** //****************************************** private String CalcSp(int f, int s){ private String CalcSp(int f, int s){ double sp = 1/((1-f*0.01)+f*0.01/s); double sp = 1/((1-f*0.01)+f*0.01/s); String t = new String(String.valueOf(sp)); String t = new String(String.valueOf(sp)); String r = t.substring(0,6); String r = t.substring(0,6); return r; return r; } } } } //*************** end ******************************* //*************** end ******************************* import java.applet.Applet; import java.applet.Applet; import java.awt.*; import java.awt.*; public class AmCalc extends Applet{ public class AmCalc extends Applet{ private Choice f_value, s_value; private Choice f_value, s_value; private TextField t; private TextField t; private Button b; private Button b; private Panel p1,p2,p3; private Panel p1,p2,p3; private int f=10, private int f=10, s=90; s=90; Color fillColor= Color fillColor= new Color ((float)0.625,(float)0.8125,(float)0.8125); new Color ((float)0.625,(float)0.8125,(float)0.8125); Font font = new Font("TimesRoman", Font.BOLD, 14); Font font = new Font("TimesRoman", Font.BOLD, 14); //***************************************************** //***************************************************** public void init(){ public void init(){ setBackground (fillColor); setBackground (fillColor); setFont(font); setFont(font); f_value = new Choice(); f_value = new Choice(); for (int i = 10; i<100; i+=10){ for (int i = 10; i<100; i+=10){ f_value.addItem(i+""); f_value.addItem(i+""); } } s_value = new Choice(); s_value = new Choice(); for (int i = 90; i>0; i-=10){ for (int i = 90; i>0; i-=10){ s_value.addItem(i+""); s_value.addItem(i+""); } } p1 = new Panel(); p1 = new Panel(); p1.add(new Label("Make ")); p1.add(new Label("Make ")); p1.add(f_value); p1.add(f_value); p1.add(new Label("% of a program ")); p1.add(new Label("% of a program ")); p2=new Panel(); p2=new Panel(); p2.add(new Label("run ")); p2.add(new Label("run ")); p2.add(s_value); p2.add(s_value); p2.add(new Label(" times faster.")); p2.add(new Label(" times faster.")); p3=new Panel(); p3=new Panel(); p3.add(new Label("Overall Speedup: ")); p3.add(new Label("Overall Speedup: ")); p3.add(t = new TextField(5)); p3.add(t = new TextField(5)); t.setText(CalcSp(f,s)); t.setText(CalcSp(f,s)); t.setEditable(false); t.setEditable(false); add(p1); add(p1); add(p2); add(p2); add(b=new Button("Solve")); add(b=new Button("Solve")); add(p3); add(p3); resize(250,250); resize(250,250); } } //************************************************* //************************************************* public boolean action(Event e, Object o){ public boolean action(Event e, Object o){ if (e.target ==f_value){ if (e.target ==f_value){ f= (int)Integer.parseInt(e.arg.toString()); f= (int)Integer.parseInt(e.arg.toString()); } } if (e.target ==s_value){ if (e.target ==s_value){ s= (int)Integer.parseInt(e.arg.toString()); s= (int)Integer.parseInt(e.arg.toString()); } } if (e.target ==b){ if (e.target ==b){ t.setText(CalcSp(f,s)); t.setText(CalcSp(f,s)); } } return true; return true; } } //****************************************** //****************************************** private String CalcSp(int f, int s){ private String CalcSp(int f, int s){ double sp = 1/((1-f*0.01)+f*0.01/s); double sp = 1/((1-f*0.01)+f*0.01/s); String t = new String(String.valueOf(sp)); String t = new String(String.valueOf(sp)); String r = t.substring(0,6); String r = t.substring(0,6); return r; return r; } } } } //*************** end ******************************* //*************** end ******************************* import java.applet.Applet; import java.applet.Applet; import java.awt.*; import java.awt.*; public class AmForm2 extends Applet{ public class AmForm2 extends Applet{ int axBase = 50; int axBase = 50; int ayBase = 40; int ayBase = 40; int width = 400; int width = 400; int height = 80; int height = 80; Font font = new Font("TimesRoman", Font.BOLD, 14); Font font = new Font("TimesRoman", Font.BOLD, 14); Color fillColor = Color fillColor = new Color ((float)0.4375,(float)0.8125,(float)0.8125); new Color ((float)0.4375,(float)0.8125,(float)0.8125); Color drawColor = Color.black; Color drawColor = Color.black; Color bkgColor = new Color((float)0.9444,(float)0.9444,(flo Color bkgColor = new Color((float)0.9444,(float)0.9444,(flo //****************************************************** //****************************************************** public void init(){ public void init(){ setFont(font); setFont(font); setBackground (bkgColor); setBackground (bkgColor); resize(width,height); resize(width,height); } } //****************************************************** //****************************************************** public void paint(Graphics g){ public void paint(Graphics g){ //border around //border around g.setColor(Color.red); g.setColor(Color.red); g.fillRect(5,5,width-5, height-5); g.fillRect(5,5,width-5, height-5); g.setColor(bkgColor); g.setColor(bkgColor); g.fillRect(0,0,width-5, height-5); g.fillRect(0,0,width-5, height-5); g.setColor(Color.red); g.setColor(Color.red); g.drawRect(0,0,width-5, height-5); g.drawRect(0,0,width-5, height-5); //Amdahl's law //Amdahl's law g.setColor(Color.red); g.setColor(Color.red); g.drawString ("Overall speedup = ",axBase,ayBase); g.drawString ("Overall speedup = ",axBase,ayBase); g.drawLine(axBase+140,ayBase-5,axBase+225,ayBase-5); g.drawLine(axBase+140,ayBase-5,axBase+225,ayBase-5); g.drawString("1",axBase+170,ayBase-10); g.drawString("1",axBase+170,ayBase-10); g.drawString("( 1 - f ) + ",axBase+140,ayBase+15); g.drawString("( 1 - f ) + ",axBase+140,ayBase+15); g.drawString("f",axBase+140+63,ayBase+15-7); g.drawString("f",axBase+140+63,ayBase+15-7); g.drawString("s",axBase+140+63,ayBase+15+10); g.drawString("s",axBase+140+63,ayBase+15+10); g.drawLine(axBase+140+60,ayBase+15-5, g.drawLine(axBase+140+60,ayBase+15-5, axBase+140+72,ayBase+15-5); axBase+140+72,ayBase+15-5); } } } } //************** end ************************************* //************** end ************************************* import java.applet.Applet; import java.applet.Applet; import java.awt.*; import java.awt.*; public class AmPict extends Applet{ public class AmPict extends Applet{ int dxBase = 50; int dxBase = 50; int dyBase = 40; int dyBase = 40; int width = 500; int width = 500; int height = 200; int height = 200; Font font = new Font("TimesRoman", Font.BOLD, 14); Font font = new Font("TimesRoman", Font.BOLD, 14); Color fillColor=new Color ((float)0.4375,(float)0.8125,(flo Color fillColor=new Color ((float)0.4375,(float)0.8125,(flo Color drawColor = Color.black; Color drawColor = Color.black; Color bkgColor = new Color((float)0.9444,(float)0.9444,(flo Color bkgColor = new Color((float)0.9444,(float)0.9444,(flo //********************************************************* //********************************************************* public void init(){ public void init(){ setFont(font); setFont(font); setBackground (bkgColor); setBackground (bkgColor); resize(width,height); resize(width,height); } } //********************************************************* //********************************************************* public void paint(Graphics g){ public void paint(Graphics g){ //Program picture //Program picture int dWidth = 120; int dWidth = 120; int dHeight = 150; int dHeight = 150; g.setColor(new Color((float)0.625,(float)0.8125,(float)0. g.setColor(new Color((float)0.625,(float)0.8125,(float)0. g.fillRect(dxBase,dyBase,dWidth, dHeight); g.fillRect(dxBase,dyBase,dWidth, dHeight); g.setColor(Color.black); g.setColor(Color.black); g.drawString("Program",dxBase, dyBase-5); g.drawString("Program",dxBase, dyBase-5); g.drawRect(dxBase,dyBase,dWidth, dHeight); g.drawRect(dxBase,dyBase,dWidth, dHeight); //inside loops //inside loops g.setColor(fillColor); g.setColor(fillColor); g.fillRect(dxBase+10,dyBase+20,dWidth-20, 55); g.fillRect(dxBase+10,dyBase+20,dWidth-20, 55); g.fillRect(dxBase+10,dyBase+20+55+20,dWidth-20, 35); g.fillRect(dxBase+10,dyBase+20+55+20,dWidth-20, 35); g.setColor(Color.black); g.setColor(Color.black); g.drawRect(dxBase+10,dyBase+20,dWidth-20, 55); g.drawRect(dxBase+10,dyBase+20,dWidth-20, 55); g.drawRect(dxBase+10,dyBase+20+55+20,dWidth-20, 35); g.drawRect(dxBase+10,dyBase+20+55+20,dWidth-20, 35); g.drawString("Loop 1",dxBase+10+10,dyBase+20+55-25); g.drawString("Loop 1",dxBase+10+10,dyBase+20+55-25); g.drawString("Loop 2",dxBase+10+10,dyBase+20+55+20+35-15) g.drawString("Loop 2",dxBase+10+10,dyBase+20+55+20+35-15) DrawCurBr(g,dxBase+dHeight-15,dyBase+20-5,55+10,true,"200 DrawCurBr(g,dxBase+dHeight-15,dyBase+20-5,55+10,true,"200 DrawCurBr(g,dxBase+dHeight-15,dyBase+20+55+20-5,35+10, DrawCurBr(g,dxBase+dHeight-15,dyBase+20+55+20-5,35+10, true,"10 lines"); true,"10 lines"); //line between loops //line between loops g.drawLine(dxBase+dHeight+80,dyBase+20+55+20-5-3, g.drawLine(dxBase+dHeight+80,dyBase+20+55+20-5-3, dxBase+dHeight+230,dyBase+20+55+20-5-3); dxBase+dHeight+230,dyBase+20+55+20-5-3); g.drawString("10% of total execution",dxBase+dHeight+80, g.drawString("10% of total execution",dxBase+dHeight+80, dyBase+20+55-30); dyBase+20+55-30); g.drawString("90% of total execution",dxBase+dHeight+80, g.drawString("90% of total execution",dxBase+dHeight+80, dyBase+20+55+20+35-20); dyBase+20+55+20+35-20); g.drawString("time",dxBase+dHeight+80+50, g.drawString("time",dxBase+dHeight+80+50, dyBase+20+55-15); dyBase+20+55-15); g.drawString("time",dxBase+dHeight+80+50, g.drawString("time",dxBase+dHeight+80+50, dyBase+20+55+20+35-5); dyBase+20+55+20+35-5); } } //**************************************************** //**************************************************** public void DrawCurBr(Graphics g, public void DrawCurBr(Graphics g, int x, // base coordinates def int x, // base coordinates def int y, // as very left point o int y, // as very left point o int width, //width of the brace int width, //width of the brace boolean Right, //true if brace pointe boolean Right, //true if brace pointe String label){ String label){ int w=15; //width and height of the rectangle int w=15; //width and height of the rectangle int h=10; //an arcs are bounded by. int h=10; //an arcs are bounded by. int height = h; //height of the whole brace int height = h; //height of the whole brace double Y_step, Y_raise; //to combine up/do double Y_step, Y_raise; //to combine up/do int angle_1,angle_2 ,angle_3 ,angle_4 ; int angle_1,angle_2 ,angle_3 ,angle_4 ; if (Right){ if (Right){ Y_step = 0.5; Y_step = 0.5; Y_raise = 0.5; Y_raise = 0.5; angle_1 = 0; angle_1 = 0; angle_2 = 180; angle_2 = 180; angle_3 = 90; angle_3 = 90; angle_4 = 270; angle_4 = 270; } } else { else { Y_step = -0.5; Y_step = -0.5; Y_raise = -1.5; Y_raise = -1.5; angle_1 = 90; angle_1 = 90; angle_2 = 270; angle_2 = 270; angle_3 = 0; angle_3 = 0; angle_4 = 180; angle_4 = 180; } } g.drawArc(x-h/2, y, h, w, angle_1,90); g.drawArc(x-h/2, y, h, w, angle_1,90); g.drawArc((int)(x+height*Y_raise),y+width/2-w,h, w,angle_ g.drawArc((int)(x+height*Y_raise),y+width/2-w,h, w,angle_ g.drawArc((int)(x+height*Y_raise), y+width/2,h, w,angle_3 g.drawArc((int)(x+height*Y_raise), y+width/2,h, w,angle_3 g.drawArc(x-h/2, y+width-w, h,w,angle_4,90); g.drawArc(x-h/2, y+width-w, h,w,angle_4,90); g.drawLine((int)(x+h*Y_step), y+w/2, (int)(x+h*Y_step), g.drawLine((int)(x+h*Y_step), y+w/2, (int)(x+h*Y_step), y+width/2-w/2 ); y+width/2-w/2 ); g.drawLine((int)(x+h*Y_step),y+width/2+w/2,(int)(x+h*Y_st g.drawLine((int)(x+h*Y_step),y+width/2+w/2,(int)(x+h*Y_st y+width-w/2); y+width-w/2); int yLabel = y+width/2+5; int yLabel = y+width/2+5; int xLabel; int xLabel; if (Right) if (Right) xLabel= x+height+5; xLabel= x+height+5; else else xLabel= x-height-30; xLabel= x-height-30; g.drawString(label, xLabel, yLabel); g.drawString(label, xLabel, yLabel); }//end DrawCurBr }//end DrawCurBr } } import java.awt.*; import java.awt.*; public class Brace{ public class Brace{ private Graphics g; private Graphics g; //********************************************************* //********************************************************* public Brace(Graphics G){ public Brace(Graphics G){ g=G; g=G; } } //********************************************************* //********************************************************* public void DrawCurBr( FontMetrics font_m, public void DrawCurBr( FontMetrics font_m, int x, // base coordinates def int x, // base coordinates def int y, // as very left point o int y, // as very left point o int width, //width of the brace int width, //width of the brace boolean up, //true if brace pointe boolean up, //true if brace pointe String label){ String label){ int w=15; //width and height of the rectangle int w=15; //width and height of the rectangle int h=10; //an arcs are bounded by. int h=10; //an arcs are bounded by. int height = h; //height of the whole brace int height = h; //height of the whole brace double Y_step, Y_raise; //to combine up/do double Y_step, Y_raise; //to combine up/do int angle_1,angle_2 ,angle_3 ,angle_4 ; int angle_1,angle_2 ,angle_3 ,angle_4 ; if (up){ if (up){ Y_step = -0.5; Y_step = -0.5; Y_raise = -1.5; Y_raise = -1.5; angle_1 = 90; angle_1 = 90; angle_2 = 270; angle_2 = 270; angle_3 = 180; angle_3 = 180; angle_4 = 0; angle_4 = 0; } } else { else { Y_step = 0.5; Y_step = 0.5; Y_raise = 0.5; Y_raise = 0.5; angle_1 = 180; angle_1 = 180; angle_2 = 0; angle_2 = 0; angle_3 = 90; angle_3 = 90; angle_4 = 270; angle_4 = 270; } } g.drawArc(x, y-h/2, w, h, angle_1,90); g.drawArc(x, y-h/2, w, h, angle_1,90); g.drawArc(x+width/2-w, (int)(y+height*Y_raise), w, h,angl g.drawArc(x+width/2-w, (int)(y+height*Y_raise), w, h,angl g.drawArc(x+width/2, (int)(y+height*Y_raise), w,h,angle_3 g.drawArc(x+width/2, (int)(y+height*Y_raise), w,h,angle_3 g.drawArc(x+width-w, y-h/2, w,h,angle_4,90); g.drawArc(x+width-w, y-h/2, w,h,angle_4,90); g.drawLine(x+w/2,(int)(y+h*Y_step), x+width/2-w/2, g.drawLine(x+w/2,(int)(y+h*Y_step), x+width/2-w/2, (int)(y+h*Y_step)); (int)(y+h*Y_step)); g.drawLine(x+width/2+w/2,(int)(y+h*Y_step), x+width-w/2, g.drawLine(x+width/2+w/2,(int)(y+h*Y_step), x+width-w/2, (int)(y+h*Y_step)); (int)(y+h*Y_step)); int strLength = font_m.stringWidth(label); int strLength = font_m.stringWidth(label); int xLabel = x+(width-strLength)/2; int xLabel = x+(width-strLength)/2; int yLabel; int yLabel; if (up) if (up) yLabel= y-height-5; yLabel= y-height-5; else else yLabel= y+height+10; yLabel= y+height+10; g.drawString(label, xLabel, yLabel); g.drawString(label, xLabel, yLabel); }//end DrawCurBr }//end DrawCurBr } } //********************** end ******************************** //********************** end ******************************** import java.applet.Applet; import java.applet.Applet; import java.awt.*; import java.awt.*; //import Brace; | import Brace; public class CacheStructure extends Applet{ public class CacheStructure extends Applet{ int xBase = 50; int xBase = 50; int yBase = 40; int yBase = 40; int width = 300; int width = 300; int height= 250; int height= 250; int Offset_width = 100; int Offset_width = 100; int Index_width = 120; int Index_width = 120; Color fillColor = Color fillColor = new Color ((float)0.625,(float)0.8125,(float)0.8125); new Color ((float)0.625,(float)0.8125,(float)0.8125); Color drawColor = Color.black; Color drawColor = Color.black; Color bkgColor = new Color((float)0.9444,(float)0.9444,(flo Color bkgColor = new Color((float)0.9444,(float)0.9444,(flo Font font = new Font("TimesRoman", Font.BOLD, 14); Font font = new Font("TimesRoman", Font.BOLD, 14); FontMetrics font_m; FontMetrics font_m; //********************************************************* //********************************************************* public void init(){ public void init(){ setFont(font); setFont(font); font_m = getFontMetrics(font); font_m = getFontMetrics(font); setBackground (bkgColor); setBackground (bkgColor); resize(width, height); resize(width, height); } } //********************************************************* //********************************************************* public void paint(Graphics g){ public void paint(Graphics g){ int tag_width = 100; int tag_width = 100; int tag_height = 20; int tag_height = 20; int fr_width = 120; int fr_width = 120; int fr_height = 40; int fr_height = 40; int rxBase = xBase+tag_width; int rxBase = xBase+tag_width; int ryBase = yBase; int ryBase = yBase; int Num_bl = 4; int Num_bl = 4; //RAM //RAM g.setColor(fillColor); g.setColor(fillColor); g.fillRect(rxBase, ryBase, fr_width, fr_height*Num_bl); g.fillRect(rxBase, ryBase, fr_width, fr_height*Num_bl); g.setColor(Color.black); g.setColor(Color.black); g.drawRect(rxBase, ryBase, fr_width, fr_height*Num_bl); g.drawRect(rxBase, ryBase, fr_width, fr_height*Num_bl); int shift = 0; int shift = 0; int j; int j; for (int i = 1; i <= Num_bl; i++){ for (int i = 1; i <= Num_bl; i++){ j = i-1; j = i-1; shift = fr_height*i; shift = fr_height*i; g.drawLine(rxBase,ryBase+shift, g.drawLine(rxBase,ryBase+shift, rxBase+fr_width, ryBase+shift); rxBase+fr_width, ryBase+shift); g.drawString("Block Frame "+j, g.drawString("Block Frame "+j, rxBase+10, ryBase+shift-fr_height/2+5); rxBase+10, ryBase+shift-fr_height/2+5); } } //tags //tags int step = 0; int step = 0; for (int i = 0; i< Num_bl; i++){ for (int i = 0; i< Num_bl; i++){ step = i*fr_height; step = i*fr_height; g.setColor(Color.lightGray); g.setColor(Color.lightGray); g.fillRect(xBase, yBase+step, tag_width, tag_height); g.fillRect(xBase, yBase+step, tag_width, tag_height); g.setColor(Color.gray); g.setColor(Color.gray); g.fillRect(xBase, yBase+step, 20,20); g.fillRect(xBase, yBase+step, 20,20); g.setColor(Color.black); g.setColor(Color.black); g.drawRect(xBase, yBase+step, tag_width, tag_height); g.drawRect(xBase, yBase+step, tag_width, tag_height); g.drawLine(xBase+20, yBase+step, xBase+20, yBase+step+t g.drawLine(xBase+20, yBase+step, xBase+20, yBase+step+t g.drawString ("tag", xBase+40, yBase+step+tag_height-5) g.drawString ("tag", xBase+40, yBase+step+tag_height-5) } } Brace br = new Brace(g); Brace br = new Brace(g); br.DrawCurBr(font_m, xBase, yBase-5,tag_width,true, "Dire br.DrawCurBr(font_m, xBase, yBase-5,tag_width,true, "Dire br.DrawCurBr(font_m, xBase+tag_width, yBase-5,fr_width,tr br.DrawCurBr(font_m, xBase+tag_width, yBase-5,fr_width,tr g.setColor(Color.gray); g.setColor(Color.gray); g.fillRect(xBase,yBase+ Num_bl*fr_height+20, 20,20); g.fillRect(xBase,yBase+ Num_bl*fr_height+20, 20,20); g.setColor(Color.black); g.setColor(Color.black); g.drawRect(xBase,yBase+ Num_bl*fr_height+20, 20,20); g.drawRect(xBase,yBase+ Num_bl*fr_height+20, 20,20); g.drawString(" - Control Bit",xBase+25,yBase+ Num_bl*fr_h g.drawString(" - Control Bit",xBase+25,yBase+ Num_bl*fr_h } } } } //******************* end *********************************** //******************* end *********************************** import java.awt.*; import java.awt.*; //import Brace; | import Brace; import java.applet.Applet; import java.applet.Applet; public class ex18_applet1 extends Applet{ public class ex18_applet1 extends Applet{ private final boolean UP = true, private final boolean UP = true, DOWN = false; DOWN = false; private int mem_size, ca_size ,bl_size ,se_size,method ; private int mem_size, ca_size ,bl_size ,se_size,method ; private String memS_String ,caS_String ,blS_String ,seS_Str private String memS_String ,caS_String ,blS_String ,seS_Str private final int xBase = 10, private final int xBase = 10, yBase = 50, yBase = 50, unit_width = 20, unit_width = 20, unit_height = 30; unit_height = 30; private Font font = new Font("TimesRoman", Font.BOLD, 14); private Font font = new Font("TimesRoman", Font.BOLD, 14); private Font sub_font = new Font("TimesRoman", Font.BOLD, 1 private Font sub_font = new Font("TimesRoman", Font.BOLD, 1 FontMetrics fm; FontMetrics fm; Color subColor = Color.blue; Color subColor = Color.blue; Color back_gr = new Color( Color back_gr = new Color( (float)0.9444,(float)0.9444,(float)0.9444); (float)0.9444,(float)0.9444,(float)0.9444); private final Color fillColor= private final Color fillColor= new Color ((float)0.625,(float)0.8125,(float)0.8125); new Color ((float)0.625,(float)0.8125,(float)0.8125); private final Color drawColor = Color.black; private final Color drawColor = Color.black; //************************************************ //************************************************ /* /* AddressCanvas(int M, int C, int B, int T, int S, AddressCanvas(int M, int C, int B, int T, int S, String MStr, String CStr, String BStr, String String MStr, String CStr, String BStr, String super(); super(); */ */ public void init(){ public void init(){ SetAll( 18,12,6 ,2,2 , "256 KW", " 4 KW ", "64 W","4 bloc SetAll( 18,12,6 ,2,2 , "256 KW", " 4 KW ", "64 W","4 bloc // SetAll( M,C, B,T, S, MStr, CStr, BStr, SStr); // SetAll( M,C, B,T, S, MStr, CStr, BStr, SStr); setBackground(back_gr); setBackground(back_gr); setFont(font); setFont(font); } } //************************************************ //************************************************ public void SetAll(int M, int C, int B, int T, int S, public void SetAll(int M, int C, int B, int T, int S, String MStr, String CStr, String BStr, S String MStr, String CStr, String BStr, S mem_size = M; mem_size = M; ca_size = C; ca_size = C; bl_size = B; bl_size = B; se_size = S; se_size = S; method = T; method = T; memS_String = new String(MStr); memS_String = new String(MStr); caS_String = new String(CStr); caS_String = new String(CStr); blS_String = new String(BStr); blS_String = new String(BStr); seS_String = new String(SStr); seS_String = new String(SStr); } } //************************************************ //************************************************ public void paint( Graphics a){ public void paint( Graphics a){ //address area //address area int addr_width = mem_size * unit_width; int addr_width = mem_size * unit_width; a.setColor(fillColor); a.setColor(fillColor); a.fillRect (xBase, yBase, addr_width, unit_height); a.fillRect (xBase, yBase, addr_width, unit_height); a.setColor(drawColor); a.setColor(drawColor); a.drawRect(xBase, yBase, addr_width, unit_height); a.drawRect(xBase, yBase, addr_width, unit_height); //bits in address //bits in address for (int i = 1; i<=mem_size; i++){ for (int i = 1; i<=mem_size; i++){ a.drawLine(xBase+unit_width*i, yBase, a.drawLine(xBase+unit_width*i, yBase, xBase+unit_width*i, yBase+unit_height); xBase+unit_width*i, yBase+unit_height); } } //curly brace for total memory size //curly brace for total memory size Brace br = new Brace(a); Brace br = new Brace(a); fm = getFontMetrics(font); fm = getFontMetrics(font); br.DrawCurBr(fm, xBase, yBase+unit_height, addr_width, DO br.DrawCurBr(fm, xBase, yBase+unit_height, addr_width, DO mem_size + " bits"); mem_size + " bits"); //calculate and draw Offset //calculate and draw Offset int Offset_width = bl_size * unit_width; int Offset_width = bl_size * unit_width; int xOffset= xBase + addr_width- Offset_width; int xOffset= xBase + addr_width- Offset_width; a.drawLine(xOffset+1, yBase, xOffset+1, yBase+unit_height a.drawLine(xOffset+1, yBase, xOffset+1, yBase+unit_height br.DrawCurBr(fm, xOffset, yBase, Offset_width, UP, br.DrawCurBr(fm, xOffset, yBase, Offset_width, UP, bl_size + " bits"); bl_size + " bits"); a.drawString("Offset",xOffset+Offset_width/2-15, a.drawString("Offset",xOffset+Offset_width/2-15, yBase+unit_height/2+5); yBase+unit_height/2+5); //calculate and draw Index //calculate and draw Index boolean index_status = true; boolean index_status = true; int Index_width = 0 ; int Index_width = 0 ; int Index_bit_count = 0; int Index_bit_count = 0; int DIRECT = 1; int SET = 2; int DIRECT = 1; int SET = 2; if (method == DIRECT){ if (method == DIRECT){ //direct //direct Index_bit_count = ca_size - bl_size; Index_bit_count = ca_size - bl_size; Index_width = (ca_size - bl_size) * unit_width; Index_width = (ca_size - bl_size) * unit_width; } } else else if (method == SET){ if (method == SET){ //set associative //set associative Index_bit_count = ca_size - (se_size+bl_size); Index_bit_count = ca_size - (se_size+bl_size); Index_width = Index_bit_count * unit_width; Index_width = Index_bit_count * unit_width; } } else { else { //method is "fully associative" //method is "fully associative" index_status = false; index_status = false; } } if (index_status){ if (index_status){ int xIndex = xBase + addr_width - Index_width - Offset_ int xIndex = xBase + addr_width - Index_width - Offset_ a.drawLine(xIndex+1, yBase, xIndex+1, yBase+unit_height a.drawLine(xIndex+1, yBase, xIndex+1, yBase+unit_height br.DrawCurBr(fm, xIndex, yBase, Index_width, UP, br.DrawCurBr(fm, xIndex, yBase, Index_width, UP, Index_bit_count + " bits"); Index_bit_count + " bits"); a.drawString("Index",xIndex+Index_width/2-15,yBase+unit a.drawString("Index",xIndex+Index_width/2-15,yBase+unit } } //draw tag //draw tag int Tag_width = addr_width - Offset_width - Index_width; int Tag_width = addr_width - Offset_width - Index_width; int Tag_bit_count = mem_size - bl_size - Index_bit_count; int Tag_bit_count = mem_size - bl_size - Index_bit_count; if (Tag_bit_count <= 0) if (Tag_bit_count <= 0) a.setColor(Color.red); a.setColor(Color.red); br.DrawCurBr(fm, xBase, yBase, Tag_width, UP, br.DrawCurBr(fm, xBase, yBase, Tag_width, UP, Tag_bit_count + " bits"); Tag_bit_count + " bits"); a.drawString("Tag",xBase+Tag_width/2-5,yBase+unit_height/ a.drawString("Tag",xBase+Tag_width/2-5,yBase+unit_height/ //explanations under address //explanations under address int yTextBase = yBase+unit_height+50; int yTextBase = yBase+unit_height+50; int stepDown = 20; int stepDown = 20; //total //total a.drawString("Memory size = "+ memS_String + " = 2" , a.drawString("Memory size = "+ memS_String + " = 2" , xBase,yTextBase+stepDown); xBase,yTextBase+stepDown); a.setFont(sub_font); a.setFont(sub_font); Color prev_color = a.getColor(); Color prev_color = a.getColor(); a.setColor(subColor); a.setColor(subColor); a.drawString(mem_size+"", xBase+170,yTextBase+stepDown-7) a.drawString(mem_size+"", xBase+170,yTextBase+stepDown-7) a.setFont(font); a.setFont(font); a.setColor(prev_color); a.setColor(prev_color); //offset //offset a.drawString("Block size = "+ blS_String + " = 2" , a.drawString("Block size = "+ blS_String + " = 2" , xBase,yTextBase+stepDown*3); xBase,yTextBase+stepDown*3); //subscript!!! //subscript!!! a.setFont(sub_font); a.setFont(sub_font); prev_color = a.getColor(); prev_color = a.getColor(); a.setColor(subColor); a.setColor(subColor); a.drawString(bl_size+"", xBase+140,yTextBase+stepDown*3-7 a.drawString(bl_size+"", xBase+140,yTextBase+stepDown*3-7 a.setFont(font); a.setFont(font); a.setColor(prev_color); a.setColor(prev_color); //Index //Index if (index_status){ if (index_status){ if (method == SET){ if (method == SET){ a.drawString("Number of sets in cache = "+ a.drawString("Number of sets in cache = "+ "Cache Size / ( Set Size * Block Size ) "Cache Size / ( Set Size * Block Size ) xBase,yTextBase+stepDown*5); xBase,yTextBase+stepDown*5); a.drawString(" " + caS_String + " / a.drawString(" " + caS_String + " / seS_String + seS_String + " * "+ " * "+ blS_String + blS_String + " ) = 2 / ( 2 * 2 ) = 2", " ) = 2 / ( 2 * 2 ) = 2", xBase,yTextBase+stepDown*6); xBase,yTextBase+stepDown*6); //subscripts !!! //subscripts !!! a.setFont(sub_font); a.setFont(sub_font); prev_color = a.getColor(); prev_color = a.getColor(); a.drawString(ca_size+"", xBase+268,yTextBase+stepDown a.drawString(ca_size+"", xBase+268,yTextBase+stepDown a.drawString(se_size+"", xBase+305,yTextBase+stepDown a.drawString(se_size+"", xBase+305,yTextBase+stepDown a.drawString(bl_size+"", xBase+335,yTextBase+stepDown a.drawString(bl_size+"", xBase+335,yTextBase+stepDown a.setColor(subColor); a.setColor(subColor); a.drawString(Index_bit_count+"", xBase+375,yTextBase+ a.drawString(Index_bit_count+"", xBase+375,yTextBase+ a.setFont(font); a.setFont(font); a.setColor(prev_color); a.setColor(prev_color); }else{ }else{ a.drawString("Number of blocks in cache = "+ a.drawString("Number of blocks in cache = "+ "Cache Size / Block Size = ", "Cache Size / Block Size = ", xBase,yTextBase+stepDown*5); xBase,yTextBase+stepDown*5); a.drawString(" " + caS_String + " / a.drawString(" " + caS_String + " / blS_String + blS_String + " = 2 / 2 = 2", " = 2 / 2 = 2", xBase,yTextBase+stepDown*6); xBase,yTextBase+stepDown*6); //subscripts !!! //subscripts !!! a.setFont(sub_font); a.setFont(sub_font); prev_color = a.getColor(); prev_color = a.getColor(); a.drawString(ca_size+"", xBase+180,yTextBase+stepDow a.drawString(ca_size+"", xBase+180,yTextBase+stepDow a.drawString(bl_size+"", xBase+215,yTextBase+stepDow a.drawString(bl_size+"", xBase+215,yTextBase+stepDow a.setColor(subColor); a.setColor(subColor); a.drawString(Index_bit_count+"", xBase+245,yTextBase a.drawString(Index_bit_count+"", xBase+245,yTextBase a.setFont(font); a.setFont(font); a.setColor(prev_color); a.setColor(prev_color); } } } } //Tag //Tag a.drawString("Number of bits in Tag = "+mem_size+ a.drawString("Number of bits in Tag = "+mem_size+ " - "+Index_bit_count+" - "+ bl_size+ " - "+Index_bit_count+" - "+ bl_size+ " = ", " = ", xBase,yTextBase+stepDown*8); xBase,yTextBase+stepDown*8); prev_color = a.getColor(); prev_color = a.getColor(); a.setColor(subColor); a.setColor(subColor); a.drawString(Tag_bit_count+"", xBase+235,yTextBase+stepDo a.drawString(Tag_bit_count+"", xBase+235,yTextBase+stepDo a.setColor(prev_color); a.setColor(prev_color); }//paint }//paint } } //**************************** END ************************** //**************************** END ************************** import java.applet.Applet; import java.applet.Applet; import java.awt.*; import java.awt.*; //import Brace; | import Brace; public class ex21_applet extends Applet{ public class ex21_applet extends Applet{ int x = 30; int x = 30; int y = 40; int y = 40; int width = 300; int width = 300; int height= 250; int height= 250; int Offset_width = 100; int Offset_width = 100; int Index_width = 120; int Index_width = 120; Color fillColor = Color fillColor = new Color ((float)0.625,(float)0.8125,(float)0.8125); new Color ((float)0.625,(float)0.8125,(float)0.8125); Color drawColor = Color.black; Color drawColor = Color.black; Color bkgColor = new Color((float)0.9444,(float)0.9444,(flo Color bkgColor = new Color((float)0.9444,(float)0.9444,(flo Font font = new Font("TimesRoman", Font.BOLD, 14); Font font = new Font("TimesRoman", Font.BOLD, 14); FontMetrics fm; FontMetrics fm; //********************************************************* //********************************************************* public void init(){ public void init(){ setFont(font); setFont(font); fm = getFontMetrics(font); fm = getFontMetrics(font); setBackground (bkgColor); setBackground (bkgColor); resize(width, height); resize(width, height); } } //********************************************************* //********************************************************* public void paint(Graphics g){ public void paint(Graphics g){ //CPU //CPU g.setColor(Color.gray); g.setColor(Color.gray); g.fillRect(x,y,40,40); g.fillRect(x,y,40,40); g.setColor(Color.black); g.setColor(Color.black); g.drawRect(x,y,40,40); g.drawRect(x,y,40,40); g.drawString("CPU",x+(40-fm.stringWidth("CPU"))/2,y+20+5) g.drawString("CPU",x+(40-fm.stringWidth("CPU"))/2,y+20+5) //line between Cpu and Cache //line between Cpu and Cache g.drawLine(x+40, y+20, x+40+40, y+20); g.drawLine(x+40, y+20, x+40+40, y+20); //Cache //Cache g.setColor(Color.lightGray); g.setColor(Color.lightGray); g.fillRect(x+40+40,y,50,50); g.fillRect(x+40+40,y,50,50); g.setColor(Color.black); g.setColor(Color.black); g.drawRect(x+40+40, y, 50,50); g.drawRect(x+40+40, y, 50,50); g.drawString("Cache",x+40+40+(50-fm.stringWidth("Cache")) g.drawString("Cache",x+40+40+(50-fm.stringWidth("Cache")) //Bus //Bus g.setColor(Color.red); g.setColor(Color.red); g.drawLine(x+40+40+50, y+20,x+40+40+50+40,y+20); g.drawLine(x+40+40+50, y+20,x+40+40+50+40,y+20); g.drawLine(x+40+40+50, y+20+3,x+40+40+50+40,y+20+3); g.drawLine(x+40+40+50, y+20+3,x+40+40+50+40,y+20+3); g.drawString("Bus",x+40+40+50+(40-fm.stringWidth("Bus"))/ g.drawString("Bus",x+40+40+50+(40-fm.stringWidth("Bus"))/ //Memory //Memory g.setColor(fillColor); g.setColor(fillColor); g.fillRect(x+40+40+50+40,y, 60,60); g.fillRect(x+40+40+50+40,y, 60,60); g.setColor(Color.black); g.setColor(Color.black); g.drawRect(x+40+40+50+40,y, 60,60); g.drawRect(x+40+40+50+40,y, 60,60); g.drawString("Memory",x+40+40+50+40+(60-fm.stringWidth(" g.drawString("Memory",x+40+40+50+40+(60-fm.stringWidth(" y+20+5); y+20+5); } } } } //******************* end *********************************** //******************* end *********************************** import java.applet.Applet; import java.applet.Applet; import java.awt.*; import java.awt.*; public class HierarchyApplet extends Applet implements Runnab public class HierarchyApplet extends Applet implements Runnab HierarchyCanvas c = new HierarchyCanvas(); HierarchyCanvas c = new HierarchyCanvas(); Thread Animation_thread; Thread Animation_thread; //*********************************************************** //*********************************************************** public void init(){ public void init(){ c.resize(720,420); c.resize(720,420); add(c); add(c); } } //*********************************************************** //*********************************************************** public void start(){ public void start(){ Animation_thread = new Thread(this, "Animation_thread"); Animation_thread = new Thread(this, "Animation_thread"); Animation_thread.start(); Animation_thread.start(); } } //********************************************************** //********************************************************** public void run(){ public void run(){ Graphics g = c.getGraphics(); Graphics g = c.getGraphics(); int i = 0; int i = 0; int j = 0; int j = 0; while(true){ while(true){ //make reg-cpu line active //make reg-cpu line active g.setColor(Color.red); g.setColor(Color.red); g.drawLine(50,188, 150,188); g.drawLine(50,188, 150,188); g.drawLine(50,187, 150,187); g.drawLine(50,187, 150,187); //make other lines blinking with different frequency //make other lines blinking with different frequency if (i== 0){ if (i== 0){ g.setColor(Color.red); g.setColor(Color.red); i++; i++; }else{ }else{ g.setColor(new Color((float)0.4375,(float)0.625,(floa g.setColor(new Color((float)0.4375,(float)0.625,(floa i--; i--; } } g.drawLine(150,120, 250,120); g.drawLine(150,120, 250,120); g.drawLine(150,119, 250,119); g.drawLine(150,119, 250,119); if ((j%20) == 0) { if ((j%20) == 0) { //blink mem-cache bus //blink mem-cache bus g.drawLine(310,120, 400,120); g.drawLine(310,120, 400,120); g.drawLine(310,119, 400,119);//for thick line g.drawLine(310,119, 400,119);//for thick line } } if ((j%21) == 0) { if ((j%21) == 0) { //blink mem-cache bus //blink mem-cache bus g.drawLine(310,120, 400,120); g.drawLine(310,120, 400,120); g.drawLine(310,119, 400,119);//for thick line g.drawLine(310,119, 400,119);//for thick line } } if ((j%100) == 0){ if ((j%100) == 0){ //blink IO-bus //blink IO-bus g.drawLine(500,120, 570,120); g.drawLine(500,120, 570,120); g.drawLine(500,119, 570,119);//for thick line g.drawLine(500,119, 570,119);//for thick line g.drawLine(500,121, 570,121);//for thick line g.drawLine(500,121, 570,121);//for thick line } } if ((j%101) == 0){ if ((j%101) == 0){ //blink IO-bus //blink IO-bus g.drawLine(500,120, 570,120); g.drawLine(500,120, 570,120); g.drawLine(500,119, 570,119);//for thick line g.drawLine(500,119, 570,119);//for thick line g.drawLine(500,121, 570,121);//for thick line g.drawLine(500,121, 570,121);//for thick line } } j++; j++; if (j == 1000) j=0; if (j == 1000) j=0; try{ try{ Thread.sleep(100); Thread.sleep(100); }catch (InterruptedException e_int){ }catch (InterruptedException e_int){ showStatus(e_int.toString()); showStatus(e_int.toString()); } } }//while }//while }//run }//run //********************************************************* //********************************************************* public void stop(){ public void stop(){ if (Animation_thread != null) if (Animation_thread != null) Animation_thread.stop(); Animation_thread.stop(); } } } } //**************** end ************************************** //**************** end ************************************** import java.awt.*; import java.awt.*; class HierarchyCanvas extends Canvas{ class HierarchyCanvas extends Canvas{ private Font font; private Font font; //************************************************* //************************************************* HierarchyCanvas(){ HierarchyCanvas(){ super(); super(); setBackground(new Color((float)0.95,(float)0.95,(float)0. setBackground(new Color((float)0.95,(float)0.95,(float)0. font = new Font("TimesRoman", Font.BOLD, 16); font = new Font("TimesRoman", Font.BOLD, 16); setFont(font); setFont(font); } } //*************************************************** //*************************************************** public void paint( Graphics canvasH){ public void paint( Graphics canvasH){ //cpu //cpu canvasH.drawRect(50,85, 100,100); canvasH.drawRect(50,85, 100,100); canvasH.drawRect(49,84, 102,102);//for thick line canvasH.drawRect(49,84, 102,102);//for thick line canvasH.setColor(new Color((float)0.4375,(float)0.8125,(f canvasH.setColor(new Color((float)0.4375,(float)0.8125,(f canvasH.fillRect(50,85, 100,100); canvasH.fillRect(50,85, 100,100); //cpu label //cpu label canvasH.setColor(Color.black); canvasH.setColor(Color.black); canvasH.drawString("CPU", 80,135); canvasH.drawString("CPU", 80,135); //registers //registers canvasH.drawRect(50,190, 100,30); canvasH.drawRect(50,190, 100,30); canvasH.drawRect(49,189, 102,32);//for thick line canvasH.drawRect(49,189, 102,32);//for thick line canvasH.setColor(new Color((float)0.4375,(float)0.8125,(f canvasH.setColor(new Color((float)0.4375,(float)0.8125,(f canvasH.fillRect(50,190, 100,30); canvasH.fillRect(50,190, 100,30); //registers label //registers label canvasH.setColor(Color.black); canvasH.setColor(Color.black); canvasH.drawString("Register File", 57,210); canvasH.drawString("Register File", 57,210); //reg reference //reg reference canvasH.drawString("Register", 70,310); canvasH.drawString("Register", 70,310); canvasH.drawString("Reference", 67,325); canvasH.drawString("Reference", 67,325); canvasH.drawString("Cache", 260,310); canvasH.drawString("Cache", 260,310); canvasH.drawString("Reference", 250,325); canvasH.drawString("Reference", 250,325); canvasH.drawString("Main Memory", 400,310); canvasH.drawString("Main Memory", 400,310); canvasH.drawString("Reference", 415,325); canvasH.drawString("Reference", 415,325); canvasH.drawString("Disk", 590,295); canvasH.drawString("Disk", 590,295); canvasH.drawString("Memory", 585,310); canvasH.drawString("Memory", 585,310); canvasH.drawString("Reference", 580,325); canvasH.drawString("Reference", 580,325); canvasH.drawLine(50,335, 690,335); canvasH.drawLine(50,335, 690,335); canvasH.drawLine(50,375, 690,375); canvasH.drawLine(50,375, 690,375); canvasH.drawString("Size:", 10,350); canvasH.drawString("Size:", 10,350); canvasH.drawString("Speed:", 10,370); canvasH.drawString("Speed:", 10,370); canvasH.drawString("200 B", 90,350); canvasH.drawString("200 B", 90,350); canvasH.drawString("5 ns", 90,370); canvasH.drawString("5 ns", 90,370); canvasH.drawString("64 KB", 270,350); canvasH.drawString("64 KB", 270,350); canvasH.drawString("10 ns", 270,370); canvasH.drawString("10 ns", 270,370); canvasH.drawString("32 MB", 420,350); canvasH.drawString("32 MB", 420,350); canvasH.drawString("100 ns", 420,370); canvasH.drawString("100 ns", 420,370); canvasH.drawString("2 GB", 590,350); canvasH.drawString("2 GB", 590,350); canvasH.drawString("5 ms", 590,370); canvasH.drawString("5 ms", 590,370); //around //around canvasH.drawRect(230,60, 290,230); canvasH.drawRect(230,60, 290,230); canvasH.drawRect(229,59, 292,232); canvasH.drawRect(229,59, 292,232); canvasH.setColor(new Color((float)0.625,(float)0.8125,(fl canvasH.setColor(new Color((float)0.625,(float)0.8125,(fl canvasH.fillRect(230,60, 290,230); canvasH.fillRect(230,60, 290,230); //around label //around label canvasH.setColor(Color.black); canvasH.setColor(Color.black); canvasH.drawString("Memory", 350,50); canvasH.drawString("Memory", 350,50); //cache //cache canvasH.drawRect(250,100,60,120); canvasH.drawRect(250,100,60,120); canvasH.drawRect(249,99,62,122);//for thick line canvasH.drawRect(249,99,62,122);//for thick line canvasH.setColor(new Color((float)0.4375,(float)0.8125,(f canvasH.setColor(new Color((float)0.4375,(float)0.8125,(f canvasH.fillRect(250,100,60,120); canvasH.fillRect(250,100,60,120); //cache labels //cache labels canvasH.setColor(Color.black); canvasH.setColor(Color.black); canvasH.setFont(new Font("TimesRoman",Font.PLAIN, 16)); canvasH.setFont(new Font("TimesRoman",Font.PLAIN, 16)); canvasH.drawString("Upper level", 250,90); canvasH.drawString("Upper level", 250,90); canvasH.setFont(new Font("TimesRoman", Font.BOLD, 16)); canvasH.setFont(new Font("TimesRoman", Font.BOLD, 16)); canvasH.drawString("Cache", 260,160); canvasH.drawString("Cache", 260,160); //main mem //main mem canvasH.drawRect(400,100, 100,180); canvasH.drawRect(400,100, 100,180); canvasH.drawRect(399,99, 102,182);//for thick line canvasH.drawRect(399,99, 102,182);//for thick line canvasH.setColor(new Color((float)0.4375,(float)0.8125,(f canvasH.setColor(new Color((float)0.4375,(float)0.8125,(f canvasH.fillRect(400,100, 100,180); canvasH.fillRect(400,100, 100,180); //main mem label //main mem label canvasH.setColor(Color.black); canvasH.setColor(Color.black); canvasH.setFont(new Font("TimesRoman",Font.PLAIN, 16)); canvasH.setFont(new Font("TimesRoman",Font.PLAIN, 16)); canvasH.drawString("Lower level", 400,90); canvasH.drawString("Lower level", 400,90); canvasH.setFont(new Font("TimesRoman", Font.BOLD, 16)); canvasH.setFont(new Font("TimesRoman", Font.BOLD, 16)); canvasH.drawString("Main", 425,160); canvasH.drawString("Main", 425,160); canvasH.drawString("Memory", 415,180); canvasH.drawString("Memory", 415,180); // IO devices // IO devices canvasH.drawRect(570,100, 110,120); canvasH.drawRect(570,100, 110,120); canvasH.drawRect(569,99, 112,122); canvasH.drawRect(569,99, 112,122); canvasH.setColor(new Color((float)0.4375,(float)0.8125,(f canvasH.setColor(new Color((float)0.4375,(float)0.8125,(f canvasH.fillRect(570,100, 110,120); canvasH.fillRect(570,100, 110,120); //IO label //IO label canvasH.setColor(Color.black); canvasH.setColor(Color.black); //canvasH.setFont(new Font("TimesRoman",Font.PLAIN, 16)); //canvasH.setFont(new Font("TimesRoman",Font.PLAIN, 16)); canvasH.drawString("IO", 615,160); canvasH.drawString("IO", 615,160); canvasH.drawString("Devices", 605,180); canvasH.drawString("Devices", 605,180); //line IO - mem //line IO - mem canvasH.setFont(new Font("TimesRoman",Font.PLAIN, 14)); canvasH.setFont(new Font("TimesRoman",Font.PLAIN, 14)); canvasH.drawString("IO bus", 525,115); canvasH.drawString("IO bus", 525,115); canvasH.drawLine(500,120, 570,120); canvasH.drawLine(500,120, 570,120); canvasH.drawLine(500,119, 570,119);//for thick line canvasH.drawLine(500,119, 570,119);//for thick line canvasH.drawLine(500,121, 570,121);//for thick line canvasH.drawLine(500,121, 570,121);//for thick line //line cpu-cache //line cpu-cache canvasH.setFont(new Font("TimesRoman",Font.PLAIN, 14)); canvasH.setFont(new Font("TimesRoman",Font.PLAIN, 14)); canvasH.drawLine(150,120, 250,120); canvasH.drawLine(150,120, 250,120); canvasH.drawLine(150,119, 250,119);//for thick line canvasH.drawLine(150,119, 250,119);//for thick line canvasH.drawLine(150,121, 250,121);//for thick line canvasH.drawLine(150,121, 250,121);//for thick line //line cache-main mem //line cache-main mem canvasH.setFont(new Font("TimesRoman",Font.PLAIN, 14)); canvasH.setFont(new Font("TimesRoman",Font.PLAIN, 14)); canvasH.drawString("bus", 350,115); canvasH.drawString("bus", 350,115); canvasH.drawLine(310,120, 400,120); canvasH.drawLine(310,120, 400,120); canvasH.drawLine(310,119, 400,119);//for thick line canvasH.drawLine(310,119, 400,119);//for thick line canvasH.drawLine(310,121, 400,121);//for thick line canvasH.drawLine(310,121, 400,121);//for thick line //line cpu-reg //line cpu-reg canvasH.drawLine(100,205, 100,210); canvasH.drawLine(100,205, 100,210); } } } } //**************** end ************************************* //**************** end ************************************* import java.awt.*; import java.awt.*; import java.util.Vector; import java.util.Vector; import java.util.StringTokenizer; import java.util.StringTokenizer; //import Rectangle; | import Rectangle; class InterCanvas extends Canvas implements Runnable{ class InterCanvas extends Canvas implements Runnable{ private Font font; private Font font; private FontMetrics fm; private FontMetrics fm; private Color groundfillColor = private Color groundfillColor = new Color((float)0.4375,(float)0.8125,(float)0.8125); new Color((float)0.4375,(float)0.8125,(float)0.8125); private Color fillColor = private Color fillColor = new Color((float)0.625,(float)0.8125,(float)0.8125); new Color((float)0.625,(float)0.8125,(float)0.8125); private Color backgr = private Color backgr = new Color((float)0.86,(float)0.86,(float)0.86); new Color((float)0.86,(float)0.86,(float)0.86); public Vector inter_vec = new Vector(); //holds rectangles public Vector inter_vec = new Vector(); //holds rectangles public final int UNDEF = -1, //constants to define public final int UNDEF = -1, //constants to define R_HIT = 0, //the mode or rectangle R_HIT = 0, //the mode or rectangle R_MISS_TH = 1, //purpose R_MISS_TH = 1, //purpose R_MISS_NoTH = 2, R_MISS_NoTH = 2, W_HIT_TH= 3, W_HIT_TH= 3, W_HIT_BACK = 4, W_HIT_BACK = 4, W_MISS_ALLOC = 5, W_MISS_ALLOC = 5, W_MISS_NoALLOC = 6; W_MISS_NoALLOC = 6; public int mode = UNDEF; //mode in which to run animation public int mode = UNDEF; //mode in which to run animation private final boolean SOLID = true, private final boolean SOLID = true, DIM = false; DIM = false; private final int CPU = 30, private final int CPU = 30, CACHE =10, CACHE =10, MEMORY = 20; MEMORY = 20; int my_width = 600; //width of the canvas int my_width = 600; //width of the canvas int my_height = 400; //height of the canvas int my_height = 400; //height of the canvas int x_write_start = 300; //base for "write" scheme int x_write_start = 300; //base for "write" scheme int x_read_start = 10; //base for "read" scheme int x_read_start = 10; //base for "read" scheme //base for CPU box //base for CPU box int xb = 50; //x base for cpu-memory part int xb = 50; //x base for cpu-memory part int yb = 200; //y base int yb = 200; //y base int cpu_width = 100; //cpu box width int cpu_width = 100; //cpu box width int cpu_height = 100; //cpu box height int cpu_height = 100; //cpu box height int distance = 50; //distance between boxes int distance = 50; //distance between boxes //base for cache box //base for cache box int x_cache = xb + cpu_width + distance; int x_cache = xb + cpu_width + distance; int y_cache = yb; int y_cache = yb; int cache_width = 100 ,cache_height = 120; int cache_width = 100 ,cache_height = 120; //base for main memory box //base for main memory box int x_mem = x_cache + cache_width + distance; int x_mem = x_cache + cache_width + distance; int y_mem = yb; int y_mem = yb; int mem_width = 100 ,mem_height = 150; int mem_width = 100 ,mem_height = 150; //block found in cache //block found in cache int bl_width = cache_width-20; int bl_width = cache_width-20; int bl_height = 20; int bl_height = 20; int x_read_hit_bl=x_cache+10; int x_read_hit_bl=x_cache+10; int y_read_hit_bl = y_cache+cache_height-bl_height-20; int y_read_hit_bl = y_cache+cache_height-bl_height-20; //block found in memory //block found in memory int x_read_miss_bl=x_mem+10; int x_read_miss_bl=x_mem+10; int y_read_miss_bl = y_mem+mem_height-bl_height-20; int y_read_miss_bl = y_mem+mem_height-bl_height-20; //********************************************************* //********************************************************* InterCanvas(){ InterCanvas(){ super(); super(); setBackground(backgr); setBackground(backgr); font = new Font("TimesRoman", Font.BOLD, 14); font = new Font("TimesRoman", Font.BOLD, 14); fm = getFontMetrics(font); fm = getFontMetrics(font); setFont(font); setFont(font); } } //********************************************************* //********************************************************* public synchronized void paint( Graphics g){ public synchronized void paint( Graphics g){ int strWidth = fm.stringWidth("WRITE"); int strWidth = fm.stringWidth("WRITE"); int x_median1 = x_write_start + int x_median1 = x_write_start + (my_width - x_write_start)/2; (my_width - x_write_start)/2; int x_strPos = x_median1 - strWidth/2; int x_strPos = x_median1 - strWidth/2; int y_strPos = 30; int y_strPos = 30; int line_down = 10; int line_down = 10; int y_line_down = y_strPos+5+line_down; int y_line_down = y_strPos+5+line_down; g.drawString("WRITE", x_strPos, y_strPos); g.drawString("WRITE", x_strPos, y_strPos); g.drawLine(x_median1,y_strPos+5, g.drawLine(x_median1,y_strPos+5, x_median1,y_line_down); x_median1,y_line_down); int x_median2 = x_write_start + (x_median1 - x_write_star int x_median2 = x_write_start + (x_median1 - x_write_star int x_median2_end = x_median2+x_median1-x_write_start; int x_median2_end = x_median2+x_median1-x_write_start; //horis line //horis line g.drawLine(x_median2, y_line_down, g.drawLine(x_median2, y_line_down, x_median2_end , y_line_down); x_median2_end , y_line_down); //vert lines //vert lines g.drawLine(x_median2,y_line_down,x_median2,y_line_down+li g.drawLine(x_median2,y_line_down,x_median2,y_line_down+li g.drawLine(x_median2_end ,y_line_down, g.drawLine(x_median2_end ,y_line_down, x_median2_end ,y_line_down+line_down); x_median2_end ,y_line_down+line_down); //hit , miss //hit , miss strWidth = fm.stringWidth("hit"); strWidth = fm.stringWidth("hit"); y_strPos = y_line_down+line_down+15; y_strPos = y_line_down+line_down+15; y_line_down = y_strPos+5+line_down; y_line_down = y_strPos+5+line_down; g.drawString("hit", x_median2-strWidth/2,y_strPos); g.drawString("hit", x_median2-strWidth/2,y_strPos); strWidth = fm.stringWidth("miss"); strWidth = fm.stringWidth("miss"); g.drawString("miss", x_median2_end-strWidth/2, g.drawString("miss", x_median2_end-strWidth/2, y_strPos); y_strPos); int box_width = x_median2 - x_write_start; int box_width = x_median2 - x_write_start; //~~~~~~~~~~~~~~~~~~~~~ //~~~~~~~~~~~~~~~~~~~~~ g.drawLine(x_median2,y_strPos+5, g.drawLine(x_median2,y_strPos+5, x_median2,y_line_down); x_median2,y_line_down); int x_median3 = x_write_start + (x_median2 - x_write_star int x_median3 = x_write_start + (x_median2 - x_write_star int x_median3_end = x_median3+x_median2-x_write_start; int x_median3_end = x_median3+x_median2-x_write_start; //horis line //horis line g.drawLine(x_median3, y_line_down, g.drawLine(x_median3, y_line_down, x_median3_end , y_line_down); x_median3_end , y_line_down); //vert lines //vert lines g.drawLine(x_median3,y_line_down,x_median3,y_line_down+li g.drawLine(x_median3,y_line_down,x_median3,y_line_down+li g.drawLine(x_median3_end ,y_line_down, g.drawLine(x_median3_end ,y_line_down, x_median3_end ,y_line_down+line_down); x_median3_end ,y_line_down+line_down); //boxes for hit //boxes for hit DrawBox(x_median3-(box_width-10)/2,y_line_down+line_down, DrawBox(x_median3-(box_width-10)/2,y_line_down+line_down, box_width-10, box_width - 10, box_width-10, box_width - 10, TranslateStr(W_HIT_TH), Color.white); TranslateStr(W_HIT_TH), Color.white); DrawBox(x_median3_end-(box_width-10)/2,y_line_down+line_d DrawBox(x_median3_end-(box_width-10)/2,y_line_down+line_d box_width-10, box_width - 10, box_width-10, box_width - 10, TranslateStr(W_HIT_BACK), Color.white); TranslateStr(W_HIT_BACK), Color.white); //create an Rectangle Object //create an Rectangle Object Rectangle r = new Rectangle(x_median3-(box_width-10)/2, Rectangle r = new Rectangle(x_median3-(box_width-10)/2, y_line_down+line_down+box_wid y_line_down+line_down+box_wid box_width-10, box_width - 10, box_width-10, box_width - 10, inter_vec.addElement(r); inter_vec.addElement(r); //create an Rectangle Object //create an Rectangle Object r = new Rectangle(x_median3_end-(box_width-10)/2, r = new Rectangle(x_median3_end-(box_width-10)/2, y_line_down+line_down+box_width-10, y_line_down+line_down+box_width-10, box_width-10, box_width - 10, W_HIT_BAC box_width-10, box_width - 10, W_HIT_BAC inter_vec.addElement(r); inter_vec.addElement(r); //~~~~~~~~~~~~~~~~~ //~~~~~~~~~~~~~~~~~ g.drawLine(x_median2_end,y_strPos+5, g.drawLine(x_median2_end,y_strPos+5, x_median2_end,y_line_down); x_median2_end,y_line_down); int x_median4 = x_median1 + (x_median2_end - x_median1)/2 int x_median4 = x_median1 + (x_median2_end - x_median1)/2 int x_median4_end = x_median4+x_median2_end - x_median1; int x_median4_end = x_median4+x_median2_end - x_median1; //horis line //horis line g.drawLine(x_median4, y_line_down, g.drawLine(x_median4, y_line_down, x_median4_end , y_line_down); x_median4_end , y_line_down); //vert lines //vert lines g.drawLine(x_median4,y_line_down,x_median4,y_line_down+li g.drawLine(x_median4,y_line_down,x_median4,y_line_down+li g.drawLine(x_median4_end ,y_line_down, g.drawLine(x_median4_end ,y_line_down, x_median4_end ,y_line_down+line_down); x_median4_end ,y_line_down+line_down); //boxes for miss //boxes for miss DrawBox(x_median4-(box_width-10)/2,y_line_down+line_down, DrawBox(x_median4-(box_width-10)/2,y_line_down+line_down, box_width-10, box_width - 10, box_width-10, box_width - 10, TranslateStr(W_MISS_ALLOC), Color.white); TranslateStr(W_MISS_ALLOC), Color.white); DrawBox(x_median4_end-(box_width-10)/2,y_line_down+line_d DrawBox(x_median4_end-(box_width-10)/2,y_line_down+line_d box_width-10, box_width - 10, box_width-10, box_width - 10, TranslateStr(W_MISS_NoALLOC), Color.white); TranslateStr(W_MISS_NoALLOC), Color.white); //create an Rectangle Object //create an Rectangle Object r = new Rectangle(x_median4-(box_width-10)/2, r = new Rectangle(x_median4-(box_width-10)/2, y_line_down+line_down+box_width-10, y_line_down+line_down+box_width-10, box_width-10, box_width - 10, W_MISS_AL box_width-10, box_width - 10, W_MISS_AL inter_vec.addElement(r); inter_vec.addElement(r); //create an Rectangle Object //create an Rectangle Object r = new Rectangle(x_median4_end-(box_width-10)/2, r = new Rectangle(x_median4_end-(box_width-10)/2, y_line_down+line_down+box_width-10, y_line_down+line_down+box_width-10, box_width-10, box_width - 10, W_MISS_No box_width-10, box_width - 10, W_MISS_No inter_vec.addElement(r); inter_vec.addElement(r); //~~~~~~~~~~~~~~~~~~~~~ //~~~~~~~~~~~~~~~~~~~~~ strWidth = fm.stringWidth("READ"); strWidth = fm.stringWidth("READ"); int xr_median1 = x_read_start+(x_write_start - x_read_st int xr_median1 = x_read_start+(x_write_start - x_read_st x_strPos = xr_median1 - strWidth/2; x_strPos = xr_median1 - strWidth/2; y_strPos = 30; y_strPos = 30; line_down = 10; line_down = 10; y_line_down = y_strPos+5+line_down; y_line_down = y_strPos+5+line_down; g.drawString("READ", x_strPos, y_strPos); g.drawString("READ", x_strPos, y_strPos); g.drawLine(xr_median1,y_strPos+5, g.drawLine(xr_median1,y_strPos+5, xr_median1,y_line_down); xr_median1,y_line_down); int xr_median2 = x_read_start + (xr_median1 - x_read_star int xr_median2 = x_read_start + (xr_median1 - x_read_star int xr_median2_end = xr_median2+xr_median1-x_read_start; int xr_median2_end = xr_median2+xr_median1-x_read_start; //horis line //horis line g.drawLine(xr_median2, y_line_down, g.drawLine(xr_median2, y_line_down, xr_median2_end , y_line_down); xr_median2_end , y_line_down); //vert lines //vert lines g.drawLine(xr_median2,y_line_down,xr_median2,y_line_down+ g.drawLine(xr_median2,y_line_down,xr_median2,y_line_down+ g.drawLine(xr_median2_end ,y_line_down, g.drawLine(xr_median2_end ,y_line_down, xr_median2_end ,y_line_down+line_down); xr_median2_end ,y_line_down+line_down); //hit , miss //hit , miss strWidth = fm.stringWidth("hit"); strWidth = fm.stringWidth("hit"); y_strPos = y_line_down+line_down+15; y_strPos = y_line_down+line_down+15; y_line_down = y_strPos+5+line_down; y_line_down = y_strPos+5+line_down; g.drawString("hit", xr_median2-strWidth/2,y_strPos); g.drawString("hit", xr_median2-strWidth/2,y_strPos); strWidth = fm.stringWidth("miss"); strWidth = fm.stringWidth("miss"); g.drawString("miss", xr_median2_end-strWidth/2, g.drawString("miss", xr_median2_end-strWidth/2, y_strPos); y_strPos); int r_box_width = xr_median2 - x_read_start; int r_box_width = xr_median2 - x_read_start; //~~~~~~~~~~~~~~~~~~~~~ //~~~~~~~~~~~~~~~~~~~~~ g.drawLine(xr_median2,y_strPos+5, g.drawLine(xr_median2,y_strPos+5, xr_median2,y_line_down+line_down); xr_median2,y_line_down+line_down); //box for hit //box for hit DrawBox(xr_median2-(r_box_width-10)/2,y_line_down+line_do DrawBox(xr_median2-(r_box_width-10)/2,y_line_down+line_do r_box_width-10, box_width - 10, r_box_width-10, box_width - 10, TranslateStr(R_HIT), Color.white); TranslateStr(R_HIT), Color.white); //create an Rectangle Object //create an Rectangle Object r = new Rectangle(xr_median2-(r_box_width-10)/2, r = new Rectangle(xr_median2-(r_box_width-10)/2, y_line_down+line_down+box_width-10, y_line_down+line_down+box_width-10, r_box_width-10, box_width - 10, R_HIT); r_box_width-10, box_width - 10, R_HIT); inter_vec.addElement(r); inter_vec.addElement(r); //~~~~~~~~~~~~~~~~~ //~~~~~~~~~~~~~~~~~ g.drawLine(xr_median2_end,y_strPos+5, g.drawLine(xr_median2_end,y_strPos+5, xr_median2_end,y_line_down); xr_median2_end,y_line_down); int xr_median4 = xr_median1 + (xr_median2_end - xr_median int xr_median4 = xr_median1 + (xr_median2_end - xr_median int xr_median4_end = xr_median4+xr_median2_end - xr_media int xr_median4_end = xr_median4+xr_median2_end - xr_media //horis line //horis line g.drawLine(xr_median4, y_line_down, g.drawLine(xr_median4, y_line_down, xr_median4_end , y_line_down); xr_median4_end , y_line_down); //vert lines //vert lines g.drawLine(xr_median4,y_line_down,xr_median4,y_line_down+ g.drawLine(xr_median4,y_line_down,xr_median4,y_line_down+ g.drawLine(xr_median4_end ,y_line_down, g.drawLine(xr_median4_end ,y_line_down, xr_median4_end ,y_line_down+line_down); xr_median4_end ,y_line_down+line_down); //boxes for miss //boxes for miss DrawBox(xr_median4-(r_box_width-10)/2,y_line_down+line_do DrawBox(xr_median4-(r_box_width-10)/2,y_line_down+line_do r_box_width-10, box_width - 10, r_box_width-10, box_width - 10, TranslateStr(R_MISS_TH), Color.white); TranslateStr(R_MISS_TH), Color.white); DrawBox(xr_median4_end-(r_box_width-10)/2,y_line_down+lin DrawBox(xr_median4_end-(r_box_width-10)/2,y_line_down+lin r_box_width-10, box_width - 10, r_box_width-10, box_width - 10, TranslateStr(R_MISS_NoTH), Color.white); TranslateStr(R_MISS_NoTH), Color.white); //create an Rectangle Object //create an Rectangle Object r = new Rectangle(xr_median4-(r_box_width-10)/2, r = new Rectangle(xr_median4-(r_box_width-10)/2, y_line_down+line_down+box_width-10, y_line_down+line_down+box_width-10, r_box_width-10, box_width - 10, R_MISS_ r_box_width-10, box_width - 10, R_MISS_ inter_vec.addElement(r); inter_vec.addElement(r); //create an Rectangle Object //create an Rectangle Object r = new Rectangle(xr_median4_end-(r_box_width-10)/2, r = new Rectangle(xr_median4_end-(r_box_width-10)/2, y_line_down+line_down+box_width-10, y_line_down+line_down+box_width-10, r_box_width-10, box_width - 10, R_MISS_ r_box_width-10, box_width - 10, R_MISS_ inter_vec.addElement(r); inter_vec.addElement(r); DrawMemoryStructure(); DrawMemoryStructure(); } } //*************************************************** //*************************************************** public void update(Graphics g){ public void update(Graphics g){ paint(g); paint(g); } } //*************************************************** //*************************************************** public void DrawMemoryStructure(){ public void DrawMemoryStructure(){ Graphics g = getGraphics(); Graphics g = getGraphics(); //cpu //cpu DrawCPU(); DrawCPU(); //cache //cache DrawCache(); DrawCache(); //main mem //main mem DrawMemory(); DrawMemory(); //line cpu-cache //line cpu-cache g.drawLine(xb+cpu_width,yb+30, x_cache,yb+30); g.drawLine(xb+cpu_width,yb+30, x_cache,yb+30); g.drawLine(xb+cpu_width,yb+30-1, x_cache,yb+30-1);//for t g.drawLine(xb+cpu_width,yb+30-1, x_cache,yb+30-1);//for t g.drawLine(xb+cpu_width,yb+30+1, x_cache,yb+30+1);//for t g.drawLine(xb+cpu_width,yb+30+1, x_cache,yb+30+1);//for t //line cache-main mem //line cache-main mem g.drawLine(x_cache+cache_width,yb+30,x_mem,yb+30); g.drawLine(x_cache+cache_width,yb+30,x_mem,yb+30); g.drawLine(x_cache+cache_width,yb+30-1,x_mem,yb+30-1);//f g.drawLine(x_cache+cache_width,yb+30-1,x_mem,yb+30-1);//f g.drawLine(x_cache+cache_width,yb+30+1,x_mem,yb+30+1);//f g.drawLine(x_cache+cache_width,yb+30+1,x_mem,yb+30+1);//f } } //************************************************* //************************************************* public void run(){ public void run(){ switch(mode){ switch(mode){ case R_HIT: case R_HIT: ReadHitAnim(); ReadHitAnim(); break; break; case R_MISS_TH: case R_MISS_TH: ReadMissThroughAnim(); ReadMissThroughAnim(); break; break; case R_MISS_NoTH: case R_MISS_NoTH: ReadMissNoThroughAnim(); ReadMissNoThroughAnim(); break; break; case W_HIT_TH: case W_HIT_TH: WriteHitThroughAnim(); WriteHitThroughAnim(); break; break; case W_HIT_BACK: case W_HIT_BACK: WriteHitBackAnim(); WriteHitBackAnim(); break; break; case W_MISS_ALLOC: case W_MISS_ALLOC: WriteMissAllocAnim(); WriteMissAllocAnim(); break; break; case W_MISS_NoALLOC: case W_MISS_NoALLOC: WriteMissNoAllocAnim(); WriteMissNoAllocAnim(); break; break; default: default: System.out.println("Error: mode " + mode + " is not rec System.out.println("Error: mode " + mode + " is not rec } } } } //************************************************* //************************************************* private void ReadHitAnim(){ private void ReadHitAnim(){ System.out.println("ReadHitAnim running"); System.out.println("ReadHitAnim running"); Search(CACHE); Search(CACHE); Found(CACHE,SOLID,"found"); Found(CACHE,SOLID,"found"); Drag(x_read_hit_bl, y_read_hit_bl, Drag(x_read_hit_bl, y_read_hit_bl, xb+10, yb+cpu_height-30); xb+10, yb+cpu_height-30); Found(CACHE,DIM,"found"); Found(CACHE,DIM,"found"); } } //************************************************* //************************************************* private void ReadMissThroughAnim(){ private void ReadMissThroughAnim(){ System.out.println("ReadMissThroughAnim running"); System.out.println("ReadMissThroughAnim running"); Search(CACHE); Search(CACHE); Found(CACHE,SOLID,"not found"); Found(CACHE,SOLID,"not found"); Search(MEMORY); Search(MEMORY); Found(MEMORY,SOLID,"found"); Found(MEMORY,SOLID,"found"); Drag(x_read_miss_bl, y_read_miss_bl, Drag(x_read_miss_bl, y_read_miss_bl, xb+10, yb+cpu_height-30); xb+10, yb+cpu_height-30); Found(MEMORY,DIM,"found"); Found(MEMORY,DIM,"found"); Found(CACHE,DIM,"transfered"); Found(CACHE,DIM,"transfered"); //line from memory to CPU direct //line from memory to CPU direct Graphics g = getGraphics(); Graphics g = getGraphics(); g.drawLine(x_mem, y_mem+mem_height -10, g.drawLine(x_mem, y_mem+mem_height -10, xb + cpu_width/2, y_mem+mem_height -10); xb + cpu_width/2, y_mem+mem_height -10); g.drawLine(xb + cpu_width/2, y_mem+mem_height -10, g.drawLine(xb + cpu_width/2, y_mem+mem_height -10, xb + cpu_width/2, yb+cpu_height); xb + cpu_width/2, yb+cpu_height); //arrow //arrow g.drawLine(xb + cpu_width/2-3, yb+cpu_height+7, g.drawLine(xb + cpu_width/2-3, yb+cpu_height+7, xb + cpu_width/2, yb+cpu_height); xb + cpu_width/2, yb+cpu_height); g.drawLine(xb + cpu_width/2+3, yb+cpu_height+7, g.drawLine(xb + cpu_width/2+3, yb+cpu_height+7, xb + cpu_width/2, yb+cpu_height); xb + cpu_width/2, yb+cpu_height); } } //************************************************* //************************************************* private void ReadMissNoThroughAnim(){ private void ReadMissNoThroughAnim(){ System.out.println("ReadMissNoThroughAnim running"); System.out.println("ReadMissNoThroughAnim running"); Search(CACHE); Search(CACHE); Found(CACHE,SOLID,"not found"); Found(CACHE,SOLID,"not found"); Search(MEMORY); Search(MEMORY); Found(MEMORY,SOLID,"found"); Found(MEMORY,SOLID,"found"); Drag(x_read_miss_bl, y_read_miss_bl, Drag(x_read_miss_bl, y_read_miss_bl, x_read_hit_bl, y_read_hit_bl); x_read_hit_bl, y_read_hit_bl); Found(MEMORY,DIM,"found"); Found(MEMORY,DIM,"found"); Drag(x_read_hit_bl, y_read_hit_bl, Drag(x_read_hit_bl, y_read_hit_bl, xb+10, yb+cpu_height-30); xb+10, yb+cpu_height-30); Found(MEMORY,DIM,"found"); Found(MEMORY,DIM,"found"); Found(CACHE,DIM,"stored"); Found(CACHE,DIM,"stored"); } } //************************************************* //************************************************* private void WriteHitThroughAnim(){ private void WriteHitThroughAnim(){ System.out.println("WriteHitThroughAnim running"); System.out.println("WriteHitThroughAnim running"); Found(CPU,SOLID,"to write"); Found(CPU,SOLID,"to write"); Search(CACHE); Search(CACHE); Found(CACHE,SOLID,"found"); Found(CACHE,SOLID,"found"); Drag(xb+10, yb+cpu_height-30, Drag(xb+10, yb+cpu_height-30, x_read_hit_bl, y_read_hit_bl ); x_read_hit_bl, y_read_hit_bl ); Found(CACHE,DIM,"updated"); Found(CACHE,DIM,"updated"); Drag(x_read_hit_bl, y_read_hit_bl, Drag(x_read_hit_bl, y_read_hit_bl, x_read_miss_bl, y_read_miss_bl ); x_read_miss_bl, y_read_miss_bl ); Found(CPU,DIM,"to write"); Found(CPU,DIM,"to write"); Found(CACHE,DIM,"updated"); Found(CACHE,DIM,"updated"); Found(MEMORY,SOLID,"updated"); Found(MEMORY,SOLID,"updated"); } } //************************************************* //************************************************* private void WriteHitBackAnim(){ private void WriteHitBackAnim(){ System.out.println("WriteHitBackAnim running"); System.out.println("WriteHitBackAnim running"); Found(CPU,SOLID,"to write"); Found(CPU,SOLID,"to write"); Search(CACHE); Search(CACHE); Found(CACHE,SOLID,"found"); Found(CACHE,SOLID,"found"); Drag(xb+10, yb+cpu_height-30, Drag(xb+10, yb+cpu_height-30, x_read_hit_bl, y_read_hit_bl ); x_read_hit_bl, y_read_hit_bl ); Found(CPU,DIM,"to write"); Found(CPU,DIM,"to write"); Found(CACHE,SOLID,"dirty"); Found(CACHE,SOLID,"dirty"); } } //************************************************* //************************************************* private void WriteMissAllocAnim(){ private void WriteMissAllocAnim(){ System.out.println("WriteMissAllocAnim running"); System.out.println("WriteMissAllocAnim running"); Found(CPU,SOLID,"to write"); Found(CPU,SOLID,"to write"); Search(CACHE); Search(CACHE); Found(CACHE,SOLID,"not found"); Found(CACHE,SOLID,"not found"); Search(MEMORY); Search(MEMORY); Found(MEMORY,SOLID,"found"); Found(MEMORY,SOLID,"found"); Drag(x_read_miss_bl, y_read_miss_bl, Drag(x_read_miss_bl, y_read_miss_bl, x_read_hit_bl, y_read_hit_bl); x_read_hit_bl, y_read_hit_bl); Found(CPU,DIM,"to write"); Found(CPU,DIM,"to write"); Found(CACHE,DIM,"transfered"); Found(CACHE,DIM,"transfered"); Found(MEMORY,DIM,"found"); Found(MEMORY,DIM,"found"); Drag(xb+10, yb+cpu_height-30, Drag(xb+10, yb+cpu_height-30, x_read_hit_bl, y_read_hit_bl); x_read_hit_bl, y_read_hit_bl); Found(MEMORY,DIM,"updated"); Found(MEMORY,DIM,"updated"); Found(CPU,DIM,"to write"); Found(CPU,DIM,"to write"); Found(CACHE,SOLID,"updated"); Found(CACHE,SOLID,"updated"); } } //************************************************* //************************************************* private void WriteMissNoAllocAnim(){ private void WriteMissNoAllocAnim(){ System.out.println("WriteMissNoAllocAnim running"); System.out.println("WriteMissNoAllocAnim running"); Found(CPU,SOLID,"to write"); Found(CPU,SOLID,"to write"); Search(CACHE); Search(CACHE); Found(CACHE,SOLID,"not found"); Found(CACHE,SOLID,"not found"); Search(MEMORY); Search(MEMORY); Found(MEMORY,SOLID,"found"); Found(MEMORY,SOLID,"found"); Drag(xb+10, yb+cpu_height-30, Drag(xb+10, yb+cpu_height-30, x_read_miss_bl, y_read_miss_bl); x_read_miss_bl, y_read_miss_bl); Found(MEMORY,SOLID,"updated"); Found(MEMORY,SOLID,"updated"); Found(CPU,DIM,"to write"); Found(CPU,DIM,"to write"); Found(CACHE,DIM,"not found"); Found(CACHE,DIM,"not found"); } } //************************************************* //************************************************* private void Search(int box){ private void Search(int box){ int x=0, y=0,h=0,w=0; int x=0, y=0,h=0,w=0; int desh = 5; int desh = 5; Graphics g = getGraphics(); Graphics g = getGraphics(); if (box == CACHE) { if (box == CACHE) { x=x_cache; x=x_cache; y=y_cache; y=y_cache; h= cache_height; h= cache_height; w = cache_width; w = cache_width; }else if (box == MEMORY){ }else if (box == MEMORY){ x= x_mem; x= x_mem; y= y_mem; y= y_mem; h=mem_height; h=mem_height; w = mem_width; w = mem_width; } } Color prev = g.getColor(); Color prev = g.getColor(); g.drawString("search",x+15, y+15); g.drawString("search",x+15, y+15); try{ Thread.sleep(200);}catch(InterruptedException e){} try{ Thread.sleep(200);}catch(InterruptedException e){} g.setColor(Color.red); g.setColor(Color.red); for (int j = 0; j<10; j++){ for (int j = 0; j<10; j++){ int y_temp = y+h/10; int y_temp = y+h/10; for (int k = 1; k<(h/10); k++){ for (int k = 1; k<(h/10); k++){ int x_temp = x; int x_temp = x; for (int i = 0; i x) && if ( (X_coord < (x + w)) && (X_coord > x) && (Y_coord > (y - h)) && (Y_coord < y)) (Y_coord > (y - h)) && (Y_coord < y)) return true; return true; return false; return false; } } } } //****************** end ********************************** //****************** end ********************************** import java.awt.*; | import java.awt.*; import java.util.*; | import java.util.*; import java.awt.Dimension; | import java.awt.Dimension; | class ReplaceCanvas extends Canvas implements Runnable{ | class ReplaceCanvas extends Canvas implements Runnable{ | private Font font; | private Font font; private FontMetrics font_m; | private FontMetrics font_m; | Color back_gr = new Color((float)0.9444,(float)0.9444,(floa | Color back_gr = new Color((float)0.9444,(float)0.9444,(floa Color fillColor= new Color((float)0.4375,(float)0.8125,(flo | Color fillColor= new Color((float)0.4375,(float)0.8125,(flo Color missColor = Color.blue; | Color missColor = Color.blue; Color hitColor = Color.red; | Color hitColor = Color.red; Color regColor = Color.black; | Color regColor = Color.black; | private Vector v; //keeps elements of the ref string | private Vector v; //keeps elements of the ref string | private Vector Order; //order of references to keep track o | private Vector Order; //order of references to keep track o | private int count=0; | private int count=0; private String policy_str; | private String policy_str; private String method_str; | private String method_str; private int cache_size; | private int cache_size; private String Incoming; | private String Incoming; | private int my_width ; | private int my_width ; private int my_height; | private int my_height; | private final int HIT = 1, | private final int HIT = 1, MISS = 0, | MISS = 0, UNDEF = -1; | UNDEF = -1; | private int[] Cache; | private int[] Cache; private int replaced_bl = UNDEF; | private int replaced_bl = UNDEF; | private int ref_int[]; | private int ref_int[]; private String ref_str[] ; | private String ref_str[] ; private int ref_status[]; | private int ref_status[]; private int ref_frame[]; | private int ref_frame[]; | private boolean reset_done = true; | private boolean reset_done = true; | private int hits = 0; | private int hits = 0; private int misses = 0; | private int misses = 0; | //************************************************ | //************************************************ //*** Constructor *** | //*** Constructor *** ReplaceCanvas(String S,String Policy, String Method, int Ca | ReplaceCanvas(String S,String Policy, String Method, int Ca super(); | super(); | setBackground(back_gr); | setBackground(back_gr); font = new Font("TimesRoman", Font.BOLD, 14); | font = new Font("TimesRoman", Font.BOLD, 14); font_m = getFontMetrics(font); | font_m = getFontMetrics(font); setFont(font); | setFont(font); | Incoming = new String(S); | Incoming = new String(S); | setPolicy(Policy); | setPolicy(Policy); | setMethod(Method); | setMethod(Method); | setCacheSize(CacheSize); | setCacheSize(CacheSize); | setStr(S); | setStr(S); | reset_done = false; | reset_done = false; } | } | //************************************************ | //************************************************ public void Modify(){ | public void Modify(){ reset_done = false; | reset_done = false; } | } | //************************************************ | //************************************************ public int getHits(){ | public int getHits(){ return hits; | return hits; } | } | //************************************************ | //************************************************ public int getMisses(){ | public int getMisses(){ return misses; | return misses; } | } | //******************* for debug only ************* | //******************* for debug only ************* public static void main(String args[]){ | public static void main(String args[]){ ReplaceCanvas r = new ReplaceCanvas("1 2 3", "p","m",3 ); | ReplaceCanvas r = new ReplaceCanvas("1 2 3", "p","m",3 ); } | } | //************************************************ | //************************************************ public void setStr(String s){ | public void setStr(String s){ Incoming = new String(s); | Incoming = new String(s); | count = Parse(s); | count = Parse(s); ref_int = new int[count]; | ref_int = new int[count]; ref_status = new int[count]; | ref_status = new int[count]; ref_frame = new int[count]; | ref_frame = new int[count]; | ref_str = new String[count]; | ref_str = new String[count]; //allocation of strings in the array | //allocation of strings in the array for(int k=0; k for (int i = 0; i if (bl == Cache[i]) > return true; > } > return false; > } > } > //******************** END **************************** > > > > > > > import java.applet.Applet; import java.applet.Applet; import java.awt.*; import java.awt.*; public class Replace extends Applet{ public class Replace extends Applet{ private CheckboxGroup Method; private CheckboxGroup Method; private Checkbox direct, full, set; private Checkbox direct, full, set; private String methodStr; private String methodStr; private CheckboxGroup Policy; private CheckboxGroup Policy; private Checkbox random, fifo, lru, mru; private Checkbox random, fifo, lru, mru; private String policyStr; private String policyStr; private Choice CacheSize; private Choice CacheSize; private static TextField t_ref_str,t_num_ref, t_num_hit, t_ private static TextField t_ref_str,t_num_ref, t_num_hit, t_ private static TextArea Exp_Ar; private static TextArea Exp_Ar; private Button Enter,Reset, Start, Suspend, Continue; private Button Enter,Reset, Start, Suspend, Continue; private final String default_ref_str = "2 4 3 1 4 3 2 1 4 private final String default_ref_str = "2 4 3 1 4 3 2 1 4 private String cur_ref_str = default_ref_str; private String cur_ref_str = default_ref_str; private int[] Table_of_Cache_Sizes={3,4,5,6,7,8}; private int[] Table_of_Cache_Sizes={3,4,5,6,7,8}; private int count_num_ref = getNumEl(cur_ref_str), private int count_num_ref = getNumEl(cur_ref_str), count_num_hit = 0, count_num_hit = 0, count_num_miss=0; count_num_miss=0; private int cache_size = Table_of_Cache_Sizes[0] ; private int cache_size = Table_of_Cache_Sizes[0] ; private ReplaceCanvas r ; private ReplaceCanvas r ; Thread Animation_thread; Thread Animation_thread; Font font = new Font("TimesRoman", Font.BOLD, 14); Font font = new Font("TimesRoman", Font.BOLD, 14); public static final Color fillColor= public static final Color fillColor= new Color ((float)0.4375,(float)0.8125,(float)0.8125); new Color ((float)0.4375,(float)0.8125,(float)0.8125); public static final Color drawColor = Color.black; public static final Color drawColor = Color.black; //************************************** //************************************** public void init(){ public void init(){ setBackground ( setBackground ( new Color((float)0.9444,(float)0.9444,(flo new Color((float)0.9444,(float)0.9444,(flo setFont(font); setFont(font); GridBagLayout gridbag = new GridBagLayout(); GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints constraints = new GridBagConstraints() GridBagConstraints constraints = new GridBagConstraints() setLayout(gridbag); setLayout(gridbag); buildConstraints(constraints,1,0,2,1,30,100); buildConstraints(constraints,1,0,2,1,30,100); constraints.fill = GridBagConstraints.NONE; constraints.fill = GridBagConstraints.NONE; constraints.anchor = GridBagConstraints.WEST; constraints.anchor = GridBagConstraints.WEST; Label label1 = new Label("Replacement"); Label label1 = new Label("Replacement"); gridbag.setConstraints(label1, constraints); gridbag.setConstraints(label1, constraints); add(label1); add(label1); //adding Checkboxes //adding Checkboxes Policy = new CheckboxGroup(); Policy = new CheckboxGroup(); random = new Checkbox("Random", Policy,true); random = new Checkbox("Random", Policy,true); fifo = new Checkbox("FIFO", Policy, false); fifo = new Checkbox("FIFO", Policy, false); lru = new Checkbox ("LRU", Policy, false); lru = new Checkbox ("LRU", Policy, false); mru = new Checkbox ("MRU", Policy, false); mru = new Checkbox ("MRU", Policy, false); buildConstraints(constraints,1,1,2,1,0,100); buildConstraints(constraints,1,1,2,1,0,100); constraints.fill = GridBagConstraints.NONE; constraints.fill = GridBagConstraints.NONE; constraints.anchor = GridBagConstraints.WEST; constraints.anchor = GridBagConstraints.WEST; gridbag.setConstraints(random, constraints); gridbag.setConstraints(random, constraints); add(random); add(random); buildConstraints(constraints,1,2,2,1,0,100); buildConstraints(constraints,1,2,2,1,0,100); constraints.fill = GridBagConstraints.NONE; constraints.fill = GridBagConstraints.NONE; constraints.anchor = GridBagConstraints.WEST; constraints.anchor = GridBagConstraints.WEST; gridbag.setConstraints(fifo, constraints); gridbag.setConstraints(fifo, constraints); add(fifo); add(fifo); buildConstraints(constraints,1,3,2,1,0,100); buildConstraints(constraints,1,3,2,1,0,100); constraints.fill = GridBagConstraints.NONE; constraints.fill = GridBagConstraints.NONE; constraints.anchor = GridBagConstraints.WEST; constraints.anchor = GridBagConstraints.WEST; gridbag.setConstraints(lru, constraints); gridbag.setConstraints(lru, constraints); add(lru); add(lru); buildConstraints(constraints,1,4,2,1,0,100); buildConstraints(constraints,1,4,2,1,0,100); constraints.fill = GridBagConstraints.NONE; constraints.fill = GridBagConstraints.NONE; constraints.anchor = GridBagConstraints.WEST; constraints.anchor = GridBagConstraints.WEST; gridbag.setConstraints(mru, constraints); gridbag.setConstraints(mru, constraints); add(mru); add(mru); buildConstraints(constraints,3,0,2,1,0,100); buildConstraints(constraints,3,0,2,1,0,100); constraints.fill = GridBagConstraints.NONE; constraints.fill = GridBagConstraints.NONE; constraints.anchor = GridBagConstraints.WEST; constraints.anchor = GridBagConstraints.WEST; Label label6 = new Label("Method"); Label label6 = new Label("Method"); gridbag.setConstraints(label6, constraints); gridbag.setConstraints(label6, constraints); add(label6); add(label6); //adding Checkboxes //adding Checkboxes Method = new CheckboxGroup(); Method = new CheckboxGroup(); direct = new Checkbox("Direct", Method,true); direct = new Checkbox("Direct", Method,true); full = new Checkbox("Fully Associative", Method, false); full = new Checkbox("Fully Associative", Method, false); buildConstraints(constraints,3,1,2,1,0,100); buildConstraints(constraints,3,1,2,1,0,100); constraints.fill = GridBagConstraints.NONE; constraints.fill = GridBagConstraints.NONE; constraints.anchor = GridBagConstraints.WEST; constraints.anchor = GridBagConstraints.WEST; gridbag.setConstraints(direct, constraints); gridbag.setConstraints(direct, constraints); add(direct); add(direct); buildConstraints(constraints,3,2,2,1,0,100); buildConstraints(constraints,3,2,2,1,0,100); constraints.fill = GridBagConstraints.NONE; constraints.fill = GridBagConstraints.NONE; constraints.anchor = GridBagConstraints.WEST; constraints.anchor = GridBagConstraints.WEST; gridbag.setConstraints(full, constraints); gridbag.setConstraints(full, constraints); add(full); add(full); buildConstraints(constraints,3,3,1,2,0,100); buildConstraints(constraints,3,3,1,2,0,100); constraints.fill = GridBagConstraints.NONE; constraints.fill = GridBagConstraints.NONE; constraints.anchor = GridBagConstraints.WEST; constraints.anchor = GridBagConstraints.WEST; Label label9 = new Label("Cache Size : ",Label.LEFT); Label label9 = new Label("Cache Size : ",Label.LEFT); gridbag.setConstraints(label9, constraints); gridbag.setConstraints(label9, constraints); add(label9); add(label9); //creating,filling and adding choice buttons //creating,filling and adding choice buttons CacheSize = new Choice(); CacheSize = new Choice(); for (int i = 0; i