Вы находитесь на странице: 1из 33

Ingeniera en Sistemas de Informacin

[Est CoverFlow]
Porque para entender la recursividad primero hay que comprender la recursividad

Ctedra de Sistemas Operativos Trabajo prctico Cuatrimestral

- 1C2014 Versin [1.0]

Tabla de Contenidos
Introduccin Objetivos del Trabajo Prctico Caractersticas Arquitectura del sistema Procesos Programa Proceso Kernel Proceso Unidad de Memoria irtual !UM " Proceso CPU

Ane#o I $ Modelo de %egmentacin Ane#o II $ &loque de Control del Programa !PC&" Ane#o III ' (s)eci*icacin del +enguaje An%I%OP Ane#o I ' %tac, Ane#o $ Parser de An%I%OP

-escri)cin de las entregas

Introduccin
(l trabajo )rctico consiste en simular ciertos as)ectos de un sistema multi)rocesador con la ca)acidad de inter)retar la ejecucin de scri)ts escritos en un lenguaje creado )ara esta ocasin. (ste sistema )lani*icar / ejecutar estos scri)ts !en adelante 0Programas1" controlando sus solicitudes de memoria / administrando los accesos a recursos2 como los dis)ositivos de entrada3salida / los sem*oros com)artidos.

Objetivos del Trabajo Prctico


Mediante la reali4acin de este trabajo se es)era que el alumno5 Adquiera conce)tos )rcticos del uso distintas 6erramientas de )rogramacin !API" que brindan los sistemas o)erativos modernos (ntienda as)ectos del dise7o de un sistema o)erativo moderno A*irme diversos conce)tos tericos de sistemas o)erativos mediante la im)lementacin )rctica de algunos de ellos %e *amiliarice con t8cnicas de )rogramacin de sistemas2 como el em)leo de ma,e*iles2 arc6ivos de con*iguracin / arc6ivos de log Cono4ca con grado de detalle la o)eratoria de +inu# mediante la utili4acin de un lenguaje de )rogramacin de relativamente bajo nivel como C

Caractersticas
Modalidad5 gru)al !9 integrantes" / obligatorio Tiem)o estimado )ara su desarrollo5 :; semanas <ec6a de comien4o5 sbado :=$Abril <ec6a de entrega5 sbado :=$>ulio <ec6a de )rimer recu)eratorio5 sbado :?$>ulio <ec6a de segundo recu)eratorio5 sbado ;=$Agosto +ugar de correccin5 +aboratorio de Medrano

Aclaraciones
-ebido al *in acad8mico del trabajo )rctico2 los conce)tos re*lejados son2 en general2 versiones sim)li*icadas o alteradas de los com)onentes reales de 6ard@are / de sistemas o)erativos modernos2 a *in de resaltar algAn as)ecto de dise7o. (n algunos casos los as)ectos no *ueron tomados de manera literal2 )or lo que invitamos a los alumnos a leer las notas / comentarios al res)ecto que 6a/an en el enunciado2 como as tambi8n a re*le#ionar / discutir con sus com)a7eros2 a/udantes / docentes al res)ecto.

Arquitectura del sistema

Procesos Programa
(l Programa es un )roceso sim)le que )ermite enviar a ejecutar cdigo Ansiso) al sistema / *uncionar como consola del mismo )ara recibir los resultados de su ejecucin o los mensajes que el scri)t necesite im)rimir )or )antalla.

Arquitectura del Proceso Programa


Al iniciar2 el )roceso recibir como )rimer argumento el nombre del arc6ivo a )rocesar. +eer su arc6ivo de con*iguracin2 se conectar mediante sockets: al Proceso Kernel /2 luego de un intercambio de mensajes inicial2 enviar el cdigo Ansiso) del Programa. A )artir de ese momento2 el )roceso quedar a la es)era de mensajes corres)ondientes a las sentencias imprimir e imprimirTexto con valores que deber mostrar )or consola2 6asta que su ejecucin 6a/a concluido. Podrn e#istir varias instancias de este )roceso en el sistema ejecutando )rogramas Ansiso) de manera inde)endiente. (l )roceso Programa deber )oder ser utili4ado como int8r)rete de scri)ts Ansiso) mediante el encabe4ado 6as6bang !BC"= / deber terminar con una lnea en blanco.

Archivo de Configuracin
(#istir un arc6ivo de con*iguracin con los )armetros necesarios )ara el *uncionamiento del : %iem)re que en el enunciado se lea la )alabra soc,et2 se re*iere a los soc,ets %TD(AM ti)o A<EIF(T = er 6tt)533mgarciaisaia.git6ub.io3tutorial$c3blog3=;:G3;H3=;3s6e$bangs$s6e$bangs3

Proceso Programa2 guardado en una ubicacin en el disco que deber ser re*erenciada )or la variable de entorno ANSISOP_CONFIG. Parmetro Puerto Kernel IP Kernel Valor Inum8ricoJ Inum8ricoJ Descripcin Puerto TCP donde se encuentra escuc6ando el Kilo P+P -ireccin IP donde se encuentra ejecutando el Kilo P+P

(jem)lo5 IP: 192.168.0.20 Puerto: 5000

Proceso Kernel
(l )roceso Kernel es el )roceso )rinci)al del sistema. Decibir los )rogramas / )lani*icar su ejecucin en el sistema utili4ando )rinci)almente los 6ilos P+P / PCP descritos a continuacin.

Planificador de argo Pla!o "P P#


(l Plani*icador de +argo Pla4o ser el encargado de mantener el grado de multi)rogramacin del sistema en el valor de*inido. Tambi8n ser el )unto de entrada al sistema2 encargado de recibir las cone#iones de los nuevos Programas. (l P+P recibir las cone#iones de los nuevos Programas al sistema2 /2 )or cada uno2 crear su estructura PC&2 solicitar al Proceso UM !el encargado de manejar / gestionar la memoria en este sistema" cuatro segmentos de tama7o su*iciente !cdigo literal2 ndice de etiquetas / ndice de *unciones2 ndice de cdigo / stac," / encolar el )roceso segAn el algoritmo de )lani*icacin de largo )la4o %>F. Para estimar el tama7o del job utili4ar la siguiente ecuacin5 peso = 5 ca!tidad_de_eti"uetas # $ ca!tidad_de_%u!cio!es # ca!tidad_total_de_li!eas_de_codi&o

(n todo momento se deber )oder ver en )antalla el estado de la cola de )rocesos en es)era )ara ser ejecutados2 / su corres)ondiente )eso. Creacin del PC$ Al recibir la cone#in de un nuevo Programa2 el P+P intercambiar unos mensajes iniciales con el mismo2 )ara luego recibir la totalidad del cdigo *uente del scri)t que se deber ejecutar. (l P+P crear la estructura PC&2 asignndole un identi*icador Anico2 / usar la *uncionalidad de )re)rocesamiento del )arser2 que recibir todo el cdigo del scri)t / devolver una estructura con in*ormacin del )rograma. (sta estructura contendr5
L L L

Primer instruccin a ejecutar del )rograma Mndice de etiquetas / *unciones seriali4ado Mndice de cdigo seriali4ado

L L

