BUAP FACULTAD DE CIENCIAS DE LA COMPUTACIÓN SISTEMAS OPERATIVOS 2 PRACTICA 2 JAIME MORALES FLORES 200917708 01-FEB-2015 PRIMAVERA 2015
Introducción Linux o mejor dicho GNU/Linux es un núcleo de sistema operativo (Linux) con un conjunto de programas de manejo é interfaz sistema (software GNU). El Subsistema de administración de memoria es uno de las más importantes partes del OS Linux. Qué provee el subsistema de administración de Memoria Virtual en Linux? Direccionamiento Largo de espacios en Memoria El OS hace que el sistema aparente tener un volumen de memoria alto..al que realmente posee. La memoria virtual puede ser N veces más grande que la memoria física de un sistema. Protección Cada proceso en el sistema posee su propio espacio de direcciones virtuales de memoria. Estos espacios están completamente separados uno del otro y así los procesos corren sin afectar a otros. Mapeo en Memoria El mapeo en memoria es acostumbrado para mapear imágenes y archivos de datos dentro de un espacio de direcciones de un proceso. Alocamiento Equitativo de Memoria Física El Subsistema de administración de memoria permite a cada proceso que se encuentra en ejecución dentro del sistema, un equitativa distribución de la memoria del sistema. Memoria Virtual Compartida En ocasiones necesitaremos compartir la memoria entre procesos. Por citar un ejemplo, pudiesen existir varios procesos corriendo en el sistema, procesos del tipo comando de la shell de bash, más que múltiples copias de bash, cada una con su propio espacio de direcciones virtuales de memoria, sin duda sería mucho mejor tener una sola copia en memoria física y que todos los procesos que corran bash la compartiesen. Modelo Abstracto de Memoria Virtual
Como el procesador ejecuta un programa, este leerá una instrucción de memoria y decodificara la misma. Dentro del proceso de decodificar la instrucción, se podría requerir obtener o almacenar contenidos de una localidad de memoria. El procesador entonces ejecuta la instrucción y este se mueve hacia la siguiente instrucción a leer y decodificar (repitiendo lo anterior). De esta forma el procesador se mantiene siempre accesando a memoria leyendo y almacenando datos sobre ella. Sobre un sistema de memoria virtual, absolutamente todas las direcciones son virtuales y no son direcciones físicas. Esas direcciones virtuales serán convertidas en direcciones físicas por el procesador, tomando como base la información obtenida sobre un conjunto de tablas mantenidas por el Sistema operativo Linux. La memoria virtual y física son divididas en pedacitos llamados páginas. Esas páginas son todas del mismo tamaño, para que el sistema las pueda administrar de una manera sencilla. Linux sobre arquitecturas Alpha AXP suele usar 8 Kbyte por página y sobre sistema intel x86 la página es de 4 Kbyte. Cada una de esas páginas tiene un identificador único conocido como el Page Frame Number (PFN) o número de cuadro de Página. En este modelo de paginación, una dirección virtual está compuesta de 2 partes; un offset (desplazamiento) y un virtual PFN. Si la página de memoria es de 4 Kbytes, los bits 11-0 de la dirección virtual contienen el offset y los bits 12-31 en adelante contendrán el PFN virtual. Entonces, sobre una Arquitectura intel x86 a 32 bits tendríamos 1,048,576 (posibles direcciones) páginas de memoria virtual de 4 kb cada una. Cada vez que el procesador encuentre una dirección virtual, este extraerá su offset y su PFN virtual para traducir esta página a un página física y accesarla. Esto el procesador lo hace posible mediante la magia de las Tablas de Paginas (conjunto de tablas mantenidas por el Sistema operativo Linux).
Desarrollo de la práctica a) Planteamiento Conocer conceptos básicos de manejo de memoria en general de Linux. b) Aplique los comandos e imprima las pantallas para su reporte y conteste al final el cuestionario. 1. Abra la terminal de Linux. 2. Para acceder a los manuales de ayuda de los comandos se usa el comando man. Digite el siguiente comando man cat y para salir de la ayuda presione la tecla q. 3. Digite el siguiente comando meminfo y anote los tipos de memoria del sistema. La siguiente forma de comprobar el uso de memoria es leer el archivo /proc/meminfo. Debes saber que el sistema de ficheros /proc no contiene archivos reales. Son archivos dinámicos o virtuales que contienen información sobre el núcleo y el sistema.
4. Para limitar el uso de ciertos recursos existe un comando interno de la shell llamado 'ulimit' se usa para limitar el tamaño de los ficheros core producidos cuando un proceso muere bajo determinadas circunstancias. Un usuario normalito no utilizará para nada estos ficheros así que podría usarse 'ulimit 0' para evitar la aparición de ficheros core. 5. Digite ulimit-a, describa las limitaciones que identifica el sistema.
El comando ulimit -a nos dice los valores y límites establecidos para nuestro usuario. Los que más se suelen cambiar son el número de ficheros abiertos de forma simultánea por el usuario, el número de procesos por usuario, ciclos de cpu, etc. 6. Ahora utilice top que sirve para diagnosticar el uso de recursos y permite identificar procesos que consumen demasiado, pero optimice porque el mismo utiliza muchos recursos con top d 15 y conteste que porcentaje de ociosa está la CPU. %Cpu(s): 4,3 us, 1,4 sy, 0,0 ni, 94,2 id, 0,1 wa, 0,0 hi, 0,0 si, 0,0 st 7. Diga que hace el comando uptime. Este comando indica: la hora actual, el tiempo que el sistema está en marcha, el número de usuarios conectados, la carga promedio del sistema para los últimos 1, 5 y 15 minutos.
8. Si solo deseamos saber cuánta memoria queda libre podemos usar 'free'. Escriba el tamaño libre Tamaño libre: 823924 9. Con 'memstat' podemos ver el uso de memoria virtual de los procesos y de las librerías compartidas. 10. Ahora muestre sola información de un proceso y posteriormente mate al proceso. Para este ejemplo vamos a usar el proceso de Firefox y luego matarlo. Primero hay que averiguar el PID del programa: ps -ef grep Firefox Ese comando devolverá algo parecido a esto: 1986? Sl 7:22 /usr/lib/firefox-3.5.3/firefox Usamos el PID devuelto por el comando anterior para aniquilar el proceso: kill -9 1986
Cuestionario Instrucciones: Conteste V o F de acuerdo a cada afirmación del enunciado. 1.- Cierto. 2.- Falso. Existen unos límites blandos y unos límites duros. Estos últimos son los que únicamente son usados por el superusuario. 3.- Falso. Esto sobre cargará aún más el sistema. Mejor hacer 'top d 15' solo el tiempo necesario. 4.- Falso. La memoria virtual es la suma de la memoria física más el swap menos algunas páginas de reserva.
5.- Falso. Memoria física y memoria RAM es lo mismo. Memoria de intercambio es lo mismo que swap. 6.- Cierto. 7.- Falso. Se puede compartir y es un segmento de solo lectura. 8.- Falso. Pueden compartir el código de las librerías compartidas comunes que usen. 9.- Falso. No. Espera dormido para no consumir CPU. 10.- Falso. Eso aumentaría su prioridad. Afortunadamente solo root puede aumentar la prioridad. El comando correcto era: 'renice 20 PID'. 11.- Falso. Un shell-script es código ejecutable para bash pero para el kernel son datos porque no se ejecutan en la CPU. Por eso se puede borrar sin problema. 12.- Falso. Existen unos límites blandos y unos límites duros. Estos últimos son los que únicamente son usados por el superusuario. Conclusión - Reflexión de lo aprendido La gestión de memoria cumple un papel muy importante para la realización de procesos y aplicaciones que realiza el sistema operativo. En la memoria principal son ejecutados los programas y procesos de una computadora y es el espacio real que existe en memoria para que se ejecuten los procesos. El gestor de memoria debe proteger las zonas asignadas a cada proceso de accesos por parte de tercero, para evitar cualquier clase de problema incluso que se cuelgue el sistema. En la memoria principal son ejecutados los programas y procesos de una computadora y es el espacio real que existe en memoria para que se ejecuten los procesos. Bibliografía http://www.arcos.inf.uc3m.es/~ssoo-va/ssoo-va/libro/pdf/cap04.pdf http://portallinux.es/5-comandos-para-controlar-la-memoria-en-gnulinux/