File - SISTEMAS OPERATIVOS II

Anuncio
BUAP
FACULTAD DE CIENCIAS DE LA COMPUTACIÓN
SISTEMAS OPERATIVOS 2
REPORTE APPLET PROGRAMA DE PARTICIONES
INTEGRANTES:
JOSE ANTONIO MÉNDEZ BARRIOS
JAIME MORALES FLORES
PRIMAVERA 2015
201118720
200917708
Introducción
Un archivo mapeado a memoria (en inglés Memory-mapped file) es un esquema que permite la
asociación o una correlación byte a byte entre un archivo y una porción de la Memoria Virtual,
básicamente permiten acceder a archivos de disco a través de punteros de memoria. Esta
asociación permite a una aplicación o a algunos procesos ejecutar acciones de lectura y escritura
(sobre el archivo) directamente, como si se encontrara en la memoria principal.
Desarrollo de la práctica
Programa 1.
a) Planteamiento
En esta práctica realizamos la simulación de memoria paginada, esta se hizo en java usando un
applet.
b) Especificar interrupciones y librerías.
java.awt.event.*
Si queremos que este applet maneje eventos, debemos importar este paquete y utilizar la
interface ActionListener para implementar la accion que responda al evento en
el método actionPerformed().
java.util.Random
Nos permite crear un objeto de la clase Random, llamar a una de las funciones miembro que
generan un número aleatorio.
java.awt.*
Contiene todas las herramientas necesarias para desarrollar interfaces gráficos.
java.applet.*
Contiene todas las herramientas necesarias para desarrollar los applets.
c) Código en JAVA
Particle.java
import java.util.Random;
import java.awt.*;
import java.lang.*;
class Particle extends Thread
{
protected int x;
protected int y;
protected String nombre ;
protected int volumen;
protected int volumen2;
protected int valor;
protected int rest;
protected int tiempo;
protected boolean estado;
protected final Random rng = new Random();
public Particle(String name,int initialx, int initialy,int vol,int ll,boolean e,int
value,int time)
{
nombre=name;
x=initialx;
y=initialy;
volumen=vol;
volumen2=ll;
estado=e;
rest=0;
valor=value;
tiempo=time;
}
public synchronized void move()
{
synchronized(this)
{
estado=false;
int rest1=volumen;
int x=((int)(Math.random()*10));
int y=((int)(Math.random()*51));
if(x==0)
{
if(volumen==0)
{
valor=1;
volumen=0;
}
volumen-=3;
}
else
{
estado=false;
if(volumen<0)
{
valor=1;
volumen=0;
}
else
volumen-=3;
}
}
System.out.println("particle valor= "+valor+"de: "+nombre);
}
public void draw(Graphics g)
{
int lx,ly,v,ti;
boolean es;
String nam;
synchronized(this)
{
lx=x;
ly=y;
ti=tiempo;
v=volumen;
nam=nombre;
es=estado;
System.out.println("volumen"+volumen);
}
g.setColor(Color.cyan);
g.fillRect(150,7,400,30);
g.setColor(Color.red);
g.setFont(new Font("BOOK ANTIQUA", Font.CENTER_BASELINE, 30));
g.drawString("GESTOR DE MEMORIA", 230,30);
//MEMORIA
g.setColor(Color.blue);
g.drawRect(350,80,94,90);
g.setColor(Color.blue);
g.drawRect(350,170,94,65);
g.setColor(Color.blue);
g.drawRect(350,240,94,65);
g.setColor(Color.blue);
g.drawRect(350,310,94,65);
g.setColor(Color.blue);
g.drawRect(350,380,94,65);
g.setFont(new Font("BOOK ANTIQUA", Font.CENTER_BASELINE, 20));
g.drawString("S.O",380 ,110);
g.setFont(new Font("BOOK ANTIQUA", Font.CENTER_BASELINE, 15));
g.drawString("0",450 ,90);
g.drawString("300",450 ,180);
g.drawString("500",450 ,250);
g.drawString("800",450 ,310);
g.drawString("1100",450 ,380);
g.drawString("1400",450 ,450);
//MEMORIA FIN
g.setColor(Color.red);
g.fillRect(lx+340,ly+66,94, v+50);
if(valor>100)
{
g.setColor(Color.green);
g.setFont(new Font("BOOK ANTIQUA", Font.CENTER_BASELINE, 15));
g.drawString("el
tiempo
promedio
de
espera
fue
de:
"+(valor-100),
lx+100,ly+270);
System.out.println("resultado"+valor);
}
g.setColor(Color.green);
g.setFont(new Font("BOOK ANTIQUA", Font.CENTER_BASELINE, 15));
g.drawString(nam, lx+22,ly+140);
g.setColor(Color.red);
g.setFont(new Font("BOOK ANTIQUA", Font.CENTER_BASELINE, 10));
g.drawString("
",lx+107,ly+95);
g.drawString("
",lx+107,ly+105);
if(es==false)
{
if(v>0)
{
g.drawString("Tiempo:"+v,lx+22,ly+100);
g.drawString("Tamaño:"+ti,lx+22,ly+125);
}
if(v==14)
g.drawString("",lx+107,ly+95);
if(v<1)
{
g.drawString("TERMINO TAREA",lx+480,ly+100);
g.drawString(nam,lx+480,ly+130);
}
if(v==0)
g.drawString("",lx+22,ly+195);
}
if(es==true)
{
g.setColor(Color.green);
g.setFont(new Font("BOOK ANTIQUA", Font.CENTER_BASELINE, 15));
g.drawString("", lx+22,ly+100);
g.setColor(Color.magenta);
}
}
}
ParticleApplet.java
import
import
import
import
import
import
import
java.awt.*;
javax.swing.*;
java.util.*;
java.awt.event.*;
java.awt.*;
java.applet.*;
java.util.Random;
public class ParticleApplet extends Applet
{
protected Thread[] threads=null;
protected final ParticleCanvas canvas = new ParticleCanvas(300);
public int cont=0;
public int segmentos[];
public int resp_segmentos[]=new int[20];
public int valor_total=64;
public int valor_resta=0;
public void init()
{
add(canvas);
}
public void paint(Graphics g)
{
g.setColor(Color.black);
g.fillRect(0,0,800,800);
}
protected Thread makeThread(final Particle p){
Runnable runloop=new Runnable(){
public void run(){
System.out.println("runloop valor= "+p.valor+"de: "+p.nombre);
try{
System.out.println("runloop volumen= "+p.volumen);
for(;;){
if(p.valor==0){
System.out.println("runloop volumen=
"+p.volumen);
p.move();
canvas.repaint();
Thread.sleep(1300);
}
}
}catch(InterruptedException e){return;}
}
};
return new Thread(runloop);
}
public synchronized void start()
{
int n=15;
int v=15;
int x1=15;
int y2=101;
Integer e0 = 0;
int p=0;
String respc1;
Particle[] particles= new Particle[n];
int e;
if(threads==null)
{
JOptionPane.showMessageDialog(null, "PROGRAMA DE ADMINISTRACÌÓN DE
MEMORIA","MEMORIA",JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showMessageDialog(null, "EL MAXIMO DE MEMORIA ES DE 64
MB\n POR FAVOR PIENSE BIEN EL TAMAÑO DEL
PROCESO","MEMORIA",JOptionPane.INFORMATION_MESSAGE);
respc1 = JOptionPane.showInputDialog("1)DIVIDIR CADA PARTICIONES POR
USUARIO\n2)DAR NUMERO DE PARTICIONES");
e0 = Integer.parseInt(respc1);
do
{
if(e0==1)
{
respc1 = JOptionPane.showInputDialog("1)CUANTO MIDE LA
PARTICION?");
e0 = Integer.parseInt(respc1);
resp_segmentos[p]=e0;
p+=1;
valor_total=valor_total-e0;
valor_resta+=valor_total;
System.out.println("valor_resta= "+valor_resta);
System.out.println("valor_total= "+valor_total);
System.out.println("p= "+p);
}
}while(valor_total!=0);}
else if(e0==2)
{
respc1 = JOptionPane.showInputDialog("1)CUANTAS PARTICIONES
QUIERE?");
e0 = Integer.parseInt(respc1);
int div=64/e0;
resp_segmentos[p]=e0;
p+=1;
}
do
{
System.out.println("Programa MEMORIA");
String respc;
respc = JOptionPane.showInputDialog("1)Nuevo PROCESO \n2) VER
PROCESOS");
e = Integer.parseInt(respc);
if(e==1)
{
respc = JOptionPane.showInputDialog(" ¿ Cantidad de TAMAÑO ?
");
int c = Integer.parseInt(respc);
if(c<301)
{
cont+=1;
if((cont%5)==0)
{
y2+=200;
x1=5;
}
if(cont==1)
particles[cont-1]=new Particle("PROCESO
"+cont,x1,y2,16,16,false,0,c);
else
particles[cont-1]=new Particle("PROCESO
"+cont,x1,y2,16,16,false,v,c);
v-=1;
y2+=73;
}
else
JOptionPane.showMessageDialog(null, "EL MAXIMO DE
TIEMPO ES 300","MEMORIA",JOptionPane.INFORMATION_MESSAGE);
}
}while(e!=2&&cont!=5);
canvas.setParticles(particles);
threads=new Thread[cont];
for(int i=0;i<cont;++i)
{
System.out.println("numero de hilos "+threads.length);
threads[i]=makeThread(particles[i]);
threads[i].setPriority(i+1);
threads[i].start();
}
}
public synchronized void stop(){
if(threads != null){
for(int i=0;i<threads.length;++i)
threads[i].interrupt();
threads=null;
}
}
}
ParticleCanvas.java
import java.awt.*;
import java.applet.*;
import java.lang.*;
class ParticleCanvas extends Canvas
{
public int aux=0;
private Particle[] particles=new Particle[0];
ParticleCanvas(int size)
{
setSize(new Dimension(800,600));
}
protected synchronized void setParticles(Particle[] ps)
{
if(ps==null)
throw new IllegalArgumentException("No puede ser nulllo");
particles=ps;
}
protected synchronized Particle[] getParticles()
{
return particles;
}
public void paint(Graphics g)
{
Particle[] ps=getParticles();
for(int i=0;i<ps.length;i++)
{
System.out.println("\nENTRA la i vale:"+i);
System.out.println("si paint "+i+" valor= "+ps[i].valor+"volumen=
"+(ps[i].volumen));
System.out.println("volumen= "+(ps[i+1].volumen)+" de=
"+(i+1)+"valor= "+(ps[i+1].valor));
if(ps[i].volumen==1)
{
ps[i+1].valor=0;
System.out.println("si se cumplio la cond= "+ps[i+1].valor);
System.out.println("para proceso= "+ps[i+1].nombre);
}
else if(ps[i].valor==0||ps[i+1].valor==0)
{
ps[i].draw(g);
ps[i+1].draw(g);
}
System.out.println("\nSALE la i vale:"+i);
System.out.println("\ny el arreglo:"+ps[i].volumen2);
}
}
public int Suma()
{
Particle[] ps=getParticles();
int aux2=0;
for(int j=0;j<3;j++)
{
if(j==0)
aux2+=ps[j].volumen2;
else
{
aux+=ps[j].volumen2;
System.out.println("\nj vale: "+j);
System.out.println("\n:aux "+aux);
aux+=(ps[j].volumen2+aux2);
System.out.println("\naux: "+aux);
}
}
aux2=((aux)/4);
return aux2;
}
}
Myrunnable.java
public interface Myrunnable extends java.lang.Runnable {
}
e) Pantallas de la corrida
Estas son las ventanas que se abren al momento de empezar a ejecutar el applet. Aquí nos dice
que el máximo de memoria va a ser de 64mb.
Luego nos abrirá esta ventana y escogeremos la primera opción. Después tenemos que poner el
tamaño de la partición.
Después seleccionaremos la opción de Nuevo proceso y le asignaremos un tamaño. Después de
esto ya tendremos asignado el primer proceso, si queremos podemos ir insertando más procesos
pero el número máximo de procesos que podremos insertar será de 4.
Al terminar de insertar los procesos los podremos ver de manera gráfica seleccionando la opción
VER PROCESOS.
Conclusión - Reflexión de lo aprendido
Aprendimos el funcionamiento de la gestión de memoria mediante la paginación (la paginación de
memoria dividen los programas en pequeñas partes). La cantidad de memoria desperdiciada por
un proceso es el final de su última página, esta minimiza la fragmentación interna.
También aprendimos la manera en cómo se crea un applet y como es su funcionamiento en una
aplicación y también el modo de ejecutarlos ya que para compilarlo se le tienen que dar permisos
de seguridad en java.
Bibliografía
http://www.deciencias.net/simulaciones/paginas/appletjava.htm
http://proton.ucting.udg.mx/tutorial/java/Cap2/compilapp.html
Descargar