Tama7o del ndice de etiquetas / *unciones Tama7o del ndice de cdigo

A )artir de esta in*ormacin2 el P+P )odr reservar los segmentos )ara los segmentos de Mndices2 tanto de Instrucciones como de (tiquetas. Adems2 dado que el tama7o del %tac, es )re*ijado / que el tama7o del segmento de Cdigo coincide con el tama7o del scri)t2 el P+P estar en condiciones de reservar todos los segmentos de memoria del Programa. Una ve4 reservados los segmentos2 escribir el cdigo del scri)t en el segmento corres)ondiente2 / luego 6ar lo )ro)io con los Mndices de Instrucciones / de (tiquetas2 ambos )resentes en la estructura devuelta )or el )re)rocesamiento. %i no se )udiera obtener es)acio su*iciente )ara alguno de los segmentos que necesita usar el )roceso2 entonces se le rec6a4ar el acceso al sistema2 in*ormndolo o)ortunamente en la consola del )roceso Programa corres)ondiente. Por Altimo2 el P+P iniciali4ar el Program Counter del )rograma al valor que el )re)rocesamiento indique como la Primer Instruccin2 )ara luego encolar al )roceso en donde la )lani*icacin lo indique.

Planificador de Corto Pla!o "PCP#


(l subsistema Plani*icador de Corto Pla4o es el encargado de distribuir los )rocesos en los distintos CPUs. (ste recibir las cone#iones de los distintos CPUs / quedar a la es)era de que el P+P de)osite el PC& de un nuevo )rograma a ejecutar en la estructura de cola que ambos subsistemas com)arten. Ante la eventual descone#in de un CPU con un Programa en ejecucin2 el PCP deber noti*icar a la consola del Programa dic6a e#ce)cin / dar )or concluida la ejecucin de ese )rograma. Deali4ar las siguientes tareas5 L L L L L Decibir los PC& del P+P / los encolar en la cola de D(A-N2 segAn el algoritmo de )lani*icacin de corto )la4o que corres)onda Mover a la cola de D(A-N todos los )rocesos que 6a/an terminado su r*aga de CPU / concludo su entrada3salida en *uncin de la )rioridad de cada uno (nviar a (jecutar los )rocesos que esten en D(A-N a los )rocesadores dis)onibles2 in*ormando al c)u el quantum asignado Mover a la cola de (OIT todos los )rocesos que 6a/an concludo su ejecucin Decibir de cada CPU la in*ormacin actual de cada PC& en ejecucin / enviar a cada CPU libre al )rimer elemento de la cola de D(A-N

Tendr tambi8n una res)onsabilidad adicional que ser la de inter)retar determinadas llamadas al sistema / )roveer servicios que e#cedan sus ca)acidades a los Programas en ejecucin %&stem Calls (l lenguaje Ansiso) es lo su*icientemente )otente )ara )ermitir que los Programas trabajen de manera colaborativa )ara resolver una tarea es)ec*ica. (n )articular )ermite que el Programa utilice ariables Plobales al sistema2 cu/o valor es accesible )or cualquier Programa en ejecucin. Para evitar situaciones de condiciones de carrera brinda tambi8n al )rogramador la )osibilidad de utili4ar %em*oros )ara sincroni4ar la ejecucin de ciertas )orciones de sus Programas. Por Altimo2 gestionar los )edidos de ejecucin de o)eraciones de entrada3salida2 administrando las colas de es)era de cada dis)ositivo. +as %/stem Calls sern enviadas )or el Proceso CPU mediante el soc,et de comunicacin que lo une con el PCP. (ste recibir la solicitud / res)onder en consecuencia. (#isten cinco %/stem Calls que so)orta el Kernel5 obtenerEvalor Iidenti*icador de variable globalJ grabarEvalor Iidenti*icador de variable globalJ @ait Iidenti*icador de sem*oroJ signal Iidenti*icador de sem*oroJ entradaEsalida Iidenti*icador de dis)ositivoJ Iunidades a utili4arJ (n el cdigo Ansiso) el identi*icador de la variable com)artida2 )ara di*erenciarlo de las variables normales2 comen4ar con el caracter signo de admiracin (!)2 seguido del identi*icador de un caracter al*ab8tico2 )or ejem)lo5 Ca2 Cg2 Cq. %e observa que el sistema )ermite un m#imo de =Q variables globales2 iniciali4adas en cero.

+os sem*oros estarn de*inidos )or arc6ivo de con*iguracin con un identi*icador al*anum8rico / un valor inicial2 )or ejem)lo5 Semaforo1 o redlight8. %e crearn al iniciar el )roceso Kernel junto con su corres)ondiente 6ilo )ara encolar los Programas que se encuentren bloqueados es)erando un sem*oro. %e considera una e#ce)cin abortiva intentar acceder a una variable global o a un sem*oro ine#istente / no est dentro del alcance de la evaluacin.

'ilos de entrada(salida "'IO#


Por arc6ivo de con*iguracin se de*inir la cantidad de dis)ositivos de entrada3salida que 6abr )resentes en el sistema. Para im)lementarlos2 se lan4ar un Kilo de (ntrada3%alida !KIO" )or cada dis)ositivo. Cada instancia del KIO tendr un identi*icador / un valor de retardo en milisegundos )or unidad de ejecucin. Como se observa en el Ane#o2 desde el lenguaje Ansiso) se )uede solicitar que un )rograma realice entrada3salida en un dis)ositivo mediante su identi*icador / una cantidad de unidades de ejecucin2 )or ejem)lo5 io 'isco () (l )rimer )armetro (Disco) corres)onde al identi*icador del dis)ositivo de entrada3salida2 )or lo que debera e#istir en el sistema un KIO con identi*icador -isco (l segundo )armetro (10) es la cantidad de unidades de ejecucin que deben reali4arse. Por cada unidad2 el KIO debe generar una demora de*inida en milisegundos. Por ejem)lo2 si el KIO -isco tiene con*igurado un retardo de :;;;ms2 )ara com)letar la o)eracin el 6ilo deber es)erar :; segundos.

Archivo de Configuracin
Al iniciar2 el )roceso Kernel deber leer los siguientes )armetros de un arc6ivo de con*iguracin2 el cul )odr ser )arametri4able como )rimer argumento del )rograma. Parmetro PuertoE)rogramas P*+,TO_P,OG PuertoECPUs P*+,TO_CP* Ruantum -*ANT*. Detardo Ruantum ,+TA,'O Prado Multi)rogramacin .*/TIP,OG,A.ACION Identi*icadores Valor Inum8ricoJ Inum8ricoJ Inum8ricoJ Inum8ricoJ Descripcin Puerto TCP utili4ado )ara recibir las cone#iones de los Programas Puerto TCP utili4ado )ara recibir las cone#iones de los CPUs alor del Ruantum !en instrucciones a ejecutar" del algoritmo Dound Dobin alor de retardo en milisegundos que el CPU deber es)erar luego de ejecutar cada sentencia Prado de multi)rogramacin del sistema Identi*icador de cada sem*oro del sistema.

Inum8ricoJ Iarra/5

