Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Duda sobre la replanificación en syscalls y log de eliminar proceso memoria #4396

Open
inaaranza opened this issue Nov 17, 2024 · 3 comments

Comments

@inaaranza
Copy link

inaaranza commented Nov 17, 2024

🛠️ Lenguaje

C

Buenas!

Tengo una duda sobre la manera de replanificar cuando se encuentra una syscall. Mi duda es en qué momento se realiza la replanificación. Lo que interpeto es lo siguiente pero siento que estoy pifiando en algo:

  1. La CPU va ejecutando instrucciones
  2. Hace fetch, decode y execute de alguna syscall (por ejemplo THREAD_CREATE)
  3. Cuando la CPU ejecuta esa instruccion (solicitando al kernel que cree el hilo etc), el kernel desaloja a ese hilo y pone a ejecutar otro (en el caso de FIFO)

En el caso de las pruebas básicas de PLANI que fueron enviadas:
SET DX 0
SET AX 1
THREAD_CREATE PLANI_THREAD 6

Despues de ejecutar THREAD_CREATE se deberia desalojar el hilo que tenía esta instrucción y se debería empezar a ejecutar el hilo creado? Todas las syscalls deberían realizar un desalojo o algunas pueden ser no bloqueantes?

Por otro lado, a la hora de realizar el log obligatorio de memoria:
destrucción de Proceso: “## Proceso <Creado/Destruido> - PID: - Tamaño: <TAMAÑO>
El tamaño a printear debería ser el tamaño del proceso eliminado, no? Supongo que sí pero me quiero sacar la duda, ya que capaz es el tamaño de la partición donde estaba alojado el proceso (en caso de particiones dinámicas el tamaño de la partición es el mismo que el proceso, pero si son fijas puede ser distinto)

Muchas gracias:)

@iago64
Copy link
Contributor

iago64 commented Nov 18, 2024

Buenas! Cómo va?

En este TP para los enunciados de C, al momento de crear un nuevo Thread uds lo único que tienen que hacer es poner este nuevo thread en Ready como dice el enunciado, cito a continuación:

THREAD_CREATE, esta syscall recibirá como parámetro de la CPU el nombre del archivo de pseudocódigo que deberá ejecutar el hilo a crear y su prioridad. Al momento de crear el nuevo hilo, deberá generar el nuevo TCB con un TID autoincremental y poner al mismo en el estado READY.

Una vez puesto el nuevo thread en Ready el Thread que invocó la syscall, continúa ejecutando, como cualquier syscall no bloqueante.

Respecto a la segunda duda, si, el tamaño que tienen que loguear es el tamaño del proceso.

Saludos.-

@inaaranza
Copy link
Author

Hola!

Muchas gracias por la respuesta :)
Por otro lado, ¿solo la syscall DUMP_MEMORY bloquea al hilo? ¿El resto de las syscalls no bloquea al hilo que la invoca?
En las pruebas iniciales de planificación con FIFO, al no ser bloqueante el THREAD_CREATE, ¿Entonces debería solamente ejecutar todo el hilo main y no ejecutar ninguno de los hilos que crea?

Saludos:)

@iago64
Copy link
Contributor

iago64 commented Nov 18, 2024

Buenas! Cómo va?

Tenes que ver cada syscall en particular, por ejemplo MUTEX_LOCK te puede bloquear, mientras que MUTEX_UNLOCK no, o el caso de IO que te bloquea siempre al igual que DUMP_MEMORY.

Saludos.-

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants