Skip to content

A continuation of the chaOS-v0 project. This enhanced version is a simple OS that incorporates a memory manager utilizing both buddy and list algorithms, a round-robin scheduler for task management, as well as pipes and semaphores for inter-process communication and synchronization.

License

Notifications You must be signed in to change notification settings

AxelPreitiT/chaOS-v1

 
 

Repository files navigation

chaOS 2.0

Instrucciones

Requerimientos

General

  • Descargar la imagen Docker agodio/itba-so:1.0
docker pull agodio/itba-so:1.0

Linux GUI

  • Contar con una versión de Docker en el dispositivo.
  • Contar con permisos de superusuario.

MacOS

  • Contar con una versión de Docker en el dispositivo.
  • Contar con una versión de Qemu.
  • Contar con permisos de superusuario.

Windows

  • 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/).

Instalación

  1. Descargar el repositorio del proyecto, el cual se encuentra en el siguiente enlace: https://github.com/JoseMenta/TP2_SO.
  2. Desempaquetar el archivo .zip.

Compilación

  1. 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.
  1. Abrir el contenedor de Docker.
docker run -v "${PWD}:/root" --privileged --rm -ti agodio/itba-so:1.0
  1. Moverse al directorio root.
cd ./root
  1. 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
  1. Cerrar el contenedor.
exit

Ejecución

  1. Ejecutar el proyecto.
make run
  1. Escribir la contraseña de superusuario.

Programas del SO

sh

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.
Mensaje de bienvenida al ejecutar el intérprete de comandos

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.
Ejecución de una nueva instancia de la shell

Background & Pipes

<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.
Redirigiendo la salida estándar de wc a la entrada estándar de filter
Redirigiendo la salida estándar de ps a la entrada estándar de filter, y en background


help

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.
Listado de los programas disponibles; a la izquierda, se detalla el comando a ejecutar y, a la derecha, una descripción del programa


mem

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.
Ejecución de mem


ps

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.
Ejecución de ps en dos instantes distintos


loop

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.
Ejecución de loop imprimiendo su mensaje cada 2 segundos


kill

kill <pid>

Este programa permite finalizar la ejecución de procesos indicando el pid del proceso.
Utilizando kill para “matar” el proceso test-processes


nice

nice <pid> <0-4>

Permite modificar el nivel de prioridad de un proceso, indicando su pid y el nuevo nivel de prioridad.
Modificando el nivel de prioridad de test-processes de 3 a 0, usando nice


block & unblock

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.
Bloqueando el proceso test-processes
Desbloqueando el proceso test-processes


sem

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”.
Listado de los semáforos activos


pipe

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.
Estado del pipe de teclado


cat

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).
Ejecución de cat


filter

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.
Ejecución de filter


wc

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).
Ejecución de wc


phylo

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.
Estado inicial de phylo
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.
Aviso del programa de que se está agregando un filósofo
Aviso del programa de que se está removiendo un filósofo
Cabe aclarar que, como mínimo, debe haber dos filósofos y, como máximo, debe haber 15 filósofos.
Ejecución de phylo con 15 filósofos
Ejecución de phylo con 2 filósofos

Soporte

About

A continuation of the chaOS-v0 project. This enhanced version is a simple OS that incorporates a memory manager utilizing both buddy and list algorithms, a round-robin scheduler for task management, as well as pipes and semaphores for inter-process communication and synchronization.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 59.8%
  • Assembly 21.8%
  • Python 17.2%
  • Makefile 1.1%
  • Batchfile 0.1%