%ema*oros 0A/O,_S+.AFO,O alores Iniciales %ema*oros S+.AFO,OS Detardos (ntrada %alida 1IO

al*anum8ricoJ Iarra/5 num8ricoJ Iarra/5 num8ricoJ

Cada )osicin del arra/ re)resenta un sem*oro alor inicial de cada sem*oro Detardo en milisegundos de cada unidad de o)eracin de entrada3salida. Cada )osicin del arra/ re)resenta un dis)ositivo de entrada3salida Identi*icador de cada dis)ositivo de entrada3salida Cada )osicin del vector est asociada a su corres)ondiente retardo

Identi*icadores (ntrada %alida I'_1IO

Iarra/5 al*anum8ricoJ

(jem)lo5 ID_HIO=[Disco, Impresora, Sca HIO=[1000, 2000, 1000! S"#$%O&OS=[S"#1, S"#2, S"#'! ($)O&_S"#$%O&O=[0, 0, 5! #*)+IP&O,&$#$-IO.=6 P*"&+O_P&O,=5000 P*"&+O_-P*=5001 /*$.+*#=' &"+$&DO=2000 er!

Proceso )nidad de *emoria +irtual ")*+#


(l Proceso UM H es el res)onsable en el sistema de brindar a los Programas es)acio en memoria )ara que estos realicen sus o)eraciones. Para esto utili4ar una serie de estructuras administrativas internas que deber crear / mantener. +a UM )ermitir que los Programas *uncionen abstrados de la ubicacin *inal de los datos en la memoria )rinci)al.

Arquitectura de la )*+
Al iniciar solicitar un Anico bloque de memoria ! malloc" de un tama7o con*igurable )or arc6ivo de con*iguracin2 )ara simular la memoria )rinci)al. +uego crear las estructuras administrativas necesarias )ara )oder gestionar dic6o es)acio )ermitiendo que cada )roceso )ueda crear segmentos de tama7o variable / simular que dis)one de todo el es)acio de direcciones.

H A pesar de que la implementacin de la memoria virtual en la vida real es una combinacin entre el
sistema operativo y el !" (##")$ se implementa en este caso como un solo proceso aparte$ para facilitar su comprensin e integracin con el sistema%

A la UM se conectarn2 mediante soc,ets2 el )roceso Kernel / los diversos CPUs. Por cada cone#in2 la UM crear un 6ilo dedicado a atenderlo2 que quedar a la es)era de solicitudes de o)eraciones. +a UM deber validar cada )edido recibido2 / res)onder en consecuencia. (s im)ortante destacar la naturale4a multi$6ilo del )roceso2 )or lo que ser )arte del desarrollo del trabajo atacar los )roblemas de concurrencia que surgieran. Para sim)li*icar el desarrollo de este )roceso2 a diferencia de la realidad, las estructuras administrativas no deben ser almacenadas en el es)acio de memoria utili4ado )or los Programas. %e recomienda leer / )ro*undi4ar el Anexo I - Segmentacin2 / validar el dise7o con el a/udante antes de iniciar el desarrollo de este )roceso.

O,eraciones de la )*+
(l Proceso UM 2 simulando as)ectos de un controlador de memoria real2 maneja una inter*a4 reducida2 que no )uede ser am)liada2 / )ermite Anicamente5 %olicitar b/tes desde una )osicin de memoria5 IbaseJ2 Io**setJ / Itama7oJ (nviar b/tes )ara ser almacenados5 IbaseJ2 Io**setJ2 Itama7oJ / Ibu**erJ Tambi8n so)orta algunas o)eraciones que sim)li*ican el desarrollo del trabajo )rctico / su o)eratoria5 Kands6a,e5 IIdenti*icador del ProgramaJ / ITi)o5 Kernel3CPUJ Cambio de )roceso activo5 IIdenti*icador del ProgramaJ Crear segmento5 IIdenti*icador del ProgramaJ2 Itama7oJ -estruir segmentos del )rograma5 IIdenti*icador del ProgramaJ

+alidaciones de la )*+
(s tarea de este )roceso controlar que las solicitudes de memoria sean vlidas / co6erentes. (n caso de intentar escribir en algAn segmento que no e#iste o *uera de los lmites del mismo la UM deber noti*icar la corres)ondiente e#ce)cin2 como ser5 L L Segmentation &ault5 (l acceso a memoria esta )or *uera de los rangos )ermitidos. #emory 'verload5 Fo e#iste es)acio su*iciente )ara crear un segmento

Consola
(l Proceso UM al iniciar quedar a la es)era de comandos enviados )or teclado )ermitiendo al menos las siguientes *uncionalidades. (l dise7o de la misma / la sinta#is de los comandos queda a criterio del equi)o. operacin( (ste comando )ermitir2 dado un )roceso2 una base2 un o**set / un tama7o solicitar una )osicin de memoria o escribir un bu**er )or teclado en una )osicin de memoria. (l resultado de la misma deber ser mostrado en )antalla / o)cionalmente grabado en un arc6ivo. Tambi8n )ermitir crear / destruir los segmentos de un Programa.

retardo5 (ste comando modi*icar la cantidad de milisegundos que debe es)erar el )roceso UM antes de res)onder una solicitud. (ste )armetro ser de a/uda )ara evaluar el *uncionamiento del sistema. algoritmo( -eber )ermitir cambiar el algoritmo entre Sorst$<it / <irst$<it. compactacin5 -eber *or4ar el )roceso de com)actacin. dump5 (ste comando generar un re)orte en )antalla / o)cionalmente en un arc6ivo en disco del estado actual de5 $ Estr ct ras de memoria5 tablas de segmentos de todos los )rocesos o de un )roceso en )articular. $ !emoria principal5 indicando los segmentos de los Programas / el es)acio libre. $ "ontenido de la memoria principal5 Indicando un o**set / una cantidad de b/tes.

Proceso CP)
(ste )roceso es uno de los ms im)ortantes del trabajo /a que es el encargado de inter)retar / ejecutar las o)eraciones escritas en cdigo Ansiso) de un Programa. (star en )ermanente contacto con el Proceso UM 2 tanto )ara obtener in*ormacin del Programa en ejecucin2 como )ara actuali4ar las estructuras requeridas luego de ejecutar una o)eracin. Al iniciar se conectar al )roceso Kernel / quedar a la es)era de que el PCP le enve el PC& de un Programa )ara que este sea ejecutado. Incrementar el valor del registro Program Counter del PC& / utili4ar el ndice de cdigo )ara solicitar a la UM la )r#ima sentencia a ejecutar. Al recibirla2 la )arsear2 ejecutar las o)eraciones requeridas2 actuali4ar los segmentos del Programa en la UM 2 actuali4ar el Program Counter en el PC& / noti*icar al PCP que conclu/ un # ant m.G (jem)lo5 +uego de recibir de la UM la instruccin 0a = b # $12 el )arser la inter)retar / ejecutar las siguientes Primitivas5 :" obte!er_direccio!23b455 utili4ando el diccionario de datos2 devolver el des)la4amiento res)ecto al stac, de la variable b. Por ejem)lo2 )67875. =" dere%ere!ciar2)6787555 )edir a la UM los G b/tes a )artir de o%%set_b2 corres)ondientes al valor de la variable b. Por ejem)lo2 9. H" obte!er_direccio!23a455 como :"2 )ero )ara saber dnde guardar el resultado. Por ejem)lo2 )6787c. G" almace!ar2)6787c: ((55 almacenar en la UM el resultado de la suma. G (n este )unto el alumno /a )uede notar que si el )roceso *uera desalojado / su PC& enviado a otro
CPU2 este tendra a6 / en la UM toda la in*ormacin necesaria )ara continuar su normal ejecucin

