El repositorio es una extensión del sistema operativo Pure64, aplicando los conocimientos y conceptos aprendidos durante las clases teóricas y prácticas en la materia. Además, permite ejecutar programas que se detallarán más adelante.
El desarrollo es una continuación del sistema implementado el cuatrimestre anterior, en la materia 72.08 - Arquitectura de computadoras. Si desea consultarlo, el proyecto se encuentra disponible en el siguiente enlace: https://github.com/JoseMenta/TPE.
- Descargar la imagen Docker agodio/itba-so:1.0
docker pull agodio/itba-so:1.0
- Contar con el emulador QEMU: https://www.qemu.org/
- Contar con una versión de Docker en el dispositivo.
- Contar con permisos de superusuario.
- Contar con una versión de Docker en el dispositivo.
- Contar con una versión de Qemu.
- Contar con permisos de superusuario.
- Tener configurado WSL 2.
- Contar con una distribución de Linux.
- Contar con una versión de Docker de Windows.
- Contar con el entorno gráfico XServer (ver más en: https://sourceforge.net/projects/vcxsrv/).
- Descargar el repositorio del proyecto, el cual se encuentra en el siguiente enlace: https://github.com/JoseMenta/TP2_SO.
- Desempaquetar el archivo .zip.
- Abrir una terminal en el directorio donde se descomprimió el archivo.
- En el caso de MacOS, la terminal debe ser dentro de multipass.
- En el caso de Windows, la terminal debe ser dentro de WSL.
- Abrir el contenedor de Docker.
docker run -v "${PWD}:/root" --privileged --rm -ti agodio/itba-so:1.0
- Moverse al directorio root.
cd ./root
- Compilar el proyecto.
make all
- Alternativamente, en el caso de querer usar el manejador de memoria Buddy, compilar con mm=buddy.
make all mm=buddy
- Cerrar el contenedor.
exit
- Ejecutar el proyecto.
make run
- Escribir la contraseña de superusuario.
sh
Es el intérprete de comandos del sistema operativo. Cada vez que se inicie la máquina, este será el programa que se ejecutará inicialmente por defecto.
Mediante este programa podrá ejecutar el resto de programas que ofrece el sistema operativo. Incluso, puede ejecutar una nueva instancia de la shell ingresando el comando sh.
<prog_a> <| <prog_b>> <&>
El intérprete de comandos permite ejecutar programas en background si se agrega el carácter ‘&’ al final del comando.
De igual manera, es posible definir un pipe entre dos procesos escribiendo <prog_a> | <prog_b>, siendo prog_a el programa, junto a sus argumentos, que redirigirá su salida estándar y prog_b el programa, junto a sus argumentos, que redirigirá su entrada estándar.
Esto permite, por ejemplo, redirigir la salida de wc para que su resultado se imprima sin vocales escribiendo el comando wc | filter. Cabe aclarar que si se utiliza ‘&’ y ‘|’ en el mismo comando, ambos programas se ejecutarán en background.
help
Este programa permite conocer todos los programas con los que cuenta el sistema operativo. Al ejecutar el comando help en la shell, el programa imprimirá un listado de los programas disponibles, el cual indica el comando a ejecutar y una descripción de su funcionamiento.
mem
Otorga un detalle del estado de la memoria dinámica. El mismo indica el algoritmo utilizado, el espacio total de la memoria en bytes, la cantidad de bytes ocupados, la cantidad de bloques/nodos ocupados y la cantidad de bytes libres.
ps
Otorga un detalle de los procesos en ejecución (EXECUTE), en la cola de listos (READY), detenidos (BLOCKED) y finalizados (FINISHED) al momento de ejecutar el programa. Al ejecutar el comando ps, se imprime un listado de los procesos, indicando su pid, su nombre, su estado, su nivel de prioridad, su base pointer, su stack pointer y un booleano que indica si está en foreground o no.
loop
Es un programa simple, el cual solamente imprime un saludo e indica su pid infinitamente. Para frenar su ejecución, se debe usar el comando que mata procesos, la tecla ESC.
kill <pid>
Este programa permite finalizar la ejecución de procesos indicando el pid del proceso.
nice <pid> <0-4>
Permite modificar el nivel de prioridad de un proceso, indicando su pid y el nuevo nivel de prioridad.
block <pid>
unblock <pid>
Estos programas permiten modificar el estado de un proceso entre bloqueado y desbloqueado, respectivamente. Para ello, se debe indicar el pid del proceso que se quiere bloquear o desbloquear.
sem
Imprime el estado de los semáforos activos, indicando su nombre, su valor, el pid de los procesos bloqueados por el semáforo y el pid de los procesos conectados al semáforo. Si el semáforo no tiene nombre (unnamed semaphore), aparecerá la frase “sin nombre”.
info.pipe <amount>
Similar a sem pero, en este caso, imprime el estado de los pipes activos en el sistema operativo. Indica el nombre del pipe, el índice de lectura y de escritura, el pid de los procesos bloqueados (por lectura y escritura) y el pid de los procesos conectados al pipe. Si el pipe no tiene nombre (unnamed fifo), aparecerá la frase “sin nombre”. El comando debe recibir un argumento, el cual indica la cantidad de pipes que se desea consultar su estado.
cat
Es un programa que recibe caracteres por entrada estándar (STDIN), e imprime lo recibido por salida estándar (STDOUT) cuando lee el carácter ‘\n’. Este programa se detiene al leer el carácter especial EOF (CTRL+D).
filter
Es un programa similar a cat, pero con la diferencia de que no imprime por salida estándar las vocales que recibe por entrada estándar. De igual manera, finaliza al leer EOF.
wc
Este programa recibe los caracteres por entrada estándar, pero no los imprime por salida estándar. En cambio, al finalizar su ejecución por EOF, imprime un análisis de los caracteres ingresados. Indica la cantidad de caracteres leídos (bytes), la cantidad de palabras leídas (words) y la cantidad de líneas leídas (lines).
phylo
Es una extensión del problema The Dining Philosophers, ya que permite aumentar o reducir la cantidad de filósofos de manera dinámica, es decir mientras se ejecuta el programa.
Los filósofos podrán estar en tres estados: comiendo (C), pensando (P) o con hambre (H). Pero nunca podrán haber dos filósofos contiguos comiendo.
Siempre empieza su ejecución siendo 5 filósofos.
Para aumentar la cantidad de filósofos, se debe presionar la tecla A, y para reducir se debe presionar la tecla R.
Para finalizar el programa se debe presionar la tecla Q.
Cabe aclarar que, como mínimo, debe haber dos filósofos y, como máximo, debe haber 15 filósofos.
En caso de necesitar información adicional o querer conocer detalles de la implementación, se sugiere acceder al repositorio de GitHub público del proyecto. Alternativamente, puede contactarse con cualquiera de los desarrolladores.
https://github.com/JoseMenta/TP2_SO
- Axel Facundo Preiti Tasat: https://github.com/AxelPreitiT
- Gastón Ariel Francois: https://github.com/francoisgaston
- José Rodolfo Mentasti: https://github.com/JoseMenta