Está en la página 1de 7

Instituto Tecnológico de Ciudad Madero

Carrera: Ingeniería en Sistemas Computacionales

Materia: Sistemas Operativos

Hora: 10:00 AM – 11:00 AM

Docente: José Ángel Villarreal Hernández

Alumno: Obregón Reynaga Roberto Carlos

Numero de control: 22070265

Semestre: Enero – Mayo 2024

Ciudad Madero, Tamaulipas a jueves, 14 de marzo de


2024
Índice
Simulador de memoria fisica RAM.....................................................................................................3
Resumen............................................................................................................................................3
Introducción.......................................................................................................................................3
Metodología......................................................................................................................................4
Conclusión.........................................................................................................................................6
Bibliografía.........................................................................................................................................7
Simulador de memoria fisica RAM
Resumen

Durante este documento se construirá un programa que simule ser la


memoria física de una computadora. También generaremos un
programa externo que solicite y libere memoria aleatoriamente de su
simulador.
Introducción

Memoria física

La memoria física (también conocida como RAM - memoria de acceso


aleatorio) es un hardware. Este componente proporciona
almacenamiento temporal de alta velocidad para procesos, programas
y datos en ejecución activa. Permite el CPU para acceder rápidamente
a los datos, aumentando significativamente el rendimiento de una
computadora. A diferencia de los dispositivos de almacenamiento
permanente (SSD o discos duros), la memoria física es volátil, lo que
significa que pierde sus datos cuando la máquina se apaga o se
reinicia.

La memoria también le permite cambiar rápidamente de una tarea a


otra y recordar en qué punto de cada tarea se encuentra. En términos
generales, cuanta más memoria tenga, será mejor para realizar
multitareas.

La velocidad y el desempeño de su sistema se correlacionan


directamente con la cantidad de RAM que ha instalado. Si su sistema
no tiene suficiente RAM, puede ser lento y poco fluido, especialmente
cuando intenta realizar varias tareas a la vez o tiene varios programas
o aplicaciones abiertos al mismo tiempo.

Si habitualmente le frustran los programas que no responden, los


tiempos de carga lentos y, en general, la lentitud de la computadora es
probable que se deba a la falta de RAM.
Metodología
1 /*
2 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
3 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Main.java to edit this template
4 */
5 package memoriafisica;
6
7 /**
8 *
9 * @author ror36
10 */
11 import javax.swing.*;
12 import java.awt.*;
13 import java.awt.event.ActionEvent;
14 import java.awt.event.ActionListener;
15 import java.util.Random;
16
17 class MemoriaFisica {
18
19 private static final int TAMANIO_MEMORIA = 1024;
20 private static final int TAMANIO_BLOQUE = 4;
21 private static final int CANTIDAD_BLOQUES = TAMANIO_MEMORIA / TAMANIO_BLOQUE;
22 private boolean[] memoria;
23
24 public MemoriaFisica() {
25 memoria = new boolean[CANTIDAD_BLOQUES];
26 for (int i = 0; i < CANTIDAD_BLOQUES; i++) {
27 memoria[i] = false;
28 }
29 }
30
31 public synchronized boolean asignarMemoria(int tamano) {
32 int bloquesNecesarios = tamano / TAMANIO_BLOQUE;
33 int bloquesLibres = 0;
34 int inicioBloqueLibre = -1;
35
36 for (int i = 0; i < CANTIDAD_BLOQUES; i++) {
37 if (!memoria[i]) {
38 if (bloquesLibres == 0) {
39 inicioBloqueLibre = i;
40 }
41 bloquesLibres++;
42 if (bloquesLibres == bloquesNecesarios) {
43 for (int j = inicioBloqueLibre; j < inicioBloqueLibre + bloquesNecesarios; j++) {
44 memoria[j] = true;
45 }
46 return true;
47 }
48 } else {
49 bloquesLibres = 0;
50 }
51 }
52 return false;
54
55 public synchronized void liberarMemoria(int tamanio) {
56 int bloquesLiberar = tamanio / TAMANIO_BLOQUE;
57 for (int i = 0; i < CANTIDAD_BLOQUES; i++) {
58 if (memoria[i]) {
59 memoria[i] = false;
60 bloquesLiberar--;
61 if (bloquesLiberar == 0) {
62 break;
63 }
64 }
65 }
66 }
67
68 public boolean[] getEstadoMemoria() {
69 return memoria;
70 }
71
72 public static void main(String[] args) {
73 MemoriaFisica memoriaFisica = new MemoriaFisica();
74
75 JFrame frame = new JFrame("Simulador de Memoria Física");
76 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
77 frame.setSize(400, 300);
78
79 JTextArea textArea = new JTextArea();
80 textArea.setEditable(false);
81 JScrollPane scrollPane = new JScrollPane(textArea);
82 frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
83
84 JButton startButton = new JButton("Start :)");
85 startButton.addActionListener(new ActionListener() {
86 @Override
87 public void actionPerformed(ActionEvent e) {
88 ProgramaExterno programaExterno = new ProgramaExterno(memoriaFisica, textArea);
89 Thread thread = new Thread(programaExterno);
90 thread.start();
91 startButton.setEnabled(false);
92 }
93 });
94 frame.getContentPane().add(startButton, BorderLayout.SOUTH);
95
96 frame.setVisible(true);
97 }
98 }
99
100 class ProgramaExterno implements Runnable {
101
102 private MemoriaFisica memoriaFisica;
103 private Random random;
104 private JTextArea textArea;
105
106 public ProgramaExterno(MemoriaFisica memoriaFisica, JTextArea textArea) {
107 this.memoriaFisica = memoriaFisica;
108 this.random = new Random();
109 this.textArea = textArea;
110 }
111
112 @Override
113 public void run() {
114 while (true) {
115 try {
116 Thread.sleep(random.nextInt(3000) + 1000);
117 } catch (InterruptedException e) {
118 e.printStackTrace();
119 }
120
121 int accion = random.nextInt(2);
122 int tamano = random.nextInt(10) + 1;
123 if (accion == 0) {
124 textArea.append("Solicitando " + tamano * 4 + "MB de memoria...\n");
125 boolean asignado = memoriaFisica.asignarMemoria(tamano * 4);
126 if (asignado) {
127 textArea.append("Memoria asignada.\n");
128 } else {
129 textArea.append("No se pudo asignar memoria.\n");
130 }
131 } else {
132 textArea.append("Liberando " + tamano * 4 + "MB de memoria...\n");
133 memoriaFisica.liberarMemoria(tamano * 4);
134 textArea.append("Memoria liberada.\n");
135 }
136 textArea.append("\n");
137 actualizarEstadoMemoria();
138 }
139 }
140
141 private void actualizarEstadoMemoria() {
142 boolean[] estadoMemoria = memoriaFisica.getEstadoMemoria();
143 textArea.append("Estado de la memoria:\n");
144 for (boolean estado : estadoMemoria) {
145 textArea.append(estado ? "X" : "-");
146 }
147 textArea.append("\n\n");
148 }
149 }
150

En el anterior código encontramos:

Clase MemoriaFisica: Representa la memoria física del sistema.


Tiene métodos para asignar y liberar memoria. Utiliza un arreglo
booleano para representar los bloques de memoria, donde true indica
que el bloque está ocupado y false indica que está libre.

Método asignarMemoria: Este método intenta asignar un bloque de


memoria del tamaño especificado. Verifica si hay suficientes bloques
libres contiguos para cumplir con la solicitud. Si encuentra suficiente
espacio, marca los bloques como ocupados y devuelve true. Si no
hay suficiente memoria contigua disponible, devuelve false.

Método liberarMemoria: Este método libera bloques de memoria


previamente asignados. Marca los bloques especificados como libres.

Clase ProgramaExterno: Esta clase representa un programa externo


que solicita y libera memoria de manera aleatoria. En el método run(),
el programa espera un tiempo aleatorio y luego solicita o libera
memoria. Después de cada solicitud o liberación, actualiza el estado
de la memoria en el área de texto.

Interfaz de Usuario (UI): Utiliza Swing para crear una interfaz gráfica
simple. Hay un botón "Start" que inicia la ejecución del programa
externo.

Conclusión

Después de implementar este codigo, podemos observar que el


código simula la asignación y liberación de memoria física en un
sistema informático. Proporciona una representación básica de cómo
se manejan los bloques de memoria dentro del sistema y cómo se
puede asignar y liberar memoria según la disponibilidad de bloques
contiguos. Se simula el comportamiento de una aplicación que solicita
y libera memoria de manera aleatoria. Esta característica destaca la
variabilidad en las operaciones de gestión de memoria y cómo se
pueden tomar decisiones dinámicas según la situación actual de la
memoria. También se puede apreciar la visualización del estado de la
memoria a través de una interfaz de usuario simple a través de una
interfaz simple por medio de Swing.

Bibliografía
 Azap, B. (2023, septiembre 25). ¿Qué es la memoria física?
phoenixNAP IT Glossary; phoenixNAP.
https://www.phoenixnap.mx/glosario/memoria-f%C3%ADsica
 Dell, M. X. (s/f). Cómo la memoria de acceso aleatorio (RAM)
afecta el rendimiento de una computadora. Dell.com.
Recuperado el 15 de marzo de 2024, de
https://www.dell.com/support/kbdoc/es-mx/000129805/como-la-
memoria-de-acceso-aleatorio-ram-afecta-el-rendimiento

También podría gustarte