(l ingreso a *unciones o )rocedimientos requiere que se asienten datos como el )unto de retorno o las variables locales en el segmento de Stack $ er detalle en el Ane#o I $ %tac,

'ot ,lug
Fuevas instancias del )roceso CPU )ueden ingresar al sistema en cualquier momento. (l PCP deber reconocer dic6a dis)onibilidad / agregarla a la )lani*icacin. Mediante la se7al %IPU%D:2 se le )odr noti*icar a un CPU que deber desconectarse una ve4 concluda la ejecucin del Programa actual2 dejando de dar servicio al sistema.

-in de la ejecucin
Al ejecutar la Altima sentencia el CPU deber solicitar la destruccin de todas las estructuras corres)ondientes2 mostrar en la consola del Programa el estado *inal de las variables / noti*icarle al PCP que el )roceso *inali4.

./ce,ciones
(#iste la )osibilidad que el Proceso CPU reciba un mensaje de e#ce)cin como resultado de una solicitud a la UM . (n este caso deber noti*icarla )or )antalla / concluir la ejecucin del Programa actual.

Ane/o I 0 *odelo de %egmentacin


(l modelo de %egmentacin )ermite que el )rogramador solicite segmentos de memoria de cualquier tama7o2 abstrado de la cantidad total o libre de memoria en la com)utadora. Internamente se utili4an estructuras administrativas )ara llevar control de las solicitudes de memoria / donde se encuentra *inalmente almacenada. (n otras )alabras este mecanismo )ermite que el )roceso crea que dis)one del total de la memoria del sistema.

1iagrama de *emoria con %egmentacin

(n el ejem)lo de esta *igura2 el Proceso & consta de dos %egmentos. (l %egmento : de T b/tes iniciando en la )osicin virtual ; / a continuacin se observa el %egmento = de =H b/tes ubicado en la )osicin virtual :;. %e observa luego que dic6os segmentos estn realmente almacenados en las )osiciones QH / :=; de la Memoria Princi)al. +os registros en la tabla de segmentos del Programa & se veran as5 Identificador %egmento : %egmento = Inicio ;; :; $ama%o T =H &'icacin en !emoria Principal QH :=;

(ntonces2 )or ejem)lo2 si el Programa & solicita 9 b/tes iniciando en la )osicin =9 !:9 b/tes de o**set del inicio del segmento ="2 utili4ando la tabla de segmentos la UM devolvera 9 b/tes

em)e4ando de la )osicin :H9 !:9 b/tes de o**set del inicio del segmento en memoria )rinci)al".

Creacin & destruccin de los segmentos


+os segmentos sern creados a solicitud del P+P cuando crea el PC& del Programa. Como se observa en la *igura los segmentos de un Programa no necesariamente son contiguos. Por ra4ones de seguridad las direcciones de inicio de los segmentos en su creacin debe ser seleccionada de manera aleatoria2 lgicamente evitando que esta caiga dentro de un segmento e#istente en ese Programa. +a ubicacin del segmento en Memoria Princi)al deber seleccionarse mediante los algoritmos Sorst$<it / <irst$<it de*inido )or arc6ivo de con*iguracin. (l mismo )odr ser cambiado en tiem)o de ejecucin )or consola. +a destruccin de los segmentos slo se dar en conjuntos2 cuando el UM reciba la orden de destruir todos los segmentos asociados a un )rograma.

Com,actacin
(#istirn situaciones donde la creacin de un segmento no )odr reali4arse )or no encontrar un es)acio libre contiguo lo su*icientemente grande )ara contenerlo. (n este caso2 antes de res)onder con una e#ce)cin2 el Proceso UM deber reali4ar el )roceso de Com)actacin2 cu/o objetivo consiste2 como se observa en la *igura2 en ubicar todos los segmentos ocu)ados de manera contigua en las )osiciones de memoria su)eriores logrando as que el es)acio libre quede agru)ado en las )osiciones in*eriores.

(s im)ortante aclarar que la Com)actacin es el Anico mecanismo dis)onible )ara unir

segmentos de memoria libre. Concludo este )roceso deber validar nuevamente si el es)acio libre es su*iciente )ara resolver la solicitud / res)onder en consecuencia.

Ane/o II 0 $loque de Control del Programa "PC$#


Al igual que en un sistema o)erativo convencional2 todo Programa estar identi*icado )or una estructura denominada PC& !Process Control &loc, $ &loque de Control del Programa" la cual contendr el identi*icador Anico del )roceso2 el program counter (PC) del )rograma / las re*erencias a los segmentos del )rograma5 Cdigo / %tac, !Pila"2 / los segmentos au#iliares Mndice de Cdigo e Mndice de (tiquetas.

Estr ct ra Identificador (nico Segmento de cdigo Segmento de stac) " rsor del stac) *ndice de cdigo *ndice de eti# etas Program "o nter $ama%o de "ontexto Act al

Informacin
Nmero identificador del roceso Cdigo !nsiso del rograma "ila de llamadas a f#nciones "#ntero al inicio del conte$to de e%ec#cin act#al &str#ct#ra a#$iliar '#e contiene el offset del inicio ( del fin de cada sentencia del "rograma. &str#ct#ra a#$iliar #tili)ada ara conocer las lneas de cdigo corres ondientes al inicio de los rocedimientos ( a las eti'#etas Nmero de la r$ima instr#ccin del "rograma '#e se de*e e%ec#tar Cantidad de +aria*les , ar-metros ( +aria*les locales. del conte$to de e%ec#cin act#al

2ndice de cdigo
-ebido a que el UM com)rende Anicamente solicitudes relacionadas con )osiciones de memoria / que las lneas en el cdigo en Ansiso)2 a di*erencia de un )rograma ejecutando en una com)utadora real92 son de longitud variable / adems )odra contener comentarios o lneas en blanco2 este ndice es una estructura que almacena el des)la4amiento res)ecto al inicio del cdigo del )rograma / la longitud de cada lnea ejecutable. -e esta manera es )osible saber la ubicacin de cada lnea )til en el cdigo )ara )oder solicitarla a la UM . (stos datos se almacenarn como un arreglo ordenado de )ares de enteros2 Ides)la4amiento de inicioJ / IlongitudJ. (n otras )alabras2 variables enteras de G b/tes de *orma contigua donde cada )ar identi*icar de *orma ordenada una sentencia del cdigo. 9 +as instrucciones en un )rograma com)ilado son generalmente de longitud *ija5 el tama7o de una
)alabra del CPU

