Documentos de Académico
Documentos de Profesional
Documentos de Cultura
[Rfaga]
La herramienta ms eficaz de depuracin sigue siendo una cuidadosa reflexin, junto con las declaraciones de
impresin juiciosamente colocadas. Brian W. Kernighan (1979)
Tabla de Contenidos
Introduccin
Arquitectura del sistema
Ensamblador
Proceso Kernel
Proceso CPU
Proceso Memoria con Segmentacin Paginada (MSP)
Eventos de logueo obligatorio
Anexo I: Especificacin del Lenguaje ESO
Anexo II: Especificacin de las llamadas al sistema
Anexo III: Uso del ensamblador
Descripcin de las entregas
Normas del Trabajo Prctico
Introduccin
El trabajo prctico consiste en simular ciertos aspectos de un sistema multiprocesador con la capacidad
de ejecutar un lenguaje creado para esta ocasin. Este sistema planificar y ejecutar estos cdigos (en
adelante, Procesos) controlando sus solicitudes de memoria, llamadas al sistema y administrando los
accesos a recursos, como los semforos compartidos.
Adquiera conceptos prcticos del uso distintas herramientas de programacin (API) que brindan
los sistemas operativos modernos.
Entienda aspectos del diseo de un sistema operativo moderno.
Afirme diversos conceptos tericos de sistemas operativos mediante la implementacin prctica
de algunos de ellos.
Se familiarice con tcnicas de programacin de sistemas, como el empleo de makefiles, archivos
de configuracin o archivos de log.
Conozca con grado de detalle la operatoria de Linux mediante la utilizacin de un lenguaje de
programacin de relativamente bajo nivel como C.
Algoritmos de Planificacin.
Estados de un proceso en el sistema y sus transiciones.
Estructura de un proceso/hilo.
Mecanismos IPC.
Programacin concurrente: procesos e hilos.
Sincronizacin y semforos.
Gestin de Memoria: Segmentacin Paginada, Memoria Virtual, Paginacin bajo demanda,
swapping, algoritmos de reemplazo de pginas, asignacin de memoria dinmica.
Caractersticas
Aclaraciones
Debido al fin acadmico del trabajo prctico, los conceptos reflejados son, en general, versiones
simplificadas o alteradas de los componentes reales de hardware y de sistemas operativos modernos, a
fin de resaltar algn aspecto de diseo. En algunos casos los aspectos no fueron tomados de manera
literal, por lo que invitamos a los alumnos a leer las notas y comentarios al respecto que haya en el
enunciado, como as tambin a reflexionar y discutir con sus compaeros, ayudantes y docentes al
respecto.
Siempre que en el enunciado se lea la palabra socket, se refiere a los sockets STREAM tipo AF_INET.
Ensamblador
Este ejecutable es brindado por la ctedra1 como una forma de transformar cdigo ESO (Ensamblador
de Sistemas Operativos) a una abstraccin de cdigo de mquina (denominado Cdigo Ensamblado),
ejecutable por los procesos CPUs, explicados ms adelante en este documento.
Los programas ESO son compilados por el Ensamblador al formato BESO (Bytecodes2 del Ensamblador de
Sistemas Operativos), y debern ser ubicados en algn directorio accesible por los procesos Consola
(tambin descritos en este documento) para que stos puedan enviarlos a ejecutar.
1
2
Proceso Kernel
El proceso Kernel es el proceso principal del sistema. Recibir el cdigo de los Programas a travs de las
Consolas, y planificar sus Hilos a travs de los diversos estados del sistema, siendo responsable de
enviarlos a la CPU adecuada cuando corresponda. Dado que los Procesos, durante su funcionamiento,
pueden crear nuevos Hilos de ejecucin, el Kernel planificar nicamente Hilos (entendiendo a un
Programa que no crea ningn Hilo como un Programa mono-hilo).
Al iniciar el proceso Kernel, ste deber intentar conectarse a la MSP (Memoria de Segmentacin
Paginada) para poder reservar y escribir los segmentos de los Programas.
En algunas implementaciones reales, cierta informacin (como el PID, y el puntero al Segmento de Cdigo) que es
compartida por todos los hilos se guarda en una estructura Process Control Block (PCB) en vez del TCB.
Con esta informacin el Loader podr llenar la estructura del TCB del primer Hilo del Proceso:
Tipo de
datos
Informacin
PID
Numrico
TID
Numrico
KM
Booleano
Numrico
Numrico
Campo
ID
Puntero de Instruccin
Direccin
Direccin
Cursor de Stack
Direccin
Registros de
programacin
A,B,C,D,E
Numrico
Tras generar el TCB, el Loader mover el Hilo creado del Proceso al final de la cola NEW, dejndolo
disponible para que el subsistema Planificador pueda planificarlo.
7
Planificador
El subsistema Planificador es el encargado de distribuir los Hilos en los distintos CPUs.
ste recibir las conexiones de los distintos CPUs, y quedar a la espera de que se enven a ejecutar
nuevos Procesos para comenzar la planificacin.
Ante la eventual desconexin de un CPU con un Proceso en ejecucin, el Planificador deber notificar a
la Consola del Proceso dicha excepcin y abortar la ejecucin de ese Proceso. Se deber considerar que
el Proceso puede haber creado hilos; estos tambin tendrn que abortar.
Realizar las siguientes tareas:
Recibir los TCB de los Procesos y los encolar en la cola de READY, segn el algoritmo de
planificacin de corto plazo Boolean Priority Round Robin (BPRR) por quantums.
Mover a la cola de READY todos los hilos que hayan terminado su Quantum de CPU.
Recibir de cada CPU la informacin actual de cada TCB que termine su ejecucin, enviar a
ejecutar los hilos que estn en READY a los CPUs disponibles, informando al CPU el quantum
asignado. Mover estos hilos a la cola EXEC.
Mover a la cola de EXIT todos los Hilos que:
Hayan concluido su ejecucin
Deban abortar como resultado de una ejecucin errnea (El proceso CPU debe informar
esta situacin al Kernel)
Deban abortar porque la CPU en que estaban ejecutando se desconect del Kernel
Deban abortar porque la Consola asociada se desconect del Kernel
Mover al estado BLOCK a todos los hilos que se bloqueen como resultado de la ejecucin de
alguna instruccin (El proceso CPU debe informar esta situacin al Kernel).
Crear nuevos Hilos cuando el proceso CPU lo indique y los mover a la cola READY. Ver la
seccin de Servicios expuestos a la CPU.
Arranque (Boot)
Los Hilos de los Procesos pueden ejecutar llamadas que les permiten acceder a los recursos protegidos
8
del sistema (ver Llamadas al sistema (System Calls)). Para que esto sea posible, inmediatamente despus
de conectarse a la MSP, el Kernel deber crear una estructura TCB especial con KM = 1 y encolarlo en el
estado BLOCK hasta que la CPU notifique que el Proceso que est ejecutando solicita una llamada al
sistema (a travs de la ejecucin de la instruccin de interrupcin). Este ser el denominado Hilo Kernel.
Una vez generado este TCB Kernel Mode (KM), el Kernel crear su segmento de cdigo en la MSP y lo
llenar con el contenido compilado del Archivo de System Calls provisto por la ctedra4. Este archivo
contiene el cdigo ESO que se ejecutar en la CPU tras una llamada al sistema. Despus crear su
segmento de stack y los registros de programacin de la forma habitual. Notar que la estructura de este
TCB es igual a los TCBs de los programas: la nica diferencia es el valor del campo KM.
Por ltimo, quedar a la escucha de nuevas conexiones de Consolas y CPUs para poder planificar y
enviar a ejecutar.
Llamadas al sistema (System Calls)
Las llamadas al sistema debern estar cargadas en memoria luego de bootear, por lo que el programa
que invoc a alguna en particular puede interrumpirse y dar lugar al hilo Kernel, quien ejecutar esta
rutina en la CPU.
Para lograrlo, cuando el proceso CPU notifique al Kernel que un hilo desea ejecutar una llamada al
sistema que requiere su atencin (INTE), el Kernel recibir el TCB de este hilo cargado y la direccin en
memoria de la llamada a ejecutar y lo encolar en el estado BLOCK5. Luego agregar una entrada en la
cola de llamadas al sistema con el TCB en cuestin.
Como el hilo Kernel tiene prioridad mxima en la planificacin, siempre que haya una CPU disponible y
necesidad de ejecutar una llamada al sistema:
1. Se tomar la primer entrada de la cola y se copiarn los registros de programacin y el PID del
TCB en el TCB KM.
2. Se cargar la direccin de la llamada al sistema en el Puntero de Instruccin del TCB KM.
3. Se enviar a ejecutar en la CPU el TCB KM antes mencionado.
4. Se ejecutar este TCB KM en algn CPU.
5. Una vez terminada la ejecucin del TCB KM, el Kernel volver a bloquear al TCB KM.
6. Se copiarn los registros del TCB KM nuevamente al TCB que pidi la llamada al sistema.
7. Se desbloquear este TCB de usuario, para ser re-planificado.
Al bloquearse, los hilos pierden el Quantum que les restaba ejecutar. Una vez que se finaliza la llamada
al sistema deben ser planificados al final de la cola READY y se les entrega una nuevo Quantum.
4
5
Notar que la forma de ejecucin del hilo Kernel es idntica a la de un programa normal, solo que ste
puede ejecutar operaciones protegidas, y adems, no puede interrumpirse por Quantum.
Dado que solo existe una nica estructura TCB del hilo Kernel, es imposible que, en algn momento
dado, se estn ejecutando dos llamadas al sistema en forma simultnea.
Liberacin de Recursos
Adems, el subsistema Planificador ser el encargado de liberar los recursos de los hilos que lleguen a la
cola EXIT. Deber contemplar que la finalizacin de un hilo ESO puede no implicar la finalizacin del
Proceso padre completo, ya que este puede estar compuesto por varios otros hilos.
estos primeros (prioridad 0) debern ser planificados en su totalidad, antes de empezar a planificar los
de prioridad 1.
Se considera prioritario (prioridad 0) a todo TCB en modo Kernel. De lo contrario, se lo considera noprioritario (prioridad 1)
Interrupcin: Recibe una estructura TCB y una direccin de memoria. Ver seccin Llamadas al
Sistema ms arriba.
Entrada Estndar: Recibe un PID y un identificador de tipo. Pide a la consola del programa
identificado por ese PID que se ingrese una cadena de texto/nmeros (segn el identificador de
tipo). Devuelve a la CPU la cadena ingresada.
Salida Estndar. Recibe un PID y una cadena de texto. Escribe en la consola del programa
identificado por ese PID la cadena de texto recibida.
Crear Hilo. Recibe una estructura TCB. Crea un nuevo hilo con el TCB recibido y lo enva a
planificar normalmente. Se le debe crear un nuevo segmento de stack en la MSP pero no un
nuevo segmento de cdigo ya que este es igual para todos los hilos de un mismo programa.
Join: Recibe un TID llamador y un TID a esperar. Enva al hilo identificado por el TID llamador
recibido al estado BLOCK hasta que el otro hilo del mismo programa identificado por el TID a
esperar finalice su ejecucin.
Bloquear: Recibe una estructura TCB e Identificador de Recurso. Enva al estado BLOCK al hilo
identificado en el TCB recibido. Adems, lo introduce al final de la cola de espera del recurso
especificado en el Identificador de Recurso recibido.
Despertar: Recibe un Identificador de Recurso. Remueve al primer hilo de la cola de espera del
recurso especificado por Identificador de Recurso, adems lo remueve del estado BLOCK y lo
coloca al final de la cola READY para que vuelva a ser planificado.
11
Archivo de Configuracin
Parmetro
Valor
Descripcin
Puerto de Escucha
[numrico]
[texto]
[numrico]
[numrico]
[texto]
PUERTO
Direccin IP de la MSP
IP_MSP
Puerto de la MSP
PUERTO_MSP
Ubicacin Syscalls
SYSCALLS
Ejemplo:
PUERTO=112233
IP_MSP=192.168.1.104
PUERTO_MSP=54321
QUANTUM=4
SYSCALLS=/home/utnso/kernel/syscalls.bc
12
Proceso Consola
La Consola es una interfaz simple del Kernel que permite enviar a ejecutar un programa compilado al
sistema y funcionar como consola del mismo para recibir los resultados de su ejecucin o los mensajes
que el Proceso necesite imprimir por pantalla. No es el encargado de compilar el cdigo; esto es una
etapa previa.
Arquitectura de la Consola
Recibir por parmetro la ubicacin del archivo a ejecutar, se conectar al proceso Kernel, y le enviar el
contenido del archivo con el cdigo BESO.
A partir de ese momento, el proceso quedar a la espera de mensajes correspondientes a las sentencias
de entrada y salida con valores que deber pedir o mostrar por consola, hasta que su ejecucin haya
concluido.
Podrn existir varias instancias de este proceso en el sistema ejecutando diferentes Procesos de manera
independiente. Las Consolas y el Kernel deben poder ejecutar en mquinas diferentes.
Archivo de Configuracin
Existir un archivo de configuracin con los parmetros necesarios para el funcionamiento del Proceso
Programa, guardado en una ubicacin en el disco que deber ser referenciada por la variable de entorno
ESO_CONFIG.
Parmetro
Valor
Descripcin
IP Kernel
[texto]
[numrico]
IP_KERNEL
Puerto Kernel
PUERTO_KERNEL
Ejemplo:
IP_KERNEL=192.168.0.20
PUERTO_KERNEL=5000
13
Proceso CPU
El proceso CPU es el encargado de interpretar y ejecutar las sentencias de ESO. Se encontrar en
permanente contacto el Kernel (para tomar programas a ejecutar) y la MSP (para poder acceder al
espacio de direcciones del hilo en ejecucin).
Dado que el proceso Kernel planificar hilos de ESO, la CPU, a su vez, ejecutar esos hilos.
Al iniciar, intentar conectarse a estos dos procesos. En caso de no poder conectarse, abortar su
ejecucin informando por pantalla y log el motivo.
Una vez conectado, le solicitar al Kernel el TCB del prximo hilo a ejecutar y comenzar a ejecutar la
operacin de ESO especificada por el Puntero de Instruccin del mismo.
Adems, junto con el TCB, tambin recibir del Kernel el tamao del Quantum que indicar la cantidad
de instrucciones a ejecutar antes de solicitar el prximo TCB al Kernel.
Ciclo de ejecucin
Cada vez que el CPU quiera ejecutar una instruccin, realizar los siguientes pasos:
1. Cargar los registros de la CPU con los datos del TCB a ejecutar.
2. Usando el registro Puntero de Instruccin, le solicitar a la MSP la prxima instruccin a
ejecutar.
3. Interpretar la instruccin en BESO y realizar la operacin que corresponda. Para conocer
todas las instrucciones existentes y su propsito, ver el Anexo I: Especificacin de ESO.
4. Actualizar los registros de propsito general del TCB correspondientes segn la especificacin
de la instruccin.
5. Incrementa el Puntero de Instruccin.
6. En caso que sea el ltimo ciclo de ejecucin del Quantum, devolver el TCB actualizado al
proceso Kernel y esperar a recibir el TCB del prximo hilo a ejecutar. Si el TCB en cuestin
tuviera el flag KM (Kernel Mode) activado, se debe ignorar el valor del Quantum.
7. Volver al punto 1).
14
Aclaraciones
En cualquier caso, si cualquier llamada diera como resultado un error por Violacin de
Segmento o Memoria Llena, se cancelar la ejecucin del programa, se le notificar al Kernel la
situacin, y se solicitar el TCB del prximo hilo a ejecutar.
Solo cuando el TCB en ejecucin tenga el flag KM est activado se podrn ejecutar las
instrucciones protegidas.
En este modelo de llamadas al sistema, se logra ejecutarlas cargando valores en los registros,
que servirn como parmetros de las funciones del kernel. Luego se ejecuta la instruccin de
INTErrupcin, con el nmero de rutina de Kernel, que casualmente es el desplazamiento dentro
del archivo de system calls, cargado con anterioridad.
Archivo de Configuracin
Parmetro
Valor
Descripcin
[texto]
[numrico]
[texto]
[numrico]
[numrico]
IP_KERNEL
Direccin IP de la MSP
IP_MSP
Puerto de la MSP
PUERTO_MSP
Retardo Instruccin
RETARDO
15
Ejemplo:
IP_KERNEL=192.168.1.103
PUERTO_KERNEL=12345
IP_MSP=192.168.1.104
PUERTO_MSP=54321
RETARDO=800
16
Inicio
Una vez iniciada, la MSP reservar un nico gran bloque de memoria que utilizar como memoria
principal. El tamao de este bloque estar definido por archivo de configuracin.
Luego, se generarn todas las estructuras administrativas necesarias para administrar la memoria segn
el mecanismo de segmentacin paginada7. La MSP soportar una cantidad mxima de segmentos por
programa de 4096, tamao de los mismos de hasta 4096 Bytes, pginas de tamao fijo 256 Bytes. Esto
da como resultado direcciones lgicas de tamao 32 bits, segn el siguiente esquema:
Una vez inicializado el subsistema, quedar a la escucha, de nuevas conexiones por parte del Kernel y las
CPUs. Por cada conexin crear un hilo dedicado a atenderla, los cuales ejecutarn en forma
independiente de los dems y respondern a los operaciones que la correspondiente CPU o Kernel
soliciten. Adems, quedar a la espera del ingreso de comandos a travs de la consola (Ver seccin
Consola de la MSP ms abajo).
Se recomienda leer los captulos del libro correspondientes a Gestin de Memoria, Segmentacin, y Paginacin.
Estas estructuras administrativas no se guardarn en el gran bloque de memoria alocada al inicio (memoria
principal), en l se guardar exclusivamente la informacin de los procesos ejecutando en el sistema, por ejemplo:
cdigo, stack, porciones de memoria dinmica, etc.
7
17
Interfaz
Las operaciones a las que podr responder la MSP, y sus correspondientes parmetros, son:
Crear Segmento (PID, Tamao en Bytes): Crea un nuevo segmento para el programa PID del
tamao Tamao en Bytes. Devuelve la direccin virtual base del segmento. Se debe verificar que
la MSP tenga espacio disponible en memoria principal o en el espacio de swapping, en caso de
no tener espacio deber retornar Error de Memoria Llena.
Destruir Segmento (PID, Base del Segmento): Destruye el segmento identificado por Base del
Segmento del programa PID. Libera la memoria que ocupaba dicho segmento.
Solicitar Memoria (PID, Direccin Lgica, Tamao): Para el espacio de direcciones del proceso
PID, devuelve la cantidad en bytes Tamao comenzando desde Direccin Lgica. En caso que el
pedido intente solicitar datos desde una posicin de memoria invlida o que el mismo exceda
los lmites del segmento, retornar el correspondiente error de Violacin de Segmento
(Segmentation Fault).
Escribir Memoria (PID, Direccin Lgica, Bytes a Escribir, Tamao): Para el espacio de
direcciones del proceso PID, escribe hasta Tamao bytes del buffer Bytes a Escribir comenzando
en la direccin Direccion Lgica. En caso que el pedido intente escribir datos en una posicin de
memoria invlida o que el mismo exceda los lmites del segmento, retornar el correspondiente
error de Violacin de Segmento (Segmentation Fault).
Todas las direcciones de memoria retornadas por la MSP deben ser nmeros enteros sin signo de 32
bits.
Notar que esta interfaz de operaciones no puede ser ampliada, y es la nica forma que tienen los
procesos CPU y Kernel de comunicarse con la MSP.
La MSP crear un archivo de swapping por cada pgina que intercambie a disco. El nombre de cada
18
archivo estar compuesto por el PID del Proceso, el nmero de segmento y el nmero de pgina, de
forma de poder identificar exactamente a que pgina de que Proceso corresponde.
Cuando la pgina es intercambiada de vuelta a memoria principal, el archivo debe borrarse, liberando el
espacio en disco. Todos los archivos de swapping ocupan el mismo espacio en disco, que es el tamao
de la pgina.
El tamao del espacio de intercambio ser especificado por archivo de configuracin.
Algoritmo de sustitucin de pginas
A la hora de seleccionar un marco en uso como vctima para intercambiarlo a disco, el sistema deber
soportar al menos dos8 de los siguientes algoritmos:
FIFO
Clock
Clock Modificado o Algoritmo mejorado de segunda oportunidad.
LRU
Consola de la MSP
Al iniciar, la MSP tambin deber esperar la recepcin de comandos por teclado que le permitirn al
usuario ejecutar las operaciones que la misma soporta, adems de solicitar informacin sobre el estado
de la memoria.
Deber soportar al menos los siguientes comandos:
La ctedra determinar en forma aleatoria cuales son los 2 algoritmos asignados a cada grupo.
19
Tabla de Segmentos
Imprime el contenido de la/las tablas de segmentos de todos los procesos ESO. Por cada
segmento se debe imprimir al menos: PID, nmero de segmento, tamao, direccin virtual base
del segmento.
Tabla de Pginas [PID]
Imprime el contenido de la/las tablas de pginas del Proceso ESO <PID>. Por cada segmento se
debe imprimir al menos: Nmero de segmento al que pertenece, si se encuentra en memoria
principal o esta swappeada.
Listar Marcos
Imprime una lista de todos los marcos de memoria existentes en el sistema, indicando: Nmero
de Marco, si est ocupado o no y por qu programa, y toda la informacin relacionada con los
algoritmos de reemplazo de pginas implementados9.
El resultado de todos los comandos especificados ms arriba debe ser escrito tanto en el archivo de log
de la MSP como en la pantalla.
Aclaraciones
Algunas aclaraciones sobre el funcionamiento de la MSP:
Todos los Procesos tendrn como primer segmento al de nmero 0 (cero), por lo tanto la primer
direccin lgica referenciable de memoria ser la 0x00000000.
Crear nuevos segmentos con sus nuevas pginas no implica asignarles marcos libres de memoria
principal en forma inmediata. Los marcos se asignarn al segmento conforme el programa vaya
utilizando (escribiendo o leyendo) las pginas referenciadas. Ser responsabilidad de las
estructuras de administracin de la MSP detectar esta situacin y conceder el marco
correspondiente cuando llegue el momento10. Sin embargo, la MSP es responsable de detectar
que tiene memoria suficiente para alojar el nuevo segmento (considerando la memoria principal
+ el espacio de intercambio) y responder en consecuencia.
Esta informacin se utilizar para validar el correcto funcionamiento de los algoritmos de sustitucin de pginas.
Leer la seccin del libro correspondiente a Paginacin bajo demanda
10
20
Archivo de configuracin
Parmetro
Valor
Descripcin
Puerto de escucha de
conexiones
[numrico]
[numrico]
[numrico]
[texto]
PUERTO
Tamao de memoria
principal
CANTIDAD_MEMORIA
Algoritmo de
Sustitucin de Pginas
SUST_PAGS
Ejemplo:
PUERTO=12345
CANTIDAD_MEMORIA=100
CANTIDAD_SWAP=10
SUST_PAGS=CLOCK
21
Kernel, CPU
Para estos procesos se deber utilizar la shared library ansisop-panel11 y llamar a las funciones
correspondientes (declaradas en panel.h, kernel.h, y cpu.h) cada vez que ocurran ciertos eventos. En
principio, la biblioteca, al recibir los eventos, los guardar en un archivo de log.
Por ejemplo, cuando una CPU reciba un TCB para ejecutar con quantum de 3, se deber invocar a:
ejecucion_hilo(tcb, 3);
MSP
Se debern loguear los siguientes eventos:
Inicio de la MSP, indicando: tamao de la memoria principal, tamao del archivo de paginacin.
Conexin de un CPU/Kernel.
Recepcin de una solicitud por parte del Kernel o alguna CPU, indicando cual fue, y que
parmetros se recibieron.
Creacin/destruccin de segmentos indicando si se pudo satisfacer la operacin o si hubo un
error.
Asignacin/desasignacin de marcos de memoria principal a un programa.
Intercambio (swapping) de una pagina/paginas haca/desde disco.
Memoria principal llena/espacio de intercambio lleno.
En general, no se debera imprimir por pantalla ninguno de estos eventos, sino que para ello debe
usarse el archivo de log que es persistente. En general, se reservar la impresin por pantalla para
indicar terminaciones anormales, escribiendo los detalles en el archivo de log.
Para poder seguir las entradas que va logueando un programa, se recomienda usar el comando: tail
-f <archivo de log>, que va imprimiendo nuevas lneas conforme va creciendo dicho archivo. Por
ejemplo:
> tail -f kernel.log
Cada vez que un proceso inicie su ejecucin, deber imprimir en el log una lnea especial indicando que
11
22
comenz la ejecucin del mismo. Adems, es posible ampliar la cantidad de eventos a loguear por
encima de los mnimos especificados arriba, siempre que contribuya a entender el funcionamiento del
programa y el mismo siga siendo legible y fcil de seguir. Se recomienda utilizar el TAD de Logging de la
Commons Library (link) que facilita la generacin y escritura de archivos de log.
23
24
http://es.wikipedia.org/wiki/Operador_a_nivel_de_bits#Desplazamiento_l.C3.B3gico
25
13
De tener una base de stack en 100, y un cursor en 130 (S-X=30). Al crear un nuevo stack, la direccin de este
podra ser 500, por lo que el cursor tendr que ser 530 (S-X=30).
26
Bloquea el programa que ejecut la llamada al sistema hasta que el recurso apuntado por B se
libere.
La evaluacin y decisin de si el recurso est libre o no es hecha por la llamada al sistema WAIT
pre-compilada.
34. WAKE
Desbloquea al primer programa bloqueado por el recurso apuntado por B.
La evaluacin y decisin de si el recurso est libre o no es hecha por la llamada al sistema
SIGNAL pre-compilada.
Notar que las instrucciones son de tamao variable tanto por la cantidad de parmetros que reciben
como por el tamao de cada uno de los mismos. Sin embargo, interpretando los primeros 4 bytes de
cada una es posible conocer de qu instruccin se trata, y, por lo tanto, cual es el tamao de la misma.
27
28
LOAD A,23
GOTO A
LOAD B,5
LOAD C,9
XXXX
Tambin soporta comentarios, tanto en una lnea vaca, como al final de una lnea, por lo que efecta
esta transformacin:
LOAD A,7^ Cargar 7 en A
^Cargar 90 en B
LOAD B,90
MULR A,B^ 7 * 90
LOAD A,7
LOAD B,90
MULR A,B
Dado que al transformar a cdigo de mquina, el archivo es ilegible, el ensamblador tambin nos brinda
la posibilidad de des-ensamblar, pero los comentarios y las etiquetas se habrn perdido.
29
Checkpoint 1
Fecha: 13 de Septiembre
Objetivos:
30
Checkpoint 2
Fecha: 27 de Septiembre
Objetivos:
Construir dos programas que permitan recibir mltiples conexiones por sockets y gestionarlas utilizando por un
lado un multiplexor de entrada/salida (select, epoll, etc) y por el otro delegar su atencin a hilos
independientes.
Realizar un cliente simple que permita enviar mensajes estructurados a los servidores
Utilizar semforos para sincronizar hilos que acceden a una lista compartida
Disear el diagrama de estados de un TCB en el sistema
Disear el impacto de las operaciones sobre las estructuras del Proceso
Implementar la interfaz de mensajes de la MSP y su correspondiente validacin
Lectura recomendada:
Sistemas Operativos, Silberschatz, Galvin - Captulo 4: Hilos
Sistemas Operativos, Silberschatz, Galvin - Captulo 5: Planificacin del Procesador
Checkpoint 3
Fecha: 18 de Octubre
Objetivos:
31
Checkpoint 4 - Presencial
Fecha: 1 de Noviembre
Objetivos:
Checkpoint 5
Fecha: 20 de Noviembre
Objetivos:
32