Desarrollo de un Sistema Operativo 64 bits basado en el proyecto x64BareBones de Rodrigo Rearden (RowDaBoat).
El sistema operativo cuenta con un kernel monolítico de 64 bits, manejo de interrupciones, system calls, driver de teclado, driver de video y binarios de kernel space y user space separados.
Además se cuenta con dos administradores de memoria. Tanto el kernel como los procesos pueden utilizar estos administradores de memoria física. Es importante aclarar que no funcionan al mismo tiempo, sino que se decide cuál utilizar en tiempo de compilación.
- Reservar y liberar memoria
- Consultar el estado de la memoria
El sistema también cuenta con multitasking pre-emptivo con una cantidad variable de procesos. Para ello el sistema implementa un sistema que permite suspender la ejecución de un proceso y continuar la ejecución de otro (context switching) con el algoritmo Round Robin modificado para contemplar prioridades. (scheduler).
- Crear procesos (con argumentos)
- Obtener el PID del proceso que llama
- Listar todos los procesos: nombre, ID, prioridad, stack y base pointer y foreground
- Matar un proceso arbitrario
- Modificar la prioridad de un proceso arbitrario.
- Bloquear y desbloquear un proceso arbitrario
El sistema implementa semáforos y un mecanismo para que procesos no relacionados puedan compartirlos acordando un identificador a priori. El sistema también permite listar todos los semáforos activos del sistema, su estado y los procesos bloqueados en cada uno. Está libre de busy waiting, deadlock, race conditions y además las instrucciones utilizadas garantizan atomicidad.
- Crear, abrir y cerrar un semáforo.
- Modificar el valor de un semáforo.
- Listar el estado de todos los semáforos del sistema
El sistema implementa pipes unidireccionales y las operaciones de lectura y escritura sobre los mismos son bloqueantes. Todo proceso es capaz de escribir/leer tanto de un pipe como de la pantalla sin necesidad de que su código sea modificado. Notar que esto permite que el intérprete de comandos conecte 2 programas utilizando un pipe y a su vez, estos programas podrán ser ejecutados de forma aislada. El sistema también permite que procesos no relacionados puedan compartirlos acordando un identificador a priori.
- Crear y abrir pipes.
- Leer y escribir de un pipe.
- Listar el estado de todos los pipes del sistema.
- help.
- wc.
- cat.
- filter.
- ps.
- nice.
- block.
- kill.
- phylo.
- otros (consultar help).