-e este modo2 los )rimeros T b/tes a )artir de la direccin indicada )or Mndice de Cdigo en el PC&2 sern dos variables num8ricas. +a )rimera ser el des)la4amiento dentro del %egmento de Cdigo en el que comien4a la )rimer instruccin de nuestro )rograma !Program Counter U :". +a segunda variable de G b/tes indicarn la longitud en caracteres de dic6a instruccin. +uego los siguientes T b/tes corres)ondern a la segunda instruccin ejecutable de nuestro )rograma !Program Counter U ="2 / as sucesivamente. (s vital recordar que el ndice no es de lneas sino de instrucciones5 el cdigo que genere este ndice recorrer el cdigo de un )rograma ignorando las )rimeras lneas vacas o con comentarios 6asta encontrar la )rimer instruccin vlida. Degistrar su inicio / su longitud2 luego buscar la siguiente ignorando saltos / comentarios / sucesivamente. Por ejem)lo2 )ara un scri)t como el siguiente5 012usr23i 2a sisop 3e4i 0 primero 5ec6aro 6as 7aria36es 7aria36es a, 3 a = 20 pri t a e 5 +a instruccin : !variables a: b" comien4a en el b/te 9V2 con una longitud de :G b/tes2 mientras que la instruccin = !a = 8)" comien4a en el b/te V= / mide Q b/tes. (n memoria2 se almacenarn as5

Al momento de ejecutar una instruccin2 la CPU solicitar a la UM la entrada del Mndice corres)ondiente a la instruccin a ejecutar2 determinada )or el Program Counter. Teniendo el b/te de inicio / longitud de la instruccin2 reali4ar la )eticin a la UM en el segmento de cdigo del Programa. Al obtener la lnea de cdigo a inter)retar2 la )rocesar usando el Parser2 el cual invocar las Primitivas Ansiso) corres)ondientes.

2ndice de .tiquetas
Al )re)rocesar el cdigo del scri)t2 el Parser generar una estructura Mndice de (tiquetas que el P+P deber almacenar en la UM .

(l Mndice de (tiquetas constar de la seriali4acin de un diccionario que contiene el identi*icador de cada *uncin2 )rocedimiento o etiqueta asociado con la )rimer instruccin ejecutable del mismo !es decir2 el valor que el Program Counter deber tomar cuando el )rograma deba )asar a ejecutar ese bloque". A e*ectos )rcticos2 la CPU deber leer este segmento desde la UM cada ve4 que cambie el Programa en ejecucin / deseriali4arlo2 de modo de tener un diccionario en memoria mediante el cual )oder buscar las direcciones a las que cambiar el Program Counter ante un salto o llamada. -ado que esta in*ormacin se mantiene *ija durante toda la ejecucin del Programa2 no debera en ningAn momento volver a modi*icarse2 ni 6abr necesidad de )reservar el diccionario deseriali4ado en memoria.

Tama3o del Conte/to Actual


(l cam)o Tama7o del Conte#to Actual guardar la cantidad de variables e#istentes en el conte#to de ejecucin actual2 necesario )ara )oder recrear el -iccionario de ariables al reanudar la ejecucin de un Programa. (n cada cambio de conte#to2 la CPU generar una estructura au#iliar )ara inde#ar la ubicacin de las variables en el segmento de %tac,. (s decir2 almacenar que2 )or ejem)lo2 que la variable a del conte#to de ejecucin actual se encuentra a )artir de cierto o**set dentro del %tac,2 / que la variable c de ese conte#to est en otro o**set determinado. Cuando un Programa se vuelve a )lani*icar / debe reanudar su ejecucin en una CPU2 necesita conocer la cantidad de variables locales que debe leer del segmento de %tac,. (se dato se encuentra en el cam)o Tama7o del Conte#to Actual del PC&.

Ane/o III 4 .s,ecificacin del enguaje An%I%OP


An%I%OP es un lenguaje de )rogramacin inter)retado de )ro)sito general / bastante bajo nivel. %u sinta#is es sim)le /2 en general2 no es mu/ recomendable )ara utili4ar en tareas )roductivas. (n cambio2 su objetivo es )rinci)almente acad8mico5 a/udar a entender los conce)tos / mecanismos que un sistema o)erativo debe tener en cuenta )ara manejar la ejecucin de los )rogramas. (l lenguaje se divide en dos ca)as5 la sinta#is de alto nivel2 utili4ada )ara escribir los scri)ts2 / las o)eraciones Primitivas que la CPU deber ejecutar )ara llevar a cabo las instrucciones de los )rimeros. Para la reali4acin del trabajo )rctico2 la ctedra )roveer un Parser An%I%OP2 ca)a4 de inter)retar una instruccin de cdigo / requerir la ejecucin de las Primitivas necesarias )ara reali4arla. %er res)onsabilidad de los gru)os cum)limentar la inter*a4 de Primitivas requerida2 asegurndose de cum)lir en su totalidad / sin alteraciones !modi*icaciones ni agregados" la es)eci*icacin de cada una de ellas. Para la evaluacin del trabajo )rctico no se )roveern )rogramas con errores de sinta#is ni de semntica.

%inta/is

(l cdigo )rinci)al del )rograma estar com)rendido entre las )alabras reservadas begin / end. *egin solo indica )or donde comen4ar a ejecutar el )rograma. +as sentencias *inali4an con un salto de lnea. +os saltos adicionales son ignorados. Toda lnea comen4ada )or un caracter numeral !B" es un comentario / debe ser ignorado. Todo )rograma / deber terminar con una lnea en blanco. Un 051 seguido de una )alabra es una etiqueta que ser utili4ada )ara )ermitir saltos dentro del cdigo con +ump$ +, / +n,2 e#)licados ms adelante. Todas las variables dentro de una *uncin son locales. Una *uncin )uede llamar a otra *uncin.

+ariables
+as variables locales se declaran luego de la sentencia variables. %on solamente de ti)o entero con signo / su identi*icador es un caracter al*ab8tico Ia$4A$WJ. %u valor no debe ser iniciali4ado. %e las indica en el codigo solo con su nombre. +as variables dadas como )armetros de *unciones se nombraran con un Anico dgito I;$?J / se accedera a ellas en el cdigo como +, !siendo B el nombre de la variable". +as variables com)artidasQ se declaran e iniciali4an en la con*iguracin del ,ernel2 se nombran como cadenas sin restriccin de nombre2 / se las indica en el cdigo como ! identificador.

Asignacin
Con el nombre de la variable a la i4quierda de un signo igual a una variable se le )odr asignar como valor5 Un nAmero entero u otra variable !local2 )armetro o com)artidaX no sema*oros" (l resultado de una o)eracin aritm8tica la cual )odr ser suma o resta

%alto condicional
+as instrucciones de salto condicional saltar-si-no-es-cero !jn4 $ jum) on not$4ero" / saltar-sies-cero !j4 $ jum) on 4ero" recibirn como )armetro una variable que evaluarn / una etiqueta a la que debern saltar en caso de que se cum)la la condicin. (stas instrucciones )or de*inicin del enunciado tendrn como origen / el destino el )rocedimiento actual. (n otras )alabras el cdigo de una *uncin o )rocedimiento no )odr saltar dentro del cdigo de otro.

