Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Grupo N° “1”
Nro Not
Código Apellidos y Nombres Letras
. a
1 20121142E Ramírez Ramos , Marco
2 20140061G Salcedo Tolentino, Jack Dennis
12 de julio de 2017
2017-I
INDICE
I RESUMEN
II INTRODUCCIÓN
V CONCLUSIONES
VII ANEXOS
VII.1 Manual de usuario.
VII.2 Código fuente del sistema.
pág. 2
I. RESUMEN
II. INTRODUCCIÓN:
pág. 3
En esta presentación trataremos el tema de Gestión de Procesos, Memoria y
E/S; de tal manera que abarcaremos todos los conceptos explicados en clase,
vale decir que hemos conectado ambos temas y lo hemos desarrollado en su
totalidad.
pág. 4
Crear un simulador para la gestión de Procesos, Memoria y E/S;
utilizando interfaces gráficas para su entendimiento.
pág. 5
permite gestionar de una manera más eficaz los procesos en los sistemas
operativos multiprocesos, ya que cada proceso es independiente, por lo que el
bloqueo de uno no debe de hacer que otro proceso en el sistema se bloquee.
En estos sistemas operativos multiproceso se intenta maximizar la utilización
de la CPU, por lo que los procesos se ejecutan simultáneamente en la CPU y
sólo quedan a la espera de ejecución si requieren de algún recurso del sistema
que esté ocupado en ese momento, en cuanto obtiene dicho recurso podrá
ejecutarse de nuevo. Todo este proceso de gestión lo realiza el sistema
operativo, por lo que es el que decide si un proceso es más prioritario que
otros. Es el programador el que decide esta prioridad, por ejemplo en el caso
de Linux se utiliza un número en la programación de estrategias para
garantizar la equidad de los procesos.
Cada proceso se representa en el sistema operativo con un bloque de control
de proceso (PCB). En este PCB se guardan una serie de elementos de
información de los mismos. Estos elementos son: el identificador del proceso,
el estado del proceso, registros de CPU (acumuladores, punteros de la pila,
registros índice y registros generales), información de planificación de CPU
(prioridad de proceso, punteros a colas de planificación, etc.), información de
gestión de memoria, información de contabilidad (tiempo de uso de CPU,
números de procesos, etc.), información de estado de dispositivos E/S (lista de
archivos abiertos, etc.)
Nuevo
En los sistemas operativos hay varias razones por las que se crea un
proceso. Entre éstas se pueden destacar; la inicialización del sistema, cuando
se arranca el sistema se generan una serie de procesos ya bien sean para
interactuar con el usuario o procesos en segundo plano con una función
pág. 6
específica, como por ejemplo el aceptar la solicitud de una página web que está
en dicha máquina; ejecución de una llamada al sistema por parte de otro
proceso, un proceso puede requerir la descarga de ficheros, por lo que serán
otros procesos los que se encarguen de ubicar el archivo o archivos en la
ubicación específica; por medio de la acción de un usuario, por ejemplo al hacer
doble clic en un icono; mediante el inicio de un trabajo por lotes. Una vez el
proceso ha sido creado queda a la espera de ser admitido, por lo que si es así
pasaría a estado preparado o en caso contrario terminaría dicho proceso.
Preparado (Ready o listo).
Un proceso en este estado está esperando a que se le asigne un
procesador. Como se puede apreciar en la figura 4, un proceso en este estado
puede, o bien finalizar, lo que ocurriría por la acción de otro proceso o por algún
acontecimiento externo, o bien el proceso pasa al estado ejecución, ya que el
gestor de procesos le asigna una CPU para ser ejecutado.
Ejecución (Run).
El proceso en este estado está en la CPU ejecutando instrucciones. Puede
ocurrir tres situaciones; que el proceso ejecute todas las instrucciones hasta su
última línea de código y finaliza; pasa a estado bloqueado (wait) por que espera
una acción externa como la entrada de información por teclado; o bien el
proceso pasa a estado preparado debido a que ha agotado su tiempo de
ejecución, por lo que cede su tiempo de ejecución.
Bloqueado (Wait, en espera)
El proceso está esperando a que se produzca un evento externo, como una
señal de E/S, y pasaría a estado ejecución. Al igual que el estado preparado, el
proceso puede finalizar debido a un acontecimiento externo. El sistema
operativo utiliza varias colas para gestionar los estados, cada cola puede tener
una política diferente. Así, podemos encontrar una cola para los estados
preparados y una cola para los estados en espera. El planificador del
procesador al examinar estas colas asigna el procesador al proceso más
conveniente.
pág. 7
Identifier
State
Priority
Program counter
Memory pointers
Context data
I/O status
information
Accounting
information
pág. 8
Información de auditoría (Accounting information):
Puede incluir la cantidad de tiempo de procesador y de tiempo de reloj
utilizados, así como los límites de tiempo, registros contables, etc.
pág. 9
cargas de trabajo similares. Y obtener un buen rendimiento, por lo se debe
lograr finalizar el mayor número de procesos y maximizar el tiempo de
respuesta.
No existe una política de planificación óptima para todas las computadoras, sino
que depende de las características de los procesos. Así se puede ver cómo una
política obtiene unos resultados excelentes en un sistema, sin embargo en otro
sistema el rendimiento es mucho menor. Ello se debe a las características de los
procesos, donde cada uno puede tener una cantidad de operaciones de E/S
enorme cómo es el caso de las bases de datos, otros usan mayormente la CPU,
otros realizan una mayor lectura de datos frente a otros, hay procesos que
requieren una prioridad máxima en los turnos de ejecución, es el caso de los
procesos de tiempo real, y hay procesos que requieren más tiempo de ejecución
que otros, por lo que habrá que valorar si terminar primero los cortos o no
Existen diferentes planificadores en el sistema. Primero nos encontramos el
planificador a largo plazo, el cual es el encargado de controlar el grado de
multiprogramación en el sistema, intentando conseguir una mezcla adecuada de
trabajos en CPU y E/S. Es por tanto el encargado de suministrar los procesos a
la cola de planificación a corto plazo.
Existe también un planificador a medio plazo. Es el encargado de suspender y
posteriormente restaurar procesos de poco interés, realizando el intercambio de
los mismos entre la memoria principal y el disco o memoria secundaria. Dicho
proceso es conocido como swapping, y se ejecuta cuando hay escasez de
recursos
El planificador a corto a plazo es el encargado de asignar y desasignar la CPU.
Su trabajo es coger un proceso de la cola de procesos preparados y asignarle
una CPU. Hay dos tipos de planificadores a corto plazo; no expulsivas, el
proceso abandona la CPU cuando termina o a la espera de un suceso externo;
y expulsivas, el proceso que se está ejecutando puede pasar a estado listo
enviado por parte del sistema operativo
Compartición de recursos
Espacio de memoria
Sincronización del padre
Terminación
pág. 10
Cuando un proceso crea un proceso nuevo, hay dos posibilidades en
términos de ejecución
Identificación de Procesos:
Todo proceso en Linux lleva asociado un identificador (nº de 16 bits que
se asigna secuencialmente en Linux por cada nuevo proceso que se crea), que
resulta único para cada proceso y se conoce como PID. Además, salvo el
proceso raiz (init), todo proceso lleva asociado un proceso padre, que también
tiene un identificador, en este caso PPID, lo que generará toda una estructura
en árbol.
Un programa puede obtener el identificador del proceso en el que se está
ejecutando por medio de la función de llamada al sistema getpid(), mientras que
el identificador del proceso padre desde el que se ejecutase puede obtener por
medio de la función de llamada al sistema getppid().
Al finalizar el fork() tanto el proceso padre como el hijo continúan su ejecución a
partir de la siguiente instrucción. Si un padre quiere esperar a que su hijo
termine deberá utilizar la llamada al sistema wait (); wait() detiene la ejecución
del proceso (lo pasa al estado bloqueado) hasta que un hijo de éste termine.
wait() regresa de inmediato si el proceso no tiene hijos. Cuando wait() regrese
por terminación de un hijo, el valor devuelto es positivo e igual al pid de dicho
proceso. De lo contrario devuelve –1 y pone un valor en errno.
Terminación de un proceso:
PROCESO ZOMBIE
Proceso que ha finalizado su ejecución pero aún no ha sido eliminado.
Supongamos que un programa crea un proceso hijo y luego llama a la
función wait ():
pág. 11
UN PROCESO FINALIZA:
Cuando tras ejecutar su última instrucción le pide al SO que lo elimine
utilizando una llamada al sistema “exit”.
Cuando el padre emite una llamada al sistema para abortarlo.
MATAR UN PROCESO:
En ocasiones nos sucederá que queramos finalizar un proceso que esta
corriendo, las razones para hacer esto pueden ser múltiples, que el proceso
esté consumiendo demasiado tiempo del procesador, que esté bloqueado,
que no genere información o que genere demasiada, ...
Para matar un proceso utilizaremos la orden kill, que resulta muy útil en el
caso de procesos que no tienen asociada ninguna terminal de control. Para
matar un proceso necesitaremos su PID de tal manera que escribiremos: kill
PID(s)
MEMORIA REAL
La memoria real o principal es en donde son ejecutados los programas y
procesos de una computadora y es el espacio real que existe en memoria para
que se ejecuten los procesos.
Por lo general esta memoria es de mayor costo que la memoria secundaria,
pero el acceso a la información contenida en ella es de más rápido acceso.
pág. 12
Los términos “memoria” y “almacenamiento” se consideran equivalentes.
Los programas y datos deben estar en el almacenamiento principal para:
Poderlos ejecutar.
Referenciarlos directamente
MEMORIA VIRTUAL
Es una técnica de gerencia de memoria, usada por un sistema operativo, donde
memoria no contigua es presentada al software como memoria contigua. Esta
memoria contigua es llamada VAS (virtual address space) o espacio de
dirección virtual.
PARTICIONES
pág. 14
• Registro límite inferior (base).
• Registro límite superior o registro longitud
Particionado fijo
pág. 15
que se adapten mejor a los huecos disponibles, para minimizar la fragmentación
interna.
Para la gestión del espacio libre es adecuado el mapa de bits.
Particionado variable
Como ya sabemos, MFT presenta problemas de fragmentación interna. La
alternativa es el particionado variable de la memoria, que se denomina MVT
(multiprogramación con un número variable de tareas).
La elección del hueco donde ubicar el programa puede hacerse siguiendo las
diferentes políticas de asignación.
ESTRATEGIA DE ASIGNACIÓN
Ahora podemos preguntarnos: ¿Cómo elige el SO en que porción de memoria
colocaremos un proceso?
Existen varias estrategias:
•First fit: Asigna el primer “agujero” de memoria libre que satisface la
necesidad.
•Best fit: Asigna el mejor “agujero” de memoria libre que exista en la memoria
principal.
•Worst fit: Asigna en el “agujero” más grande que exista en la memoria
principal.
FIRST FIT
pág. 16
BEST FIT
WORST FIT
pág. 17
Periférico de Entrada y Salida
En informática, un periférico de
entrada/salida o E/S (en inglés: input/output o I/O) es un dispositivo que permite
la comunicación entre un sistema de procesamiento de información, tal como
la computadora y el mundo exterior, y posiblemente un humano u otro sistema
de procesamiento de información.
Periférico:
pág. 18
Elemento que permite la transferencia de información entre la CPU y el
mundo exterior.
Módulo de E/S
Funciones
1. Control y Temporización:
5. Detección de errores.
pág. 19
Acceso directo a memoria (DMA)
La E/S le indica a la CPU cuando está preparada para transferir datos (genera
una interrupción a la CPU), activando una línea especial conectada a la CPU
(línea de interrupción).
Funcionamiento
Clasificación de Interrupciones
pág. 20
INTERNAS (producidas por la CPU)
EXTERNAS (producidas por los dispositivos de E/S)
-Vectorizadas
-No vectorizadas
Interrupciones SOFTWARE (producidas por la ejecución de instrucciones
de la CPU).
-Según MODO DE CONOCER el VECTOR DE INTERRUPCIÓN (la dirección
donde se encuentra la rutina de servicio de la interrupción):
-Interrupciones AUTOVECTORIZADAS: el vector de interrupción es FIJO.
-Interrupciones VECTORIZADAS: el vector de interrupción lo suministra el
propio periférico
Interrupciones Vectorizadas
Con el vector de interrupción se indexa una tabla de vectores en memoria principal para
obtener la dirección de la rutina de servicio a la que hay que saltar.
pág. 21
-Generalmente existen VARIOS PERIFÉRICOS conectados (y no uno sólo) que
pueden realizar interrupciones.
-Es necesario:
Establecer prioridades.
pág. 22
Código Requerimiento Descripción
RF1 Lenguaje de Uso del lenguaje de
programación Java programación Java para
implementar el código,
utilizando el entorno de
desarrollo Netbeans.
RF2 Base de datos mySQl Uso de la base de datos
mySQL para almacenar
los atributos de los
procesos.
pág. 23
A continuación mostraremos la funcionalidad de nuestro proyecto-
simulación.
Imagen 1: Nos muestra el panel inicial de la simulación para procesos,
interrupciones y memoria.
pág. 24
“VerProceso” (Imagen 2.2): Esta opción nos permite mostrar los procesos
creado hasta el momento, indicando a su vez el número de procesos
existentes. Para ver solo es necesario presionar el botón “Cargar Datos”.
Imagen 3: Una vez creado los procesos, nos dirigimos a la gestión de memoria, el
cual se ubica en la parte izquierda superior del panel principal, con el rotulo de
“Memoria”, allí encontraremos dos opciones, “Información” – nos detalla sobre
nuestro proceso, memoria y S.O, “Partición Fija” – nos mostrará su respectivo
graficador.
Algoritmo de Planificación: FIFO
pág. 25
“Información” (Imagen 3.1): Nos muestra la capacidad de memoria y del
S.O , el tamaño del frame es valor fijo, con un Nº de frame calculado
automáticamente.
pág. 26
(Imagen 3.2.1)
Imagen 3.2.2
Aquí se muestra la forma de asignación, “Primer Ajuste”, ”Mejor
Ajuste”, “Peor Ajuste”, además se puede visualizar los procesos
pendientes, a aquellos que no ocuparon una frame por superar el
tamaño permitido.
pág. 27
Imagen 4: Dentro del panel de “Partición Fija” tenemos la opción “MATRIX” en
la cual mostraremos como los procesos se ubican en una frame en caso de su
tamaño ser menor o igual al tamaño frame, y como quedan libres.
Imagen 4.1: Con el botón “Ver”, podemos ir cargando uno por uno los
procesos y ubicándolo en cada frame de ser posible, además tenemos una
lista de (proceso, Mb) el cual indica el orden de la carga por procesos.
Leyenda:
Amarillo: Proceso ocupado sin especificar la frame.
Rojo: Proceso ocupando la frame y (proceso i, frame y);
Azul: Procesos Pendientes o libre.
pág. 28
Imagen 4.2: Con el botón “buscar Proceso”, podemos obtener el estado
del proceso si es ocupado o libre, en caso de ser ocupado, nos mostrará la
dirección de memoria y en que frame se ubica.
pág. 29
Imagen 5: Dentro del panel de “Partición Fija” tenemos la opción “matrix” en
la cual mostraremos los procesos listados, además, una vez dado “Play” se da
por iniciado el TIEMPO de ejecución, en caso que el tiempo de llegada del
proceso coincida con la etiqueta TIEMPO , y su tamaño de página es menor a
ocho, entonces se muestra en la tabla “Procesos de 8 paginas” ocupando el
número de páginas, en caso que sea mayor , se lista en la tabla “Procesos
Rechazados”, si el proceso termina su duración en la tabla “Procesos de 8
paginas” entonces pasa a “Procesos Listos”.
pág. 30
5.a)
5.b)
pág. 31
5.c)
5.d)
Imagen 5.2: Utilizando el boton “NUEVO PROCESO”, una vez ingresado los
valores que componen un proceso, al darle clic sobre este boton,
automaticamente captura el tiempo de ejecucion, y ello se guarda en el
boton “captura un tiempo”, de tal forma que el proceso se agrega en la
tabla de procesos creados.
pág. 32
Imagen 6: Se obtiene del botón “Mostrar Procesos Preparados” que se
encuentra en el panel inicial, esta listara todos los procesos listos, como se
obtuvo en la Imagen 5.
pág. 34
En la sección de “Interrupciones Generadas”, podemos observar que se van
a generar 15 interrupciones, pudiendo ser de timer, pantalla o mouse
dependiendo del intervalo de tiempo.
pág. 35
IV.5.- Pruebas y medidas aplicadas
En el desarrollo de la administración de memoria las pruebas realizadas son a través
de una simulación usando el lenguaje JAVA en el entorno Netbeans y la base de datos
MySQL.
pág. 36
pág. 37
IV.6.- Logros obtenidos
Por parte de los procesos, hemos logrado entender la lógica y procedimiento desde su
creación hasta su ejecución, y para ello de todas manera tuvimos que centrarnos en
gestión de memoria, estudiar tipos de planificación, como representarlo visualmente su
funcionamiento, entre otras actividades.
pág. 38
V. Conclusiones
pág. 39
En la sección de procesos, debemos implementar más algoritmo de
planificación para ver los diversos cambios o comportamientos de estos.
Añadir la parte grafica dinámica de los procesos conforme transcurre el
tiempo y aparición de estos en el tiempo.
Implementar en el simulador de S.O el trabajo de multiprocesamiento.
Implementar las interrupciones desde un nivel inicial.
Ampliar el rango de las direcciones y pasarlo a hexadecimal ya que en
nuestro proyecto se muestra en decimal.
Implementar gráficamente la segmentación de memoria de proceso.
Trabajo de memoria virtual.
VII. Anexos
pág. 40
I.1 Manual de usuario.
pág. 41
4. Mientras esperamos la descarga, abrimos nuevamente la página principal y damos click a JDK
por separado.
pág. 42
6. Luego aceptamos los Términos y Condiciones:
pág. 43
8. Ahora abrimos el instalador de NetBeans y le damos click a Ejecutar:
pág. 44
10. Luego seguimos dando click a Siguiente:
2. N
o
s
pág. 45
mostrará el área de tipo de descarga por sistema operativo empleado, en el cual
optaremos por (x86).
4. Luego de presionar el botón “Ejecutar”, nos saldrá una pantalla en la cual se mostrará
“cargando y configurándose” para su instalación, posteriormente aparecerá la siguiente
pantalla de instalación, en la cual solo tendremos que esperar su configuración
respectiva.
pág. 46
Nosotros elegimos (x86) debido que satisface para las condiciones de nuestro Sistema
Operativo.
6. Descargado lo solicitado en el punto 5, lo ejecutamos e instalamos (cuestión de “Next”).
7. Retomando la instalación principal del MySQL, nos aparecerá el panel de seleccionar
productos, en el cual haremos la transferencia de “MySQL server”.
8. Del panel anterior, damos clic en “Next” para luego mostrarnos el área de “Instalacion”,
seleccionaremos nuestro producto y posteriormente clic en “Execute”.
pág. 47
9. Completado la ejecución, daremos Next hasta llegar al área de “Type and Networking”.
10. Una vez ubicados en la pantalla de “Type and Networking”, seleccionaremos la opción
de “Standalone MySQL server”, para posteriormente dar clic en “Next”.
pág. 48
12. Llegado a las pantalla de “”Accounts and Roles”, debemos generar una contraseña de
acceso para MySQL, para nuestro caso es “root” dicho password.
13. De la pantalla anterior, haremos uso del botón “Add User” para agregar un nuevo
usuario, en la cual nos mostrará la pantalla de “MySQL User Detail”, aquí nos solicitará
nombre de usuario y el password, los demás campos quedan de manera
predeterminada. Terminado el detalle de Usuario (mediante “ok”) clic en “Next”.
pág. 49
14. La siguiente pantalla se refiere a “Windows Service”, seleccionamos los campos
necesarios como se muestra en la imagen de abajo, para luego dar clic en “Next”.
15. Para “Plugins and Extensions”, dejaremos con las opciones pre-seleccionadas y
daremos clic en “Next”.
pág. 50
16. En la pantalla de “Apply Configuration”, solo daremos “Execute”.
17. Esperamos que la pantalla anterior termine de ejecutarse por cada paso de su
configuración, luego daremos clic en “Finish”.
pág. 51
VII.3 Código fuente del sistema.
Script:
drop database operativos;
create database operativos;
use operativos;
pág. 52
create table robin (cod_robin char(20),
timer int,
rafa_cpu int);
pág. 53
INSERT INTO interrupciones
VALUES ('I0',6,8),
('I1',8,14),
('I2',15,21),
('I3',26,28),
('I4',49,51);
pág. 54
CARGAR DATOS DESDE LA BASE DE DATOS
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
conectar con=new conectar();
Connection reg= con.conexion();
String codProceso,rafaga,tiempollegada,prioridad;
String sql;
codProceso="null";
rafaga=T_RafaCpu.getText();
tiempollegada=T_TimeLlegada.getText();
prioridad=T_Prioridad.getText();
String est_ingr="creado";
String tamanio=jtxt_tamaño.getText();
sql="INSERT INTO proceso (rafa_cpu,time_llegada,prioridad,tamanio,estado)
VALUES (?,?,?,?,?)";
try {
PreparedStatement pst=reg.prepareStatement(sql);
// pst.setString(1, codProceso);
pst.setString(1, rafaga);
pst.setString(2, tiempollegada);
pst.setString(3, prioridad);
pst.setString(4, tamanio);
pst.setString(5, est_ingr);
int n=pst.executeUpdate();
if (n>0) {
JOptionPane.showMessageDialog(null,"Registro de proceso correcto");
} else {
}
}
GRAFICAR PARTICIONES:
tbl_ingreso_procesos.setRowSelectionInterval(Nprocesos(), Nprocesos());
tbl_Ingreso_Particion.setRowSelectionInterval(Nparticiones(), Nparticiones());
InsertarParticiones(35, 0, jpanel_primerAjuste);
PrimerAjuste();
InsertarParticiones(35, 0, jPanel_mejorAjuste);
MejorAjuste();
InsertarParticiones(35, 0, jPanel_peorAjuste);
PeorAjuste();
btn_graficar_memoria.setEnabled(false);
btn_limpiar_paneles.setEnabled(true);
listarPP();
//listarTablaF(); // TODO add your handling code here:
label.setText(String.valueOf(totalProcesos));
boton.setEnabled(false);
CODIGO FIFO:
public void FCSC(){
for(int i=1;i<listaDoble.size();i++){
for(int j=0;j<listaDoble.size()-1;j++){
if(listaDoble.get(i).dato.getTiempo()<listaDoble.get(j).dato.getTiempo()){
Proceso aux=listaDoble.get(j).getDato();
listaDoble.modificar(j, listaDoble.get(i).dato);
listaDoble.modificar(i, aux);
}
}
}