ESCUELA POLITÉCNICA NACIONAL FACULTAD DE
INGENIERÍA DE SISTEMAS CARRERA DE INGENIERIA
EN SOFTWARE
Laboratorio de: ICCD332 – Arquitectura de Computadores
Práctica No.: 2
Tema: Gestión de memoria y scheduling en x86-64 y Linux
Objetivos
1. Comprender la implementación de scheduling y gestión de memoria en la arquitectura x86-64.
2. Comprender la implementación de scheduling y gestión de memoria en Linux
3. Verificar, experimentalmente, el funcionamiento de scheduling y gestión de memoria en sistemas
operativos Linux sobre procesadores x86-64.
Marco teórico
SCHEDULING: es el uso y la gestión del CPU para diferentes procesos de manera uniforme sin producir cuello de
botella y hay la planificación de largo plazo, planificación de medio plazo, planificación de corto plazo y planificación
E/S. Las políticas de Scheduling usadas en un SO Linux son con procesadores x86-64:
• First In, First Out: ejecuta el primer proceso recibido, lo acaba de ejecutar y ejecuta el siguiente en cola. Puede
tener un valor de prioridad de entre 1-99 y su utilización son para procesos en tiempo real.
• Round Robin: esta política asigna a todo proceso un tiempo de ejecución igual y, acabado ese tiempo pasa de
nuevo a la cola de procesos listos para ejecutar, se guarda el estado del proceso y se ejecuta el siguiente
proceso y, así sucesivamente hasta terminar de ejecutar todos los procesos en cola. Prioridad entre 1-99.
• Other: ejecuta los procesos como una política de RR, pero con tiempo de ejecución que variar porque depende
de la prioridad que tenga cada proceso, es decir unos procesos podrán ejecutarse más o menos tiempo que
otros. Con una prioridad predeterminada de 0, pero no fija y se utiliza para procesos en tiempo compartido.
GESTIÓN DE MEMORIA: Su objetivo es la eficiencia y rapidez al asignar y/o liberar espacio de memoria principal a
un proceso cuando esté lo requiera. La gestión de memoria en los sistemas LINUX se lleva a cabo por la técnica
paginación por demanda donde la memoria RAM se divide en espacios de memoria de un mismo tamaño, llamados
frames.
• Memoria virtual: espacio asignado de memoria de almacenamiento para que funcione como una memoria
RAM con más memoria de la que se dispone físicamente. En esta memoria se encuentran las páginas de los
procesos.
• TLB (Translation Lookaside Buffer): es una memoria caché contiene una parte de la tabla de páginas para más
rapidez al momento de generar la dirección física.
• Swapping: es el proceso de intercambiar páginas que se encuentra en frames de la memoria principal y
llevarlos a memoria de almacenamiento, de modo que deja espacio libre de memoria física para otro
programa.
Al programa se lo divide en páginas y por demanda se refiere a que solo se cargan las páginas que sean solicitadas y
si la memoria está llena haga un reemplazo de páginas. Las direcciones virtuales pueden ser mapeadas a direcciones
físicas con ayuda de la tabla de páginas y el TLB.
Desarrollo de la práctica
SCHEDULING:
En UBUNTU de LINUX usaremos el programa de la unidad 8 “scheduler.c”. Para eso debe ejecutar el programa
como superusario ya sea con un argumento de entrada que es el PID (Process Identification) del proceso o
internamente obtiene el PID del proceso en ejecución.
También usaremos el comando top para ver la lista de procesos en la terminal, escogemos el PID de cualquiera de
los procesos mostrados y en otra terminal ejecutamos el programa con el PID obtenido. Entonces, ejecutamos lo
siguiente sudo ./scheduling e ingresamos la contraseña para acceder superusario y podemos ver lo obtenido en
Resultado1, luego ejecutamos sudo ./scheduling 25 que es uno de los PID mostrados por el comando top y
obtenemos lo que está en Resultado2:
PID: 8487 PID: 25
Scheduler: 0 Scheduler: 0
Prioridad: 0 Prioridad: 5
===== =====
Scheduler: 2 Scheduler: 2
Prioridad: 10 Prioridad: 10
Resultado1 Resultado2
GESTIÓN DE MEMORIA:
Usamos el programa de “memLayout.c” el cual nos permite saber las direcciones VIRTUALES de algunas variables
globales, locales, estáticas inicializadas y no inicializadas. Ejecutamos el programa como ./memLayout y algunos
de los resultados obtenidos fueron los siguientes:
dirreccion de local: 0x7ffd12db0244
dirreccion de intV: 0x7ffd12db0248
Resultado3
Análisis de resultados
En Resultado1 como no pusimos ninguna variable de entrada entonces tomara el PID del mismo programa que se
ejecutó y como se mencionó en el marco teórico el SCHED_OTHER es el scheduler predeterminado en LINUX
entonces para este programa obtuvimos ese scheduler como resultado con una prioridad de 0, luego, como
ejecutamos como sudo el programa entonces sí puede cambiar el scheduler que usa el proceso y se lo cambio a
SCHED_RR con una prioridad de 10, porque el 2 que se muestra ahí representa SCHED_RR.
En Resultado2 el PID ingresado fue 25 entonces obtuvimos que ese proceso utiliza de igual manera el SCHED_OTHER,
pero con una prioridad de 5, así podemos ver que los procesos pueden tener distinta prioridad al utilizar el mismo
scheduler. Y de la misma manera que en Resultado1 se cambió el scheduler a RR con una prioridad de 10.
En Resultado3 podemos ver las direcciones virtuales mencionadas en el marco teórico de algunas de las variables
del programa ejecutado, ya que al emplear el “&” a lado del dato a imprimir nos entregara la dirección en memoria
virtual en lugar del valor en sí de la variable. Y estas direcciones virtuales pueden ser mapeadas a direcciones físicas.
Conclusiones y recomendaciones
• El scheduling permite saber de qué manera se gestionan los recursos del sistema y dependiendo de que
política use cada proceso entonces al mismo se le añadirá a la cola de procesos que tienen la misma política
y no solo depende de que política usa sino, también de que prioridad tenga el proceso
• En Linux cada proceso tiene una política de scheduling y se regirá respecto a la misma, pero si se quiere ver
que política usa o cambiar hacia otra, entonces se puede hacer con superusuario, ya que se usa la función
sched_setscheduler().
• El gestionar memoria nos permite dinamizar y obtener el máximo rendimiento de nuestra memoria
principal porque tener los procesos guardados en una memoria mucho más grande y añadirlos cuando sean
solicitados de una manera rápida y eficaz por medio de paginación por demanda es una mejora en el
rendimiento.
• El mapeo de dirección virtual a física siempre va a ir de la mano con la tabla de procesos y el TLB que
optimizan de manera eficiente la traducción de direcciones.
• Los programas empleados para la práctica tienen que ser ejecutados en SO de distribución Linux porque
emplean funciones y llamadas al sistema que solo se encuentran en el kernel de Linux.
Bibliografía
Canonical Ltd. (2019). ubuntu manuals. Obtenido de
http://manpages.ubuntu.com/manpages/bionic/es/man2/sched_setscheduler.2.html
Mafla, E. (2021). programas de la unidad 8.
Mafla, E. (2021). unidad8-SistemaOperativo.
Stallings, W. (2010). Computer Organization and Architecture Designing for Performance. Pearson.