Q +lamamos 0variables compartidas1 a aquellas manejadas )or el ,ernel2 de las que todos los CPUs tiene
acceso. Fo son 0variables globales1 /a que 0global1 re*iere al sco)e3conte#to de cada )rograma. Fo e#isten en An%I%OP las variables globales.

012usr23i 2a sisop 3e4i 7aria36es i,3 i = 1 :i icio_8or i = i 9 1 pri t i 3 = i : 10 ; < 3 08uera 5e6 8or e 5

i icio_8or

(ste cdigo de ejem)lo incrementa la variable i de uno a die4 e im)rime dic6os valores en )antalla. Observe que si la variable i no es igual a :; entonces b U i $ :; no es cero2 entonces la instruccin de salto condicional ira a la etiqueta inicio.for 6asta llegar a la :;ma iteracin2 donde no saltar ms.

-unciones
+a de*inicin de las *unciones estar dada )or la )alabra reservada function seguida del nombre de la misma. Fo 6a/ di*erencia sintctica entre *unciones / )rocedimientos V. io Un caso es)ecial es la *uncin io la cual recibir dos )armetros. :. Una cadena como identi*icador del sistema del dis)ositivo de entrada3salida =. (l tiem)o que se acceder a este dis)ositivo de entrada3salida

Im,resin en ,antalla
(#isten dos *ormas de im)resion. te/t!rint seguido de una cadena im)rimir la cadena tal cual a)arece en el cdigo *uente. +a )alabra reservada print ser utili4ada )ara mostrar el valor de la variable que reciba como )armetro. +a in*ormacin deber ser mostrada en la terminal del )rograma / registrada en el log del sistema. Ejemplo: aU; )rint a Resultado: ADIA&+( a5 ; Cdigo de ejem,lo

V -istinguimos una funcin de un procedimiento )or la 6abilidad de retornar un valor.

012usr23i 2a sisop 8u ctio prue3a 7aria36es a,3 a = 2 3 = 16 pri t 3 pri t a a = a 9 3 e 5 3e4i 7aria36es a, 3 a = 20 pri t a ca66 prue3a pri t a e 5
(ste cdigo de ejem)lo im)rime variables.

+o que se ve )or )antalla sera !Ftese la localidad3sco)e de las variables"5 ADIA&+( a5 =; ADIA&+( b5 :Q ADIA&+( a5 = ADIA&+( a5 =;

Ane/o I+ 4 %tac5
Desulta com)licado e#)licar el stack dado que no necesariamente se asemeja a algAn conce)to de la realidad que se )ueda usar como met*ora2 )or lo que vamos a describirlo con el ma/or detalle )osible. (l stac, es -y debe ser programado como- una estructura de ti)o pila2 donde los datos se cargan encima de los anteriores2 se a)ilan. Para obtener alguno2 el Anico m8todo dis)onible es e#traer el )rimero de la )ila. A )esar de que a sim)le vista dara la sensacin de que una )ila es una estructura arcaica o )oco )rctica *rente a2 )or ejem)lo2 una lista ordenada o un arra/2 en realidad la sim)licidad del 6ec6o de que su acceso est8 restringido a apilar / sacar $o push / pop2 como se lo conoce generalmente / como lo vamos a mencionar en el enunciado$ es lo que 6ace que este ti)o de estructura sea la 6erramienta indicada )ara im)lementar un stack. (l stac, es un segmento utili4ado )ara describir entornos de trabajo. (n un )rograma estructurado sabemos que2 al ingresar a un )rocedimiento o *uncin2 las

variables que est8n de*inidas dentro de estos e#istirn 6asta que conclu/a. +uego2 el )rograma regresar a la instruccin )osterior a la invocacin de esa *uncin o )rocedimiento. Por ejem)lo (E-emplo en ", no en Ansisop)5

(n la *igura se observa que a )esar que las variables a / b e#isten en )rocedimiento!" su alcance !sco)e" es solo dentro de 8l. Al regresar del )rocedimiento!" las variables a2 b / c de main!" )ermanecen inalteradas.

+as variables se mantienen )or sco)e )orque internamente el sistema o)erativo crea un conte/to nuevo al ingresar al )rocedimiento. A)ila las variables nuevas en el stac, / la direccin de retorno del )rocedimiento que lo invoc.

(n la *igura se ve claramente como al ingresar al )rocedimiento!" el sistema o)erativo almacena en el stac, la direccin donde debe volver al concluir.

Al salir de un )rocedimiento2 el sistema o)erativo desa)ila las variables locales / la direccin de retorno la cual se la asigna al !rogram ounter.

(n la *igura se ve como el Programa tiene nuevamente las variables del )rocedimiento main!"

Fo lo detallamos en este ejem)lo2 )ero se entiende que las sucesivas invocaciones de un )rocedimiento a otro irn a)ilando las variables locales en el stack / des a)ilndolas al terminar. %i en ve4 de un )rocedimiento se tratara de una *uncin2 el resultado que devuelve la *uncin tambi8n se a)ila en el stac,. (l stac,2 como toda estructura en memoria2 tiene un tama7o determinado2 *ijo. (n este trabajo )rctico2 este tama7o son :;; b/tes. (l lector com)render que )odra darse la situacin donde luego de una serie de )rocedimientos invocando otros )rocedimientos2 el stac) se llene. Ms adelante detallaremos al res)ecto.

*anejando el %tac5 en el Trabajo Prctico


(l segmento de %tac, es iniciali4ado )or el P+P2 encargado tambi8n de iniciali4ar el )untero al mismo en el PC&. Adems2 el P+P debe iniciali4ar el )untero del conte#to actual )ara que coincida con el inicio del stac,2 / setear el contador de variables locales a ;. Al ejecutar una instruccin variables2 la CPU deber reservar la memoria )ara las variables locales del conte#to que est comen4ando a ejecutar. Por cada variable2 la CPU escribir en memoria un caracter con el nombre de la variable2 / reservar los G siguientes )ara el valor de la misma. -ic6o valor no de'er iniciali.arse. -e este modo2 al terminar la ejecucin del )rimer variables del )rograma2 el stac, contendr las variables locales almacenadas de *orma consecutiva. (l Cursor del Conte#to Actual seguir a)untando al comien4o del segmento del stac,2 )orque a6 es donde comien4a el Conte#to Actual. Adems2 la CPU contar con su -iccionario de ariables indicndole en qu8 )osicin de la memoria encontrar cada variable.

Al llamar a una *uncin o )rocedimiento2 la CPU deber cambiar el conte#to de ejecucin actual del )rograma5 las re*erencias a variables dejarn de ser sobre las actuales2 / )asarn a ser sobre las )ro)ias del nuevo conte#to. Pero2 adems de cambiar el conte#to2 el Program Counter va a variar2 / debe recordar a qu8 instruccin volver luego de concluir la ejecucin del bloque de cdigo al que salt. Por Altimo2 debe recordar en qu8 )osicin del stac, comien4a el conte#to que est abandonando2 )ara )oder recrearlo al volver2 /2 si *uera a ejecutar una *uncin2 debe recordar en qu8 )osicin de memoria debe asignar el valor que la *uncin retorne.

