DELTA – MASTER FORMACIÓN UNIVERSTARIA C/ Gral. Ampudia, 16 Teléf.: 91 533 38 42 - 91 535 Microprocesadores, Junio 2008 final mañana PROBLEMA 1 A. 1. Diseñe la macro mac1, que usa dos pseudoparámetros, que son la dirección de una cadena ASCIIZ que representa un número en decimal (dir) y el destino del número convertido a binario (dest). La macro debe llamar a la rutina atud para hacer la conversión y si detecta algún error saltará a la etiqueta error. (0,75 ptos.) 2. Diseñe la macro mac2, que contiene el código necesario para llamar a la rutina udta; debe usar 2 pseudoparámetros: el número a convertir (num) y el destino de la cadena convertida (destino), que debe tener 10 caracteres como mínimo y estar expresada en decimal. (0,75 ptos.). Nota: Considere que en la zona de variables existe la siguiente declaración: tabla DB ‘0123456789ABCDEF’ Apartado 1 mac1 MACRO dir, PUSH PUSH CALL OR JS MOV ENDM dest OFFSET dir WORD PTR 10 atud AX, AX error dest,ESI Explicación del código: el código se limita a llamar a la rutina atud (ver anexo C). Esta rutina realiza la transformación de una cadena de caracteres en un número en binario. La rutina devuelve en AX un código de retorno indicando, entre otras cosas, si se ha producido un error en la conversión (valores -1 y -2 según la documentación), es por esto que después de llamar a la rutina, se realiza la operación OR AX, AX (activación de flags) y JS error (comprobación si el bit de signo está activo, es decir, si AX tiene un valor negativo). Apartado 2 mac2 MACRO num, PUSH PUSH PUSH PUSH PUSH CALL ENDM destino num WORD PTR 10 WORD PTR 10 OFFSET tabla OFFSET destino udta 1 DELTA – MASTER FORMACIÓN UNIVERSTARIA C/ Gral. Ampudia, 16 Teléf.: 91 533 38 42 - 91 535 B. Escriba la subrutina NEAR merge que realice el barajado perfecto del contenido de dos cadenas ASCIIZ de la misma longitud, obteniendo una tercera cadena con el resultado (que también deberá ser ASCIIZ). Para ello recibe por pila tres parámetros, el primero empilado es el offset de la cadena 1, el segundo el de la cadena 2 y el tercero el de la cadena resultante. Se valorará la optimización del código. Nota: El barajado perfecto consiste en crear la cadena resultante con los valores alternados de las otras dos, de manera que se inicia con el primer elemento de la cadena1, a continuación el primero de la cadena 2, después el segundo de la cadena 1, el segundo de la cadena 2, … merge PROC NEAR PUSH MOV MOV MOV MOV bucle: MOV INC OR JZ MOV INC MOV INC MOV INC JMP Salir: POP RET merge ENDP BP BP, SI, BX, DI, AL, SI AL, salir [DI], DI AL, BX [DI], DI bucle BP 2 SP [BP + 8] [BP + 6] [BP + 4] [SI] AL AL [BX] AL Explicación del código: inicialmente se sacan los parámetros de la pila guardándolos de la siguiente forma (según el orden indica en el enunciado): - SI: offset de la cadena 1 Estado de la pila 0H - BX: offset de la cadena 2 - DI: cadena resultante A continuación entra en un bucle en el cual lee un carácter de la cadena 1 y comprueba si se encuentra al final de la cadena (saltando a la etiqueta salir en caso positivo). Si no, lo almacena en la cadena resultante (MOV [DI], AL), pasa al siguiente carácter de la cadena resultante y repite la operación de lectura y escritura con la cadena 2. Por último salta para continuar con la siguiente iteración del bucle. Valor de BP (ant) Valor de IP [BP + 4] cadena resultante [BP + 6] offset de la cadena 2 [BP + 8] offset de la cadena 1 0FF...FFH 2 DELTA – MASTER FORMACIÓN UNIVERSTARIA C/ Gral. Ampudia, 16 Teléf.: 91 533 38 42 - 91 535 C. Dado el programa que aparece a continuación, en el que se han eliminado intencionadamente los mensajes, se pide: a) Explique de forma detallada la función o funciones que realiza (0,75 ptos). b) Basándose en la explicación anterior, construya los mensajes eliminados procurando que sean lo más explícitos posible (0,75 ptos). INCLUDE macros.mac MODEL SMALL STACK 200H DATASEG cmax DB ? crec DB ? buffer DB 50 DUP (0) nomfic DB 'fichero.dat', 0 handle DW ? msg1 DB '********', 0 msg2 DB '********', 10, 13, 0 msg3 DB '********', 10, 13, 0 msgerr1 DB '********', 10, 13, msgerr2 DB '********', 10, 13, msgerr3 DB '********', 10, 13, msgerr4 DB '********', 10, 13, cr_lf DB 10, 13, 0 CODESEG P386N EXTRN atud: NEAR STARTUPCODE OPEN_HANDLE nomfic, 0 JC error1 MOV handle, AX bucle1:DISP_STRINGZ cr_lf GET_STRING 4, cmax DISP_STRINGZ cr_lf MOV BL, crec XOR BH, BH MOV buffer[BX], 0 CMP BL, 1 JNE sigue OR buffer, 00100000B CMP buffer, 'f' JE fin sigue: PUSH PUSH CALL OFFSET buffer WORD PTR 10 atud OR 0 0 0 0 AX, AX JS MOV MUL MOVE_PTR READ_HANDLE JC CMP JNE CMP JE MOV bucle2:CMP JE CMP JNE INC JMP finreg:DISP_STRINGZ DISP_STRINGZ DISP_STRINGZ JMP vacio: DISP_STRINGZ JMP CLOSE_HANDLE END_PROCESS error1:DISP_STRINGZ END_PROCESS error2:DISP_STRINGZ JMP error3:CLOSE_HANDLE DISP_STRINGZ END_PROCESS error4:CLOSE_HANDLE DISP_STRINGZ END_PROCESS END error2 AX, 50 SI handle, DX, AX, 0 handle, buffer, 50 error3 AX, 50 error4 buffer, 0 vacio SI, 1 buffer[SI], 0 finreg SI, 49 error4 SI bucle2 msg3 buffer cr_lf bucle1 msg2 bucle1 handle 0 msgerr1 1 msgerr2 bucle1 handle msgerr3 3 handle msgerr4 4 a) Se trata de un programa que lee registros de un fichero de acceso directo denominado fichero.dat, que tiene las siguientes características: • Número de registros: 1000 (del 0 al 999). • Tamaño reservado para cada registro: 50 bytes. • Formato de los registros: son strings ASCIIZ de tamaño igual o menor de 49 caracteres. El programa debe pedir por teclado el número de registro a leer (de 0 a 999). Si se recibe un número correcto y el registro existe, visualiza su contenido por pantalla; si está vacío, saca un mensaje por 3 DELTA – MASTER FORMACIÓN UNIVERSTARIA C/ Gral. Ampudia, 16 Teléf.: 91 533 38 42 - 91 535 pantalla que lo indica. En ambos casos se vuelve a pedir otro número de registro. Si se recibe una F (mayúscula o minúscula), en lugar del número de registro, el programa finaliza. Cualquier otra cadena que se reciba hará que el programa visualice un mensaje de error y vuelva a pedir el número de registro. El problema detecta además los siguientes errores fatales, visualizando un mensaje indicativo y devolviendo un código de retorno diferente en cada caso: • Error al abrir fichero. • Error al leer fichero. • Error de formato en el fichero o en el registro: se producirá si se llega al fin del fichero durante la lectura de un registro, o no se detecta el NULL terminador de un registro después de 49 caracteres. Obsérvese que, aunque en el fichero hay 50 caracteres reservados para cada registro, éste puede ocupar menos bytes (de 0 a 49) y su final está marcado por el carácter NULL terminador del string. Explicación del código: además de la explicación general de la funcionalidad del código, existen ciertas partes del programa que pueden resulta complicadas: GET_STRING 4, cmax Permite introducir una cadena de caracteres, en este caso, de un máximo de 4 incluyendo el retorno de carro. En cmax se almacenarán el número máximo de caracteres (4 tal y como especifica la instrucción), en crec el número de caracteres tecleados y en buffer los caracteres tecleados. OR buffer, 00100000B Este tipo de instrucciones obliga a que el sexto bit (ver el formato de la llamada) esté siempre activo (puesto que se trata de un OR). Ejemplo: OR 4, 00000001B OR 5, 00000001B En este ejemplo se estaría haciendo que el bit número 0 siempre estuviese activo. La variable buffer es un duplicado de 50 bytes inicializados a valor 0. En buffer se han almacenado los caracteres que se han introducido mediante la llamada GET_STRING vista con anterioridad. Al hacer referencia a buffer (sin ningún parámetro), se referirá al primero de los 50 bytes, es decir al primer carácter que se haya tecleado. La instrucción OR, sabiendo que se realiza sobre un carácter ASCII, al obligar a que ese bit esté siempre activo, convierte el carácter a minúscula en caso de ser mayúscula y la deja como está en caso de ser ya minúscula. READ_HANDLE JC CMP handle, buffer, 50 error3 AX, 50 En este caso, la complicación podría venir por la última instrucción, CMP AX, 50. Para entenderla hay que tener en cuenta las instrucciones que se han ejecutado con anterioridad. En este caso, tenemos un READ_HANDLE (ver anexo B), que como parámetro de salida devuelve en AX el número de bytes leídos. Como resultado, estaríamos comprobando el número de bytes leídos (AX) con el número de bytes que se pretendían leer (50 según la instrucción READ_HANDLE). b) Mensajes: msg1 msg2 msg3 msgerr1 msgerr2 msgerr3 msgerr4 DB DB DB DB DB DB DB ‘Teclee el número de registro (F para fin):’, 0 ‘El registro está vacío’, 10, 13, 0 ‘El contenido del registro es:’, 10, 13, 0 ‘Error al abrir el fichero’, 10, 13, 0 ‘Carácter no numérico’, 10, 13, 0 ‘Error al leer el fichero’, 10, 13, 0 ‘Formato incorrecto del fichero o registro’, 10, 13, 0 4 DELTA – MASTER FORMACIÓN UNIVERSTARIA C/ Gral. Ampudia, 16 Teléf.: 91 533 38 42 - 91 535 PROBLEMA 2 Se sabe que las direcciones base de las tablas GDT y LDT respectivamente son: 15000000H y 16000000H y se dispone del siguiente volcado: 15000B70H 15000B80H 15000B90H 15001270H 15001280H 15001290H 00 A4 FF 15 BB 80 12 01 34 3F 2A CC 03 DF 02 67 78 3C EE 80 CA 03 2A 6A 4D 43 0B C0 04 C0 05 5F 19 03 3C 05 FF 9D 65 98 E4 4D 06 45 10 78 D4 00 5F 07 CD 00 9A 4C 00 65 08 EF 00 DF C6 00 78 09 78 10 EC 78 00 9A 0A 90 20 CE 9F 00 DF 0B AB 87 23 2E 00 EC 0C A2 67 65 3D 12 CE 0D 98 56 11 5F 32 23 0E 00 A1 1F 69 5A 11 0F 00 1A F1 43 A7 22 1.- Sabiendo que un descriptor ocupa la entrada de índice 170H de la GDT, se pide: a) Valor y direcciones físicas ocupadas por el descriptor (0,4 ptos). b) Decodificarlo indicando el contenido de cada uno de sus campos (0,6 ptos). 2.- Se pretende diseñar una Gate para acceder a una rutina con offset 200H en el segmento calculado en el punto 1 (no requiere parámetros). a) Diseñar el descriptor de CALL GATE para que pueda ser llamada sólo por tareas cuyo CPL sea menor o igual a 2 (0,6 ptos). b) Si este descriptor se coloca en la entrada 300H de la LDT de una tarea con CPL=1, ¿Qué instrucción habría que usar para llamarla? (Si hay varias posibilidades, indicarlo) (0,4 ptos). 3.- Una tarea con CPL=2 ejecuta la instrucción CALL 0B82:03B0H, indicar: a) Tipo de carga de registro de segmento (0,3 ptos). b) ¿Se produce el acceso? Justificar la respuesta (0,4 ptos). c) Indicar el valor del CPL justo después de ejecutar la instrucción. Justificar la respuesta (0,3 ptos). Apartado 1a Dirección inicial el descriptor: Dirección final del descriptor: Valor del descriptor: 15000B80H 15000B87H 00109D056A783FFFH Explicación: Para obtener la dirección inicial y final del descriptor tenemos los siguientes datos: Dirección de comienzo de GDT: 15000000H Ïndice del descriptor: 170H Por lo tanto, Dir_inicio_descriptor= Dir_inicio_GDT + (índice * 8) Dir_fin_descriptor= Dir_inicio_GDT + (índice * 8) + 7 La multiplicación por 8 del índice y la suma de 7 para calcular la dirección de fin del descriptor se debe a que el tamaño de un descriptor es de 8 bytes. Apartado 1b Descriptor de segmento de código con C=1, R=0 y A=1 (Conforme, no legible y recientemente accedido). Def=0 (16 bits), P=1 (presente en memoria), DPL=0 (privilegio del descriptor) y Av=1 Límite 3FFFH y Gr=0 offset límite = 3FFFH (tamaño = 4000H) Dirección base: 00056A78H 5 DELTA – MASTER FORMACIÓN UNIVERSTARIA C/ Gral. Ampudia, 16 Teléf.: 91 533 38 42 - 91 535 Explicación: descomponiendo gráficamente el descriptor se puede ver mejor el valor de cada uno de los campos: Apartado 2 Descriptores de CALL Gate: 00 00 C4 00 0B 80 02 00 H 00 00 C4 00 0B 81 02 00 H 00 00 C4 00 0B 82 02 00 H 00 00 C4 00 0B 83 02 00 H Instrucción: CALL 1804H : XXXX CALL 1805H : XXXX CALL 1806H : XXXX Explicación: descomposición gráfica de la CALL GATE - Offset: offset de la rutina, según el enunciado 200H P: presente en memoria = 1 16/32 y WC/DC: la rutina no recibe parámetros por lo que WC/DC = 0 y 16/32 = 0 Gate DPL: la regla de privilegio que se aplica es (recordar que el segmento de código es conforme) GATE DPL >= EPL SEGM DPL <= CPL 6 DELTA – MASTER FORMACIÓN UNIVERSTARIA C/ Gral. Ampudia, 16 Teléf.: 91 533 38 42 - 91 535 Se de sea que la CALL GATE pueda ser utilizada por cualquier tarea con CPL menor o igual a 2. Por lo tanto, tenemos las siguientes reglas CPL <= 2 SEGM DPL = 0 (viendo el descriptor de segmento del apartado 1). Sabiendo que EPL = Máx (CPL y RPL), en la situación actual no se dispone de información a cerca del RPL, por lo que por ahora se omite, tomando únicamente el valor de CPL. Sabiendo entonces qué únicamente tareas con CPL menor o igual a 2 deben poder usar la CALL GATE, el único valor de GATE DPL válido es 2. - Selector: el seletor de la CALL GATE debe apuntar al descriptor de segmento del apartado 1, que se encuentra en el índice 170H de la GDT. Además el campo RPL no se utiliza (común en todas las GATEs), por lo tanto calculamos todos los selectores posibles Selectores 0B80 – RPL = 0 0B81 – RPL = 1 0B82 – RPL = 2 0B83 – RPL = 3 Apartado 3 a) Tipo de carga: Carga directa de CS b) ¿Se produce el acceso?: Sí, ya que el bit P es 1 y cumple la regla de privilegio, que para códigos conformes es: DPL <= CPL = RPL c) Valor del CPL: Como es conforme, no hay cambio de privilegio, por tanto el CPL permanece igual a 2. 7 DELTA – MASTER FORMACIÓN UNIVERSTARIA C/ Gral. Ampudia, 16 Teléf.: 91 533 38 42 - 91 535 PROBLEMA 3 De una configuración multiprocesador como la esquematizada en la figura, con una capacidad máxima de 4 GB en memoria principal, se sabe lo siguiente: Nº Vías Posiciones de memorias de etiquetas Tamaño etiqueta + estado Codificación de estado Criterio de escritura Caché [1] 4 Caché [2] Caché [3] 64K posiciones 64K posiciones 32K posiciones 15 bits MESI Write Back 13 bits MESI Write Back 14 bits 1 BIT Write through Todas las memorias caché codifican el estado de la línea con los bits más significativos de la memoria de etiquetas según la siguiente tabla MESI ESTADO CÓDIGO M 11 E 10 S 01 I 00 STATUS DE 1 BIT ESTADO CÓDIGO Válido 1 Inválido 0 Se pide: 1.- Calcular la capacidad de cada una de las cachés, los valores de i, j, k, n, número de posiciones de la memoria de algoritmo y bits de cada posición (Suponga que la caché que lo necesite utiliza el algoritmo LRU) (0,5 ptos). 2.- Sabemos que la línea que comienza en la dirección de memoria 87654320H, está cargada y actualizada en el último plano de todas las cachés. Indica el valor de la etiqueta asociada a esta línea en las cachés [1] y [2] (0,3 ptos). 3.- Indica la dirección física de esta línea en las cachés [1] y [2] (0,3 ptos). 8 DELTA – MASTER FORMACIÓN UNIVERSTARIA C/ Gral. Ampudia, 16 Teléf.: 91 533 38 42 - 91 535 4.- La CPU [3] realiza una operación de escritura en esa línea. Indica qué acciones se realizan en la memoria principal, memoria de datos, y memoria de etiquetas por parte de cada una de las cachés. Si alguna etiqueta cambia su contenido debe indicarse el nuevo valor (0,5 ptos). 5.- A continuación de la operación del apartado anterior, la CPU [1] realiza una operación de lectura en esa línea. Indica los mismos valores que en el apartado anterior (0,4 ptos). Apartado 1 Capacidad de la caché de datos I J K N Posiciones mem. algoritmo Bits x posición Caché [1] 2 MB 5 14 13 4 16K 6 Caché [2] 2 MB 5 16 11 1 No hay - Caché [3] 1 MB 5 14 13 2 16K 1 Explicación: - Nº vías = n - Posiciones de memoria de etiquetas = n * 2 i + j - Tamaño etiqueta + estado = k + estado - Posiciones memoria de algoritmo 2 j (si n = 0, directamente mapeada, no usa memoria de algoritmo). - Bits por posición de memoria de algoritmo con LRU = (n * (n – 1)) / 2 Además, común para todos los ejercicios… - i + j + k tienen el mismo valor para todas las cachés - i tiene el mismo valor para todas las cachés Apartado 2 Contenido de la etiqueta: Caché 1 30ECH Caché 2 C3BH Explicación: la etiqueta se compone de los bits de estado + k. Puesto que la línea está actualizada, el estado para las caché 1 y 2 es compartido, código 01 Se descompone la dirección 87654320H para la caché 1 La etiqueta será: Estado 01 K bits 1000 01111 0110 0 Resultado = 30EC H Se repite para la caché 2 La etiqueta será: Estado 01 K bits 1000 01111 011 Resultado = C3B H 9 DELTA – MASTER FORMACIÓN UNIVERSTARIA C/ Gral. Ampudia, 16 Teléf.: 91 533 38 42 - 91 535 Apartado 3 Dirección de la línea: Caché 1 1D4320H Caché 2 54320H Explicación: La dirección de la línea para la caché 1 (configuración semi-asociativa de n vías) es de n-j-i En el enunciado se indica que se encuentra en el último plano (apartado2). Siendo n = 4, el último plano será el 3. n j i 11 101 0100 0011 001 0 0000 = 1D4320 H Se repite para la caché 2, pero teniendo en cuenta que usa una configuración directamente mapeada, por lo que la dirección de la línea será j – i (puesto que no existen vías). j 0 0101 0100 0011 001 i 0 0000 = 54320 H Apartado 4 Acciones en memoria principal Acciones en la caché de datos Acciones en la caché de etiquetas Nuevo valor de etiqueta Caché [1] Caché [2] Caché [3] Escritura de la línea en memoria - - - - Escritura Estado pasa a I Estado pasa a I - 10ECH 43BH Explicación: En la situación descrita, previo a la escritura la línea está actualizada en todas las cachés. Al escribir la cpu3, y teniendo la caché un criterio de escritura ‘Write through’, el dato se escribe tanto en la caché 3 como en memoria princial. Puesto que el data ‘bueno’ se encuentra en caché 3 y memoria principal, la línea en la caché 1 y 2 ya no son válidas, se modifica su estado a inválido y por lo tanto la etiqueta varía (únicamente los bits correspondientes al estado, ver apartado 2). Apartado 5 Acciones en memoria principal Acciones en la caché de datos Acciones en la caché de etiquetas Nuevo valor de etiqueta Caché [1] Lectura de la línea en memoria Escribir nuevo contenido Caché [2] Caché [3] - - - - Estado pasa a S - - 30ECH Explicación: La cpu 1 realiza una lectura, el dato se cargará de memoria principal, almacenándose además en la caché. El dato se encuentra también en la caché 3, por lo que el estado de la línea en la caché 1 será compartido. 10 DELTA – MASTER FORMACIÓN UNIVERSTARIA C/ Gral. Ampudia, 16 Teléf.: 91 533 38 42 - 91 535 Problema 4 En las siguientes preguntas de tipo test, sólo existe una respuesta correcta. Cada pregunta tiene un valor de 0,2 ptos. Cada respuesta incorrecta descuenta 0,05 ptos. La pregunta que esté en blanco no sumará ni restará puntos. 1.- Una tarea con CPL=1 intenta acceder a una WORD para escritura, y la entrada de la última tabla de paginación contiene el valor 9458AF7EH… a) … produce una excepción. b) … se realiza la escritura correctamente (sin que se produzca excepción alguna) sin modificar dicha entrada. c) … se realiza la escritura correctamente, pero se modifica dicha entrada. d) … el valor indicado no es válido para una tabla de paginación. Explicación: Se puede observar que es un valor de 32 bits, por lo que se tratará de una entrada de PD o PT con direccionamiento no extendido. Al decodificar la entrada, viendo los bits comunes que tendrían los dos tipos de entrada, se puede observar que el bit P (presente en memoria) tiene un valor 0, por lo que la página no se encuentra en memoria. Al intentar acceder a ella se producirá una excepción para que la página se cargue en memoria. 2.- En un procesador IA-32 con paginación activada… a) … el bit D (dirty) siempre se encuentra en la entrada de la tabla PD. b) … el tamaño en bits de la dirección física depende del valor del bit de configuración PAE. c) … el bit PSE indica si la página es accesible para tareas de usuario o no. d) … el bit PS se encuentra siempre en la entrada de la tabla inmediatamente anterior a la página. Explicación: El bit PAE (Page Address Extension) indica si se está utilizando direccionamiento extendido (direcciones físicas de 36 bits) o no (direcciones físicas de 32 bits). 3.- En un microprocesador con arquitectura IA-32, cuando se trabaja en modo protegido… a) … es obligatorio utilizar tanto la segmentación como la paginación. b) … es obligatoria la paginación, pero la segmentación es opcional. c) … es obligatoria la segmentación, pero la paginación es opcional. d) … tanto la segmentación como la paginación son opcionales. Explicación: El modo protegido se activa al trabajar con segmentación. La paginación es opcional. 4.- Cuando se accede a una página de 2MB… a) … la Page Table debe comenzar por una dirección múltipla de 2MB. b) … el Page Directory debe comenzar por una dirección múltipla de 2MB. c) … la página debe comenzar por una dirección múltipla de 2MB. d) … la tabla PDPT no interviene en la conversión de dirección. Explicación: Esta situación se produce con todos los tamaños de página, si es de 4KB, la página empieza en una dirección múltiplo de 4KB, si es de de 4MB será múltiplo de 4MB… 11 DELTA – MASTER FORMACIÓN UNIVERSTARIA C/ Gral. Ampudia, 16 Teléf.: 91 533 38 42 - 91 535 5.- Cada entrada en el TLB incluye entre otros… a) … el bit A. b) … el bit PS. c) … el bit P. d) … el bit G. Explicación: La TLB incluye los siguientes campos: - Página lineal - Página física - U/S efectivo - R/W efectivo - bit D - bit G 12