- De Luca, Juan Manuel - 60103 - [email protected]
- Kim, Azul Candelaria - 60264 - [email protected]
- Borracci, Ángeles Ailén - 56648 - [email protected]
- Contar con el archivo 60103-60264-60711.zip descargado y descomprimido en su computadora.
- Contar con el programa qemu instalado.
- Contar con el programa docker instalado.
- Contar con acceso a la terminal de su computadora.
- Ubicándose en el directorio del trabajo, correr el comando
docker pull agodio/itba-so:1.0
. - Ubicándose en el directorio del trabajo, correr el comando
docker run -v ${PWD}:/root --security-opt seccomp:unconfined -ti agodio/itba-so:1.0
. Esto hará que se ingrese a docker. - Una vez dentro de docker, dirigirse al directorio Toolchain con el comando
cd root/Toolchain
y ejecutar el comandomake all
. - Salir del directorio Toolchain con
cd ..
y ejecutar nuevamentemake all
. - Salir de docker con el comando
exit
.
- Una vez completada la compilación y ubicado en el directrio del trabajo, correr el comando
./run.sh
si se encuentra en Linux, o./run.bat
si se encuentra en Windows. Esto abrirá las dos terminales correspondientes al trabajo y podrá comenzar a usarse.
help
Despliega el centro de ayuda.mem
Muestra el estado de la memoria.ps
Imprime el estado de todos los procesos.loop
Imprime el ID del proceso corriendo cada cierto tiempo en bucle.kill [PID]
Mata al proceso con el ID pedido.nice [PID,priority]
Cambia la prioridad del proceso PID por la asignada.block [PID]
Bloquea un proceso con el dado PID.unblock [PID]
Desbloquea un proceso con el dado PID.sem
Despliega el estado de los semáforos.pipe
Despliega el estado de las tuberías.cat
Muestra el standard input.wc
Muestra la cantidad de líneas del standard input.filter
Muestra el standard input, eliminando vocales.phylo
Implementa el problema de los filósofos comensales.testmem
Corre el test para el memory manager.testprocess
Corre el test para el scheduler.testprio
Corre el test para cambiar las prioridades de los procesos.testsync
Corre el test para la sincronización (con semáforos).testnosync
Corre el test para la sincronización (sin semáforos).
datetime
Muestra la fecha y hora del Sistema Operativo.inforeg
Muestra el estado de los registros. Para su correcto funcionamiento, presionar la tecla F12 antes de correrlo para así guardar el estado de los registros.printmem [ARGUMENTO]
Realiza un volcado de 32 bytes de memoria a partir de la dirección provista en el argumento.clear
Limpia la pantalla de la shell donde se corra el comando.echo [ARGUMENTO]
Imprime en pantalla el string provisto en el argumento.divzero
Fuerza una división por 0 para que se prodzca una excepción. Luego reinicia la shell y muestra el mensaje de error correspondiente junto con el estado de los registros.invalidopcode
Fuerza un código de operación inválido para que se produzca una excepción. Luego reinicia la shell y muestra el mensaje de error correspondiente junto con el estado de los registros.
- F5 - Sirve para matar el proceso que se encuentra en foreground.
- F12 - Sirve para guardar el estado de los registros.
- CTRL + C - EOF.
Un progrmador podría setear la funcionalidad que quiera para las teclas F1 a F10 mediante punteros a función.
Las syscalls a disposición del usuario son las siguientes:
%rax | Name | %rdi | %rsi | %rdx | %rcx | %r8 | %r9 | %r10 | %r11 |
---|---|---|---|---|---|---|---|---|---|
0 | readKeyboard | char * buffer | uint64_t size | uint64_t * count | - | - | - | - | - |
1 | drawString | char * buffer | uint64_t size | uint64_t x | uint64_t y | uint64_t fontColor | uint64_t bkgColor | uint64_t fontSize | uint64_t alphaBkg |
2 | clearDisplay | uint64_t color | - | - | - | - | - | - | - |
3 | drawLine | uint64_t x | uint64_t y | uint64_t xEnd | uint64_t yEnd | uint64_t color | - | - | - |
4 | drawPixel | uint64_t x | uint64_t y | uint64_t color | - | - | - | - | - |
5 | drawRect | uint64_t xi | uint64_t yi | uint64_t width | uint64_t height | uint64_t color | - | - | - |
6 | drawMatrix | uint64_t x | uint64_t y | uint64_t * matrix | uint64_t width | uint64_t height | uint64_t size | - | - |
7 | getTicks | uint64_t * ticks | - | - | - | - | - | - | - |
8 | getTime | uint8_t mode | uint8_t * target | - | - | - | - | - | - |
9 | getRegisters | uint64_t * registers | - | - | - | - | - | - | - |
10 | getMem | uint64_t address | uint64_t * bytes | uint8_t size | - | - | - | - | - |
11 | isKeyboardEmpty | uint64_t * target | - | - | - | - | - | - | - |
12 | readError | uint64_t * err | - | - | - | - | - | - | - |
13 | setFunctionKeyMethod | uint64_t index | void(*)() | - | - | - | - | - | - |
14 | mallocSyscall | uint64_t size | void** result | - | - | - | - | - | - |
15 | freeMemory | void * pointer | - | - | - | - | - | - | - |
16 | getPid | - | - | - | - | - | - | - | - |
17 | printProcessList | char * buffer | - | - | - | - | - | - | - |
18 | changeProcessPriority | unsigned int pid | unsigned int prio | - | - | - | - | - | - |
19 | blockProcess | unsigned int pid | - | - | - | - | - | - | - |
20 | createProcess | void(*)(char**) entry | int argc | char ** argv | unsigned int fg | int * fd | - | - | - |
21 | killProcess | unsigned int pid | - | - | - | - | - | - | - |
22 | resignCPU | - | - | - | - | - | - | - | - |
23 | exitProcess | - | - | - | - | - | - | - | - |
24 | pipeOpen | uint32_t id | int * toReturn | - | - | - | - | - | - |
25 | pipeClose | uint32_t id | int * toReturn | - | - | - | - | - | - |
26 | pipeRead | uint32_t id | char * str | int *toReturn | - | - | - | - | - |
27 | pipeWrite | uint32_t id | char * buff | int *toReturn | - | - | - | - | - |
28 | printMem | char * buffer | int size | - | - | - | - | - | - |
29 | printPipes | char * buffer | - | - | - | - | - | - | - |
30 | openSemaphore | uint32_t id | uint32_t initVal | int *toReturn | - | - | - | - | - |
31 | waitSemaphore | uint32_t id | int * toReturn | - | - | - | - | - | - |
32 | postSemaphore | uint32_t id | int * toReturn | - | - | - | - | - | - |
33 | closeSemaphore | uint32_t id | int * toReturn | - | - | - | - | - | - |
34 | printSemaphore | char * buffer | - | - | - | - | - | - | - |
35 | sbrSyscall | uint64_t size | void ** pointMem | - | - | - | - | - | - |
Las funciones implementadas son:
void setConsoleUpdateFunction(void (*f)(char *, int))
sirve como endPoint para la librería para imprimir stringschar getChar()
devuelve el siguiente char del buffer del tecladovoid scanf(char * buffer)
escribe en el buffer los char del buffer del teclado hasta que aparezca un '\n'.void printf(char * fmt, ...)
imprime el string formateadovoid setFunctionKey(int index, void(*func)())
setea en una tecla especial (F1-F10) la funcionalidad deseadavoid putChar(char ch)
imprime un charuint64_t getError()
devuelve el error de la última excepcion, sino devuelve 32
Las funciones implementadas son:
int atoi(char * str)
convierte un caracter ASCII a un enteroint intToString(unsigned long long num, char * buffer)
convierte un entero a un stringint strlen(char *str)
devuelve el largo del stringint strcmp(char * str1, char * str2)
devuelve 0 si los strings son iguales, sino distinto a 0 si son distintosint intToBase(unsigned long long num, int base, char*buffer)
convierte un entero a una base dadaint iabs(int num)
devuelve el valor absoluto del enterochar * strcpy(char * dest, char * src)
copia src en destint atohex(char * str)
convierte un hex ASCII a enterochar toUpper(char letter)
pasa el char a mayúsculachar toLower(char letter)
pasa el char a minúsculaint isVowel(char letter)
devuelve 1 si el char es una vocalint isAlfaNum(char letter)
devuelve 1 si el char es una letra o número
Las funciones implementadas son:
void drawString(int x, int y, char * buffer, int dim, uint64_t fontColor, uint64_t backgroundColor, int fontSize, int alphaBackground);
dibuja el string desde la posición (x, y). Si alphaBackground es distinto a 0 entonces no dibuja el fondo.void clearScreen(uint64_t color)
limpia la pantalla con el color dadovoid drawRect(int xi, int yi, int width, int height, uint64_t color)
dibuja un rectángulo desde las coordenadas (xi, yi) con la altura, el ancho y el color dado.
Las funciones implementadas son:
int getSeconds()
devuelve los segundos del tiempo actualint getMinutes()
devuelve los minutos del tiempo actualint getHours()
devuelve la hora del tiempo actualint getDays()
devuelve el día de la fecha actualint getMonth()
devuelve el mes de la fecha actualint getYear()
devuelve el año de la fecha actualint getTicks()
devuelve la cantidad total de ticks del Timer Tick