Al llamar a una *uncin2 el )arser ejecutar la Primitiva llamarCo!,etor!o2 mientras que la invocacin a un )rocedimiento se resolver con llamarSi!,etor!o. Conociendo el Cursor del Conte#to Actual / las variables locales a ese conte#to2 la CPU )odr determinar dnde termina el conte#to actual. A )artir de esa )osicin2 estas llamadas debern almacenar2 en este orden2 el Cursor de Conte#to Actual actual2 el Program Counter actual incrementado en uno !es decir2 la )r#ima instruccin a ejecutar al retornar del nuevo conte#to"2 /2 si corres)ondiera2 la direccin en que se deber almacenar el retorno de la *uncin a ejecutar. Con esto2 )reservara el conte#to actual )ara )oder regenerarlo al retornar.

Para generar el nuevo conte#to de ejecucin2 la CPU actuali4ar el valor del Cursor de Conte#to Actual )ara que a)unte al *inal de los datos que acaba de a)ilar / actuali4ar el Program Counter al nuevo valor2 )armetro de ambas Primitivas. Adems2 la CPU vaciar su -iccionario de ariables actual2 dado que las re*erencias que contiene /a no )ertenecen al conte#to actual. %i la *uncin o )rocedimiento recibiera )armetros2 8stos se de*inirn inmediatamente des)u8s con llamadas a 5e8i ir(aria36es !tal como lo 6aran las variables locales" con identi*icadores num8ricos I;$?J. Como los )armetros sern variables a las que el bloque de cdigo tiene acceso2 la CPU los inde#ar en el -iccionario de ariables /2 como Altima o)eracin de la llamada2 actuali4ar el valor del Tama7o del Conte#to Actual a la cantidad de )armetros recibidosT.

+a )rimer instruccin ejecutable del bloque ser su ;variables %;. (ntonces2 como /a se es)eci*ic2 se reservar el es)acio )ara las variables locales que el bloque declare2 / se actuali4ar el -iccionario de ariables / Tama7o del Conte#to Actual en consecuencia.

T -ebera sobrar la aclaracin de que ; es una cantidad vlida de )armetros recibidos

+as *unciones terminan su ejecucin con un retur!2 que se resolver con la Primitiva retor!ar.

+a CPU desa)ilar los cuatro b/tes )revios al Cursor del Conte#to Actual2 / de ese modo obtendr la direccin de memoria en que tendr que almacenar el valor de retorno. (n los G b/tes anteriores encontrar el valor que deber tomar el Program Counter luego de retornar2 / los G anteriores a esos indicarn el nuevo Cursor del Conte#to. Conociendo el Cursor del Conte#to al que tiene que volver2 la CPU sabr que todos los b/tes entre la direccin que acaba

de leer / el valor que acaba de leer ser un arra/ de elementos de 9 b/tes2 cada uno con el identi*icador / valor de una variable del conte#to al que se est regresando. Una ve4 regenerado el conte#to2 la CPU est en condiciones de ejecutar la )r#ima instruccin2 como acostumbra.

(n el caso de los )rocedimientos2 su *inali4acin est determinada al llegar a una instruccin de e!d. (l com)ortamiento ser similar2 con la di*erencia de que no tendr direccin donde guardar el retorno )ara desa)ilar dado que2 justamente2 no retorna ningAn valor. Como )uede observarse en el Altimo gr*ico2 los datos del conte#to que se acaba de abandonar )ermanecen en la memoriaX es decir2 no se sobrescribe el conte#to al abandonarlo. Como el PC& contiene el tama7o del conte#to2 sabe 6asta dnde debe leer los datos actuales2 / que lo que sigue es memoria sin reservar2 )or lo que no debe utili4arla.

Cambio de Proceso
+os Programas en ejecucin )odrn abandonar la CPU )ara )asar a otro estado dentro del sistema )ara re)lani*icarse luego. Al volver a ejecutarse2 )odra 6acerlo en una CPU distinta a la que lo 6aba ejecutado )reviamente. Casi la totalidad de los datos del Programa se encuentran en la UM 2 / los restantes en el PC&. Al comen4ar a ejecutar el Proceso2 la CPU se valdr del Cursor del Conte#to Actual / el Tama7o del Conte#to Actual )ara )oder regenerar su -iccionario de ariables. Como la CPU actuali4a su co)ia del PC& durante la ejecucin2 es vital que cuando el Proceso abandona la CPU2 8sta deber enviar al Kernel el nuevo estado del PC& del Proceso2 a *in de actuali4ar la co)ia que aquel maneja.

Ane/o + 0 Parser de An%I%OP


Para evitar la com)lejidad que )resenta reali4ar un anali4ador de sinta#is / dado que estas tareas no son in6erentes al contenido de la materia se *acilita un Parser que se encargar de inter)retar cada lnea de cdigo / de ejecutar las Primitivas corres)ondientes2 cu/o cdigo ser desarrollado )or el alumno. (l )arser )odr obtenerse desde 6tt)s533git6ub.com3siso)utn*rba3ansiso)$)arser

Primitivas de Ansiso,
:. =. H. G. 9. Q. V. T. ?. :;. ::. :=. :H. :G. :9. :Q. de%i!ir0ariable obte!erPosicio!0ariable dere%ere!ciar asi&!ar obte!er0alorCompartida asi&!ar0alorCompartida irAl/abel llamarSi!,etor!o llamarCo!,etor!o %i!ali<ar retor!ar imprimir imprimirTe6to e!tradaSalida =ait si&!al

1) definirVariable Deserva en el Conte#to de (jecucin Actual el es)acio necesario )ara una variable llamada identi*icadorEvariable / la registra tanto en el %tac, como en el -iccionario de ariables2 retornando la )osicin del valor de esta nueva variable del stac, (l valor de la variable queda inde*inido5 no deber iniciali4arlo con ningAn valor de*ault. (sta *uncin se invoca una ve4 )or variable2 a )esar de que este varias veces en una lnea. Por ejem)lo2 evaluar Yvariables a2 b2 cY llamar tres veces a esta *uncin con los )armetros YaY2 YbY / YcY t_pu!tero de%i!ir0ariable2t_!ombre_variable ide!ti%icador_variable 5>

2) obtenerPosicionVariable -evuelve el des)la4amiento res)ecto al inicio del segmento %tac, en que se encuentra el valor de la variable ide!ti%icador_variable del conte#to actual. (n caso de error2 retorna $:. t_pu!tero obte!erPosicio!0ariable2t_!ombre_variable

ide!ti%icador_variable 5>

3) dereferenciar Obtiene el valor resultante de leer a )artir de direccionEvariable2 sin im)ortar cual *uera el conte#to actual t_valor_variable dere%ere!ciar2t_pu!tero direccio!_variable5>

4) asignar Co)ia un valor en la variable ubicada en direccio!_variable. void asi&!ar2t_pu!tero direccio!_variable: t_valor_variable valor 5

5) obtenerValorCompartida %olicita al ,ernel el valor de una variable com)artida ? t_valor_variable obte!er0alorCompartida2t_!ombre_compartida variable5

) asignarValorCompartida %olicita al ,ernel asignar el valor a la variable com)artida. -evuelve el valor asignado. t_valor_variable asi&!ar0alorCompartida2t_!ombre_compartida variable: t_valor_variable valor5

