Práctica 6 - Entrada/Salida

Anuncio
Práctica 6 - Entrada/Salida
Organización del Computador 1
Verano 2010
Ejercicio 1 En una computadora ORGA1 se ha conectado un dispositivo de entrada en la
dirección 0xFFF0. La forma de interpretar la palabra (de 16 bits = b15 . . . b0 ) provista por el
dispositivo es la siguiente:
El bit b15 representa el estado del dispositivo. Dicho bit se encuentra en 1 cuando el
dispositivo está ocupado, y en 0 cuando está listo.
Cuando el estado del dispositivo es “listo”, b7 . . . b0 contienen el dato proporcionado por
el dispositivo.
Escribir una rutina en assembler de ORGA1 que debe leer n datos del dispositivo y escribirlos en forma contigua a partir de una dirección de memoria utilizando polling. La rutina
recibe en R0 la cantidad de datos a leer y en R1 la posición de memoria a partir de la cual
debe escribir.
Ejercicio 2 Se desea proveer a la arquitectura del procesador ORGA1 de la capacidad de
atender la interrupción de un único dispositivo de E/S. Para ello:
Se agrega una nueva señal de entrada llamada INT (Interrupción) y de salida INTA
(Interrupción Reconocida).
Se agrega un nuevo flag: I. Este flag indica:
• con 1 que el procesador puede ser interrumpido y atender la interrupción del dispositivo
• con 0 que el procesador no puede ser interrumpido
Se reserva la dirección de memoria 0x0000 para almacenar la dirección de la rutina de
atención de la interrupción del dispositivo de E/S.
Se proveen 4 nuevas instrucciones:
• CLI que coloca I=0
• STI que coloca I=1
• PUSH Ri , cuyo efecto es [SP]=Ri y luego SP=SP-1
• POP Ri , cuyo efecto es SP=SP+1 y luego Ri =[SP]
Las señales INTR e INTA se conectan a este dispositivo de E/S. Si el dispositivo activa la señal
de interrupción y el flag I vale 1, al terminar de ejecutar la instrucción en curso, el procesador
realiza la siguiente secuencia de pasos:
1. Activa la señal INTA para indicarle al dispositivo que atenderá su pedido.
2. Coloca I=0 para evitar que el procesador vuelva a interrumpirse.
3. Coloca [SP]=PC, y decrementa el SP (SP=SP-1).
1
4. Coloca PC=[0x0000].
Luego de esto, comienza a ejecutarse la rutina de atención de la interrupción propiamente
dicha.
Sea el siguiente programa:
main:
noHuboOverflow:
huboOverflow:
MOV
MOV
ADD
JVS
...
...
...
R0, 0x8000
R1, 0xFFFF
R0, R1
huboOverflow
Y la siguiente rutina de atención de la interrupción:
rutinaAtencionInt:
...
...
PUSH R0
PUSH R1
MOV R0, 0x0000
MOV R1, 0x0000
ADD R0, R1
POP R1
POP R0
SETI
RET
; salva el valor original de R0
; salva el valor original de R1
;
;
;
;
restaura el valor original de R1
restaura el valor original de R0
habilita que se pueda interrumpir
retorna a lo que estaba ejecutando
Suponga que I=1 y en la dirección de memoria 0x0000 se encuentra efectivamente la
dirección de la etiqueta rutinaAtencionInt
a) ¿La ejecución del programa main continuará como se espera si el dispositivo de E/S
activa la señal de interrupción durante el ciclo de ejecución de la instrucción ADD R0,
R1?
b) ¿Existe alguna limitación en el diseño actual del esquema de atención de la interrupción?
Proponga alguna alternativa para superarla.
Ejercicio 3 Una computadora ORGA1 se encuentra conectada a 3 dispositivos de E/S que
actúan como sensores. Cada sensor posee un registro de E/S que reporta información climática.
Los sensores son:
Temperatura: Mide temperatura en grados celsius (TEMP STATUS)
Presión Atmosférica: Mide presión en HectoPascales (ATM STATUS)
Intensidad del Viento: Mide intensidad en Metros/Segundo (WIND SPEED)
Las etiquetas MAX TEMP, MAX ATM, MAX WIND SPEED son constantes de 16 bits.
a) Mapear los registros de E/S a direcciones de E/S de ORGA1 y completar el siguiente código:
sensar: CMP [...], MAX_TEMP ;alcanzó temperatura máxima?
JG alarma
CMP [...], MAX_ATM ;alcanzó presión atmosférica máxima?
JG alarma
CMP [...], MAX_WIND_SPEED ;alcanzó velocidad máxima?
JG alarma
JMP sensar
alarma: CALL sonarAlarma ;invoca rutina de alarma
JMP sensar
2
b) Suponiendo que el ciclo de instrucción de cada instrucción del programa tarda t sg y los
valores máximos nunca se alcanzan ¿cuál es la frecuencia (en Hz) de muestreo (lectura)
de los registros de E/S?
c) Suponga que el CPU cuenta con soporte para una interrupción. El sensor de temperatura
solicita una interrupción si se alcanza la temperatura máxima.
i. Modificar el programa presentado para aprovechar esta caracterı́stica de modo que la
frecuencia de muestreo sea mayor.
ii. Escribir la rutina de atención de la interrupción del sensor de temperatura.
Ejercicio 4 Una computadora tiene tres dispositivos de E/S:
una impresora,
un disco y
una lı́nea RS232 (puerto serial).
Las prioridades de estos dispositivos son 2, 4 y 5 respectivamente (a mayor número, mayor
prioridad).
La CPU necesita 10 unidades de tiempo para atender una interrupción de la impresora, 8
para atender una interrupción del disco, y 7 para atender una interrupción de la lı́nea RS232.
El procesador cuenta con una máscara de interrupciones de 16 bits. Si la máscara contiene
al número n, esto significa que se atenderán todas las interrupciones con prioridad mayor o
igual a n. La máscara inicial es 0000h.
Cuando se está atendiendo un dispositivo de prioridad n, las interrupciones de menor
prioridad son descartadas. Por otro lado, si se está atendiendo un dispositivo de prioridad n e
interrumpe un dispositivo de prioridad mayor que n, la ejecución de la rutina actual se encola
para su posterior tratamiento.
Dada la siguiente secuencia de eventos, hacer un diagrama de tiempos mostrando a qué se
dedica la CPU y cuál es la máscara de interrupciones en cada instante:
1) t = 10: la impresora envı́a un pedido de interrupción.
2) t = 15: la lı́nea RS232 envı́a un pedido de interrupción.
3) t = 20: el disco envı́a un pedido de interrupción.
4) t = 40: el disco envı́a un pedido de interrupción.
Suponer que cuando la CPU no está atendiendo interrupciones se encuentra corriendo un
programa de usuario.
Ejercicio 5 Se ha desarrollado un prototipo para un nuevo modelo de microondas que
será lanzado próximamente al mercado. Se utiliza para ello un microcontrolador que posee
dos niveles de interrupciones enmascarables, uno de prioridad alta (HP) y otro de prioridad
baja (LP).
La rutina de atención de la interrupción HP se encuentra en la dirección de memoria
000008h y la rutina de atención de la interrupción LP se encuentra en la dirección 0000018h.
Además, cuenta con
un contador de programa (PC),
un registro que apunta al tope de la pila (SP) y
un registro de estado (PSW) de 8 bits en el cual
• los bits del 0-3 son bits de estado de la ALU (C, Z, V, N),
3
• el bit 4 (HIE) habilita (1) o deshabilita (0) las interrupciones de prioridad alta,
• el bit 5 (LIE) habilita (1) o deshabilita (0) las interrupciones de prioridad baja,
• el bit 6 (IFH) y el 7 (IFL) indican si se produjo una interrupción de prioridad alta
o de prioridad baja respectivamente (1 con interrupción - 0 sin interrupción ).
Ante una interrupción, antes de dejar camino su rutina de atención, el microcontrolador
inhibe las interrupciones (HIE=0 y LIE=0).
En la lı́nea LP estarán conectados un Reloj de tiempo real (RTC) y un panel de control
(CP) por lo tanto cualquiera de los dos puede generar una interrupción de prioridad
baja.
En la lı́nea HP tendrá un sensor de apertura de puerta (DS).
Las rutinas que manejan los dispositivos se encuentran en las direcciones que se muestran
a continuación: RTC en 000108h, CP en 000304h y DS en 000510h.
El RTC y el CP poseen sendos registros de estado (RTC STATUS y CP STATUS) . Este
registro puede ser escrito o leı́do desde el microcontrolador con una instrucción de E/S. Ambos
dispositivos continúan solicitando interrupción hasta que se escribe la constante 0 en su
registro de estado o el dispositivo desiste del pedido.
a) Describir en pseudocódigo los pasos que realiza el hardware del microcontrolador para
detectar la interrupción hasta que deja paso a la rutina de atención de interrupción
solicitada.
b) Describa detalladamente con un algoritmo (pseudocódigo) la rutina de atención de interrupciones de prioridad baja (muestre cómo detecta quién produjo la interrupción).
Tener en cuenta que cuando se está atendiendo a un dispositivo de prioridad baja, las
interrupciones de prioridad alta deben estar habilitadas, y que de esto se debe encargar
el software. Analizar cuál es el contexto que debe ser salvado por la rutina antes de
iniciar el tratamiento especı́fico de cada dispositivo.
c) Cuando se termina la rutina de atención de interrupción, ¿qué operaciones necesita
realizar el hardware para retornar de la interrupción en forma transparente?
Ejercicio 6 El procesador central de la cabina de un avión tiene 4 dispositivos conectados:
1. Monitor de presión del aire en la cabina del piloto y de los pasajeros.
2. Monitor de altura
3. Monitor de combustible
4. Monitor GPS
Cada monitor solicita una interrupción cuando se ha registrado un cambio en el entorno
que está midiendo para informar sobre el nuevo estado. Los monitores están listados por
prioridad, siendo 1 el de mayor prioridad y 4 el de menor. Un monitor de mayor prioridad
puede interrumpir la rutina de atención de interrupciones de un monitor de menor prioridad.
Cada monitor posee en alguna parte de la memoria una rutina de atención especı́fica para ese
dispositivo.
El acceso a los registros de los dispositivos de E/S y los controladores es mediante Registros
No Mapeados en memoria (espacio de direcciones independiente de E/S), para lo cual esta
arquitectura posee las instrucciones especiales:
IN Reg,RegES que copia el contenido del registro de E/S a un registro del CPU
4
OUT RegES,Reg que copia el contenido del registro en el registro de E/S.
El CI tiene un registro de E/S no mapeado a memoria de 16 bits en la dirección INTMASK
para configurar la máscara de interrupciones. En este registro el bit 0 para el monitor 1, el bit
1 para el monitor 2, etc. Los bits 4-15 no se utilizan. Un bit en 1 indica que debe ser atendida
la interrupción del monitor asociado a dicho bit.
El CPU cuenta con un flag I en el registro PSW, que también incluye todos los otros flags,
y con dos instrucciones para habilitar o deshabilitar interrupciones: CLI y STI.
Cuando el CPU decide atender a un dispositivo que está interrumpiendo, se lo avisa
al controlador de interrupciones levantando la señal INTA (interrupción reconocida). Acto
seguido el controlador coloca en el bus de datos el número de dispositivo que corresponde
atender de acuerdo a la máscara. Cuando se le da el control a una rutina de atención de
interrupciones, todas las interrupciones se encuentran inhibidas.
Cuando el monitor de altura solicita una interrupción al controlador de interrupciones:
a) Describa el comportamiento de la señal INTR.
b) Indique un mecanismo para ubicar las direcciones de las rutinas de atención de interrupciones.
c) ¿Qué acciones se llevan a cabo por el hardware del procesador?
d) Completar la siguiente rutina de atención:
RAT_MONITOR_ALTURA:
; Guarda la mascara
PUSH AX
IN AX, INTMASK
PUSH AX
; apila el registro AX
; copia el contenido del reg. de ES INTMASK en AX
; apila la máscara actual
; Setear mascara inhibiendo interrupciones de menor prioridad.
MOV AX , .... (completar)
OUT INTMASK, AX
;copia el contenido de AX en el reg. de ES INTMASK
; habilitar interrupciones
....(completar)
; Salvar el estado de lo que falte
....(completar)
; Obtener la altura nueva
IN AX, 43h
; copia el contenido
LEA SI, Altura
; Copia la constante
MOV [SI], AX
; Copia el contenido
; dirección apuntada
del reg. 43h de ES en AX
Altura en el reg. SI
del registro AX en la
por el reg. SI
; Ya se actualizó la altura, completar lo que falta para terminar.
e) ¿Es necesaria una instrucción especial para indicar el fin de una interrupción o alcanza
con el mismo RET que se utilizar para volver de un CALL?
Ejercicio 7 El MC68000 es un procesador que contiene un PC de 24 bits que direcciona a
byte y un registro de estado (SR) de 16 bits el cual guarda el estado del procesador y los
flags.
Este procesador posee 2 modos de operación que son indicados en el bit S del registro SR:
5
Usuario (S=0): sólo se puede acceder a los primeros 8 bits del SR que contienen los
flags.
Supervisor (S=1): se puede acceder a todo el SR (incluyendo a la máscara de interrupciones que contiene la prioridad y el bit de modo) y a direcciones de memoria donde
están mapeados los dispositivos de E/S.
Los bits I2,I1,I0 del registro de estado definen la máscara de interrupciones utilizada.
Máscara
111
...
001
000
Significado
máxima prioridad
...
mı́nimo prioridad
interrupciones deshabilitadas
El CPU posee:
3 señales de entrada: IPL0, IPL1 e IPL2 para las interrupciones externas. Estas señales
indican el nivel de prioridad de la interrupción solicitada. El CPU atiende una interrupción sólo si I2,I1,I0!=000 y I2,I1,I0≤IPL2,IPL1,IPL0.
1 señal de salida: IPEND, para el reconocimiento de la interrupción. Si el CPU reconoce
la interrupción levanta la señal (IPEND=1).
Una vez que el procesador reconoció la interrupción (IPEND=1), el dispositivo tiene 2
formas distintas de indicarle al CPU cuál es la dirección de inicio de la rutina de atención de
interrupción:
Si el dispositivo levanta la señal AVEC (AVEC=1), le indica al CPU que debe utilizar
la dirección del vector de interrupciones 000000h, e indexar esta tabla usando el nivel
de interrupción codificada en IPL2,IPL1,IPL0
Si el dispositivo baja la señal AVEC (AVEC=0), el dispositivo coloca en el bus de datos
la dirección de inicio de otro vector de interrupciones. El CPU leerá esta dirección del
bus de datos, y la indexará usando el ı́ndice codificado en IPL2,IPL1,IPL0.
6
a) Detalle todos los pasos que cree usted que se desencadenan en el sistema al llegar
un pedido de interrupción hasta que la misma es satisfecha y se devuelve el control.
Justifique la decisión del orden de los pasos y aclarando debidamente que es lo que
realiza el micro código (hardware) y que es lo que realiza la rutina de atención de
interrupciones (software).
b) Con los pasos que detalló en 1 describa el comportamiento del 68000 si se activan
las lineas IPLx de la siguiente forma IPL2=0,IPL1=0,IPL0=1, con un SR=021Ah y
el dispositivo que provoca la interrupción no posee vector de interrupciones propio.
Mencione a qué posición de memoria se va a buscar la dirección de inicio de la rutina
de atención de interrupciones de este dispositivo.
c) Realice un gráfico que muestre que interrupción se esta atendiendo, en que estado queda
el SR a cada instante suponiendo que su valor inicial es SR=0011h. Utilice el número
de dispositivo como su nivel de interrupción. Suponga que las rutinas no alteran los
códigos de condición y aquellos bits que no se utilizan permanecen en 0. Tome en
cuenta que el microprocesador puede encolar hasta 2 pedidos de interrupción y que
atender la interrupción le lleva 10 unidades de tiempo. Mientras que no esta atendiendo
una interrupción el 68000 corre un programa con nivel de usuario.
Instante T
10
25
30
43
44
Dispositivo
1
4
6
2
3
Ejercicio 8 Algunas arquitecturas implementan una interrupción temporizada que se dispara
automáticamente cada n ciclos de reloj. ¿De qué sirve interrumpir al procesador cuando
ningún dispositivo requiere realmente su atención?
Ejercicio 9 Indicar qué técnica de sincronización (polling o interrupciones) y qué mecanismo
de transferencia de información a memoria (a través de la CPU o usando DMA) es el más
apropiado para cada uno de los siguientes dispositivos.
a) Disco rı́gido
b) Teclado
c) Calefón programable, dentro de un sistema embebido.
Justificar la respuesta describiendo cómo utilizarı́a el dispositivo con el mecanismo propuesto.
Ejercicio 10
1
1
Se cuenta con el siguiente sistema:
Ch. 7, pag. 282, Computer Organization and Architecture, Null & Lobur.
7
A continuación se describe un posible protocolo entre el controlador de DMA y el de un
dispositivo de E/S para realizar transferencias de datos usando el I/O Bus.
1. El controlador DMA pone en el bus de direcciones el identificador del dispositivo con
el que desea iniciar la comunicación y levanta la señal de Request y de RD o WR, según
corresponda.
2. El controlador del dispositivo detecta la señal de Request y compara su propio identificador
con el contenido del bus de direcciones.
3. Si coincide el identificador y el dispositivo se encuentra listo, el controlador levanta la señal
de Ready.
4. El controlador DMA detecta la señal de Ready. En el caso de tratarse de una escritura, el
controlador DMA pone el dato a escribir junto con su posición de memoria en los buses
correspondientes. Por otro lado, en el caso de una lectura, el controlador de DMA pone la
dirección del dato deseado.
5. El controlador DMA baja la señal de Request.
6. De tratarse de una escritura, el controlador del dispositivo ordena grabar el dato, o en el
caso de una lectura pone el dato en el bus. Luego, baja la señal de Ready.
7. Si se trata de una lectura el DMAC lee el dato del bus de datos.
8. En ambos casos, lectura y escritura, el DMAC retira las lı́neas y baja la señal de RD o WR
según corresponda.
9. Si es una lectura, cuando el DMAC baja la señal de RD la Controladora del dispositivo
quita el dato del bus de datos.
Teniendo en cuenta el protocolo y el sistema presentado, escribir en pseudocódigo la rutina
del controlador de la cinta, suponiendo el mismo hace polling sobre la señal de Request.
Para ello, cuenta con las siguientes primitivas para manejar la cinta de backup:
REW : Rebobina la cinta hasta el principio.
PLAY: Lee el dato (de 16 bits) de la posición actual y lo almacena en un buffer. Luego
avanza la cinta una posición.
READ: Lee el buffer de datos y devuelve el contenido.
Y las siguientes primitivas para manejar las lı́neas de control, el bus de datos y direcciones
del I/O Bus:
requestOn() : Devuelve si está levantada la lı́nea de Request.
readOn(): Devuelve si el controlador DMA desea leer.
writeOn(): Devuelve si el controlador DMA desea escribir.
setReady(x): Setea la señal de Ready con el valor de x (x en 1 ó 0).
setData(x): Escribe x en el bus de datos.
getData(): Lee el bus de datos.
setAddress(x): Escribe x en el bus de direcciones.
getAddress(): Lee el bus de direcciones.
Se considera que el primer dato de la cinta se encuentra en la posición 0 y que la cinta no
tiene más de 65536 posiciones. Tener en cuenta que esta cinta es sólo de lectura.
8
Ejercicio 11 Teniendo en cuenta el protocolo y el sistema presentado en el Ejercicio 10,
escribir en pseudocódigo la rutina del controlador DMA que se encarga de comunicarse con
un dispositivo (controlador) y la memoria principal (tanto en el caso de lectura como de
escritura).
El controlador DMA posee un conjunto de registros, que ya se encuentran cargados con
la siguiente información:
DEVICE: identificador del dispositivo.
DEVICE ADDRESS: dirección de memoria (en el espacio de direccionamiento del dispositivo) que se desea leer/escribir.
MEM ADDRESS: dirección de memoria (en el espacio de direccionamiento de la memoria
principal) que se desea leer/escribir.
SIZE: cantidad de datos a transferir.
STATUS:
• el bit menos significativo contiene un 1 en caso de escritura, y un 0 en caso contrario.
• si el bit mas significativo contiene 1 indica que ya se han se cargado todos los datos
necesarios, y se puede iniciar la transmisión.
Las primitivas para manejar las lı́neas de control, el bus de datos y direcciones del I/O
bus son las siguientes:
readyOn : Devuelve si está levantada la lı́nea de Ready.
setReadWrite(x): Setea la señal de Read con x en 1 y Write con x en 0.
setRequest(x): Setea la señal de Request con x (con x en 1 ó 0).
setData(x): Escribe x en el bus de datos.
getData: Lee del bus de datos.
setAddress(x): Escribe x en el bus de direcciones.
getAddress: Lee del bus de direcciones.
Cuando el controlador de DMA desea leer un dato de memoria principal (usando el Memory Bus) utiliza la rutina readMemory(address). En el caso de una escritura a memoria,
utiliza writeMemory(address, data). Ambas rutinas ya se encuentran programadas. Para
solicitar una interrupción el DMAC dispone de la primitiva RequestINT().
Ejercicio 12 Manteniendo el tamaño de los buses, ¿cómo modificarı́a el protocolo del Ejercicio 10 para permitir utilizar direcciones, dentro del espacio de direccionamiento del dispositivo,
de más de 16 bits? (pista: se pueden agregar lı́neas de control).
Ejercicio 13 En una computadora ORGA1 se ha conectado un controlador DMA como el del
Ejercicio 11. El acceso a cada uno de los registros del controlador está mapeado a memoria
del siguiente modo:
DEVICE DEVICE ADDRESS MEM ADDRESS
SIZE
STATUS
0xFFF0
0xFFF1
0xFFF2
0xFFF3
0xFFF4
Escribir un programa en assembler que acceda a una cinta para transferir datos via DMA. El
identificador de la cinta es 0x354A. Se quiere transferir desde la posición 0x0045 de la cinta
hasta la 0x013A. Estos datos se deben guardar a partir de la posición 0xA142 de la memoria
principal. El bit menos significativo del registro STATUS contiene un 1 en caso de escritura, y
un 0 en caso contrario. La forma de indicarle al controlador DMA que ya se cargaron todos los
datos necesarios, y que puede iniciar la transmisión, es seteando en 1 el bit más significativo
del registro STATUS.
9
Ejercicio 14 En algunas arquitecturas es posible definir zonas de memoria como excluı́das
de cache (las referencias a estas direcciones siempre son resueltas en la memoria principal)
¿Por qué motivos podrı́a ser esto deseable?
Ejercicio 15 Discuta brevemente: ¿Qué desventaja encuentra en un sistema con DMA pero
con un CPU sin interrupciones?
Ejercicio 16 Un disco tiene 128 pistas de 32 sectores cada una, sobre una superficie de 8
platos de una sola cara cada uno. El disco gira a 3600 rpm y para moverse entre dos pistas le
toma 60ms en el peor caso. ¿Cuál es el tiempo más largo necesario para leer completamente
un sector arbitrario, ubicado en cualquier lugar del disco?
Ejercicio 17 Un disco tiene p pistas de s sectores cada una, y h cabezas. El disco gira a R
rpm y para moverse entre dos pistas adyacentes le toma ta y entre pistas extremos tx (peor
caso). Calcular los siguientes parámetros:
a) Tt : Tiempo de latencia media (en sg)
b) Ts : Tiempo de lectura de 1 sector
c) Tmin : Tiempo mı́nimo para leer el disco completo
d) Tmed : Tiempo medio para leer secuencialmente el disco completo
e) Tmax : Tiempo máximo para leer el disco completo (no secuencialmente)
Ejercicio 18 Se cuenta con un controlador de disco rı́gido que posee las siguientes primitivas:
READ: lee el sector actual del disco.
CURRENT CYLINDER, CURRENT HEAD, CURRENT SECTOR : devuelven, respectivamente, el
cilindro, cabeza y sector actual del disco.
SET CYLINDER(c): mueve el cabezal de lecto-escritura del disco hasta el cilindro c.
SET HEAD(h): selecciona la cabeza h que utilizará para leer o escribir.
#HEAD, #CYLINDER, #SECTOR: devuelven, respectivamente, la cantidad de cabezas, cilindros y sectores del disco.
Suponer que para leer un sector especı́fico, se debe posicionar la cabeza del disco en el
cilindro apropiado y esperar (mediante polling) a que el disco gire para llegar al sector buscado.
El espacio de direcciones del disco comienza en la dirección cero y se corresponde con la terna
<cabeza, cilindro, sector>= <0,0,0>. La última posición es la #HEAD * #CYLINDER *
#SECTOR, y se corresponde con la terna <#HEAD-1, #CYLINDER-1, #SECTOR-1>.
a) Considerando el protocolo del Ejercicio 10, escribir en pseudocódigo una rutina que se
encargue de leer datos del disco a través de DMA. Asumir que se cuenta con las mismas
primitivas para manejar lı́neas de control y buses que las del Ejercicio 10.
b) En el caso que el controlador DMA solicite una dirección que no pertenezca al espacio de
direccionamiento del disco, sugerir una modificación al protocolo para que el dispositivo
pueda indicarle un estado de error al controlador. Modificar el pseudocódigo de acuerdo a
esto.
10
Descargar