!) ir"l#abel -evuelve el nAmero de la )rimer instruccin ejecutable de etiqueta / $: en caso de error. t_pu!tero_i!struccio! irAl/abel2t_!ombre_eti"ueta eti"ueta5

$) llamar%inRetorno Preserva el conte#to de ejecucin actual )ara )oder retornar luego. Modi*ica las estructuras corres)ondientes )ara mostrar un nuevo conte#to vaco. Detorna el numero de instruccin a ejecutar. +os )armetros sern de*inidos luego de esta instruccin de la misma manera que una variable

local2 con identi*icadores num8ricos em)e4ando )or el ;. t_pu!tero_i!struccio! llamarSi!,etor!o2t_!ombre_eti"ueta eti"ueta: t_pu!tero_i!struccio! li!ea_e!_ejecuccio!5

&) llamarConRetorno Preserva el conte#to de ejecucin actual )ara )oder retornar luego al mismo2 junto con la )osicion de la variable entregada )or do!de_retor!ar . Modi*ica las estructuras corres)ondientes )ara mostrar un nuevo conte#to vaco. Detorna el nAmero de instruccin a ejecutar. +os )armetros sern de*inidos luego de esta instruccin de la misma manera que una variable local2 con identi*icadores num8ricos em)e4ando )or el ;. Fo se )retende que se )ueda retornar a una variable global. % a un )armetro o variable local t_pu!tero_i!struccio! llamarCo!,etor!o2t_!ombre_eti"ueta eti"ueta: t_pu!tero do!de_retor!ar: t_pu!tero_i!struccio! li!ea_e!_ejecuccio!5

1') finali(ar Cambia el Conte#to de (jecucin Actual )ara volver al Conte#to anterior al que se est ejecutando2 recu)erando el Cursor de Conte#to Actual / el Program Counter )reviamente a)ilados en el %tac,. (n caso de estar *inali4ando el Conte#to )rinci)al !el ubicado al inicio del %tac,"2 deber *inali4ar la ejecucin del )rograma devolviendo el valor $:. t_pu!tero_i!struccio! %i!ali<ar2void5

11) retornar Modi*ica el Conte#to de (jecucin Actual )or el Conte#to anterior al que se est ejecutando2 recu)erando el Cursor de Conte#to Actual2 el Program Counter / la direccion donde retornar2 asignando el valor de retor!o en esta2 )reviamente a)ilados en el %tac,. t_pu!tero_i!struccio! retor!ar2t_valor_variable retor!o5

12) imprimir (nva al Kernel el contenido de valor_mostrar2 )ara que este le reenve a la corres)ondiente consola del Programa en ejecucin. -evuelve la cantidad de dgitos im)resos.

i!t imprimir2t_valor_variable valor_mostrar5

13) imprimir)e*to (nva al Kernel una cadena de te6to )ara que este la reenve a la corres)ondiente consola del Programa en ejecucin. Fo admite )armetros adicionales2 secuencias de esca)e o variables. -evuelve la cantidad de dgitos im)resos. i!t imprimirTe6to2c@ar te6to5

14) entrada%alida In*orma al ,ernel que el Programa actual )retende utili4ar el dispositivo durante tiempo unidades de tiem)o. i!t e!tradaSalida2t_!ombre_dispositivo dispositivo: i!t tiempo5

15) +ait In*orma al ,ernel que ejecute la *uncin @ait )ara el sem*oro con el nombre ide!ti%icador_sema%oro. (l ,ernel deber decidir si bloquearlo o no. i!t =ait2t_!ombre_sema%oro ide!ti%icador_sema%oro5

1 ) signal Comunica al ,ernel que ejecute la *uncin signal )ara el sem*oro con el nombre ide!ti%icador_sema%oro. (l ,ernel decidir si esto conlleva desbloquear a otros )rocesos. i!t si&!al2t_!ombre_sema%oro ide!ti%icador_sema%oro5

1escri,cin de las entregas


Para )ermitir una mejor distribucin de las tareas / orientar al alumno en el )roceso de desarrollo de su trabajo2 se de*inieron una serie de )untos de control / *ec6as que el alumno )odr utili4ar )ara com)arar su grado de avance res)ecto del es)erado.

Chec5,oint 6
/ec0a5 =Q de Abril 1'-eti2os5

<amiliari4arse con +inu# / su consola2 el entorno de desarrollo / el re)ositorio A)licar las Common +ibraries2 )rinci)almente las *unciones )ara listas2 arc6ivos de con* / logs. Im)lementar el Parser de An%I%OP / modelar algunas de las *uncionalidades Modelar las estructuras necesarias )ara gestionar los segmentos de los Programas -esarrollar un modelo de consola )ara la UM -esarrollar un binario que sirva como int8r)rete de un scri)t en +inu# 3ect ra recomendada4 6tt)533*aqo)erativos.com.ar3arrancar &eej Puide to Fet@or, Programming $ lin, +inu# PO%IO T6reads $ lin, %iso)UTF<D&A Common +ibraries $ lin,

Chec5,oint 7
/ec0a5 :; de Ma/o 1'-eti2os5
Deali4ar dos )rogramas que )ermitan recibir mAlti)les cone#iones )or soc,ets / gestionarlas utili4ando
)or un lado un multi)le#or de entrada3salida !select2 e)oll" / )or el otro delegar su atencin a 6ilos inde)endientes. Deali4ar un cliente sim)le que )ermita enviar mensajes estructurados a los servidores Utili4ar sem*oros )ara sincroni4ar 6ilos que acceden a una lista com)artida -ise7ar el diagrama de estados de un PC& en el sistema -ise7ar el im)acto de las o)eraciones sobre las estructuras del Programa Im)lementar el algoritmo <irst$<it / la com)actacin en la UM

3ect ra recomendada4 %istemas O)erativos2 %ilbersc6at42 Palvin $ Ca)tulo G5 Kilos %istemas O)erativos2 %ilbersc6at42 Palvin $ Ca)tulo 95 Plani*icacin del Procesador

Chec5,oint 8
/ec0a5 H: de Ma/o 1'-eti2os5

Im)lementar la inter*a4 de mensajes de la UM / su corres)ondiente validacin Im)lementar o)eraciones bsicas An%I%OP en el CPU en las estructuras de la UM -esarrollar los 6ilos de entrada3salida Im)lementar el algoritmo Sorst$<it en la UM

Chec5,oint 9 0 Presencial
/ec0a5 :G de >unio 1'-eti2os5
Im)lementar las *unciones / )rocedimientos de An%I%OP utili4ando el stac, Im)lementar io -esarrollar la )lani*icacin com)leta de un Programa en el sistema.

Chec5,oint :
/ec0a5 9 de >ulio 1'-eti2os5
Im)lementar las listas com)artidas / los sem*oros de Ansiso) alidar los requisitos *uncionales del trabajo )rctico. Deali4ar )ruebas de stress en el sistema. Programar los Ma,e*iles corres)ondientes / 6acer )ruebas de *uncionamiento en el laboratorio en la
M server.

Вам также может понравиться