Upload
julio-peralta-benitez
View
229
Download
0
Embed Size (px)
Citation preview
Organización del Organización del ComputadorComputador
CPU 3 y 4 – Diseño de una CPU 3 y 4 – Diseño de una computadoracomputadora
ConsideracionesConsideraciones
Una única ALU, una única Memoria, un Una única ALU, una única Memoria, un único Banco de Registros.único Banco de Registros.
Dos tipos de problemas:Dos tipos de problemas: Una instrucción utiliza un mismo recurso Una instrucción utiliza un mismo recurso
varias veces y se pierden los valores varias veces y se pierden los valores anteriores.anteriores.
Una instrucción utiliza un mismo recurso en la Una instrucción utiliza un mismo recurso en la misma etapa para dos o más cosas distintas.misma etapa para dos o más cosas distintas.
Algunos componentes disponiblesAlgunos componentes disponibles
P C16 32
S ignex te nd
M e m R ea d
M e m W rite
m e m oryW riteda ta
R e add ata
Ad dre ss
Program Counter
Unidad de memoria
Unidad de extensión de signo
R egW rite
R eg is te rsW ritere gister
R e add ata 1
R e add ata 2
R e adre gister 1
R e adre gister 2
W rited ataD ata
D ata
R eg is te rnu m bers
5
5
5
Registros
A LU co ntrol
A LUresu lt
A LUZero
3
ALU
Diseño: Pasos necesariosDiseño: Pasos necesarios1er Paso: Analizar el conjunto de : Analizar el conjunto de
instrucciones para determinar los instrucciones para determinar los requerimientos del Camino de Datos.requerimientos del Camino de Datos.
2o Paso: Seleccionar los componentes. : Seleccionar los componentes. 3o Paso: Construir el Camino de Datos según : Construir el Camino de Datos según
los requerimientos.los requerimientos.4o Paso: Analizar la implementación de cada : Analizar la implementación de cada
instrucción para determinar las señales de instrucción para determinar las señales de control necesarias.control necesarias.
5o Paso: Construir el Control.: Construir el Control.
1. Fetch de Instrucción (Fetch/IF)
2. Decodificación (y lectura de registros) (Decode/ID)
3. Acceso a datos en memoria (Mem) (previo Cálculo de Dirección de memoria)
4. Ejecución (Execution/EX)
5. Escritura en registros (Write Back/WB)
Cinco Etapas (o fases) de Ejecución
Formato MIPS de InstrucciónFormato MIPS de Instrucción
Son todas de 32 bits. Son todas de 32 bits. Tres formatos:Tres formatos:
Tipo R (register)Tipo R (register) AritméticasAritméticas
Tipo I (immediate)Tipo I (immediate) Transferencia, saltoTransferencia, salto Operaciones con Operaciones con
operando inmediatooperando inmediato
Tipo J (jump)Tipo J (jump) SaltosSaltos
op rs rt rd sh funct
31 26 21 16 11 6 0
op rs rt Address/inmediate
31 26 21 16 0
op Target Address
31 26 0
Formato R: RegisterFormato R: Register
op = 0op = 0 rs, rt = identificación de los registros fuenters, rt = identificación de los registros fuente rd = identificación del registro destinord = identificación del registro destino sh = cantidad de shiftssh = cantidad de shifts func = identifica la operación (ej. add=32, sub=34, func = identifica la operación (ej. add=32, sub=34,
sll=0,srl=10)sll=0,srl=10)
0 rs rt rd Sh (5) fun (6)
31 26 21 16 11 6 0
Formato R :EjemplosFormato R :Ejemplos Add Add $1, $2, $3$1, $2, $3
0 2 3 1 0 32
31 26 21 16 11 6 0
SubSub $1, $2, $1, $2, $3$3
0 2 3 1 0 34
31 26 21 16 11 6 0
SltSlt $1, $2, $1, $2, $3$3
0 2 3 1 0 42
31 26 21 16 11 6 0
Set Less ThanSet Less Than si ($2<$3) entonces $1=1sino $1=0si ($2<$3) entonces $1=1sino $1=0
JrJr $31$310 31 0 0 0 8
31 26 21 16 11 6 0
Jump RegisterJump Register PC=$31PC=$31
Formato I : ImmediateFormato I : Immediate
op rs rt Address/inmediate
31 26 21 16 0
8 2 1 100
31 26 21 16 0 AddiAddi $1,$2,100$1,$2,100
$1=$2+100$1=$2+100
Formato I : ImmediateFormato I : Immediate
35 2 1 100
31 26 21 16 0 LwLw $1, 100($2) $1, 100($2)
43 2 1 100
31 26 21 16 0
SwSw $1, 100($2) $1, 100($2)
Load Word Load Word $1=M[$2+100]$1=M[$2+100]
Store Word Store Word M[$2+100]=$1M[$2+100]=$1
op rs rt Address/inmediate
31 26 21 16 0
Formato I : ImmediateFormato I : Immediate
4 1 2 100
31 26 21 16 0 BeqBeq $1,$2,100$1,$2,100
5 1 2 100
31 26 21 16 0
BneBne $1,$2,100$1,$2,100
Branch Equal Branch Equal si ($1=$2) entonces ir a PC+4+100si ($1=$2) entonces ir a PC+4+100
Branch Not Equal Branch Not Equal si ($1!=$2) entonces ir a PC+4+100si ($1!=$2) entonces ir a PC+4+100
op rs rt Address/inmediate
31 26 21 16 0
Formato J : JumpsFormato J : Jumps
JJ 1000010000
PC PC 27..227..2=10000=10000 PCPC1..01..0=00=00
op Target Address
31 26 0
2 10000
31 26 0
JalJal 10000100003 10000
31 26 0
JUMP AND LINK JUMP AND LINK $31=PC+4$31=PC+4
PC PC 27..227..2=10000=10000 PCPC1..01..0=00=00
RTL (Registrer Tranfer Language)RTL (Registrer Tranfer Language)
Cada instrucción está formada por un Cada instrucción está formada por un conjunto de microoperaciones.conjunto de microoperaciones.
Se utiliza para determinar la secuencia Se utiliza para determinar la secuencia exacta de microoperaciones.exacta de microoperaciones.
Ejemplo (Fetch en Marie):Ejemplo (Fetch en Marie): t1:t1: MAR MAR (PC) (PC) t2:t2: MBR MBR Mem[MAR] Mem[MAR]
PC PC (PC) + 1 (PC) + 1 t3:t3: IR IR (MBR) (MBR)
11oo Paso: Paso: Tipo R (add, sub...)Tipo R (add, sub...)
R[rd] = R[rs] ‘op’ R[rt]; PC=PC+4
RTLT1: IR Mem[PC]
PC PC + 4
T2: A R[rs]
B R[rt]
T3: ALUOut A ‘op‘ B
T4: R[rd] ALUOut
0 rs rt rd Sh (5) fun (6)
31 26 21 16 11 6 0
BEQ if (R[rs] == R[rt]) then PC PC+(sign_ext(Imm16)*4)
RTLT1: IR Mem[PC];
PC PC + 4T2: A R[rs] (Se guardan para el ciclo siguiente)
B R[rt] ALUOut PC + sign_ext (Imm16) << 2 (calcula la dir. del salto)
T3: PC ALUOut [Si el flag Zero esta activo]
op rs rt Address/inmediate
31 26 21 16 0
11oo Paso: Paso: Tipo I (Branch)Tipo I (Branch)
LOAD R[rt] Mem[ R[rs]+sign_ext(Imm16) ]
RTLT1: IR Mem[PC] PC PC + 4 T2: A R[rs] B R[rt] (B no se usa)T3: ALUOut A + sign_ext (Imm16) (Calcula la dir.)T4: MBR Mem[ALUOut] T5: R[rt] MAR
op rs rt Address/inmediate
31 26 21 16 0
11oo Paso: Paso: Tipo I (Load)Tipo I (Load)
STORESTORE Mem[ R[rs]+sign_ext(Imm16) ]Mem[ R[rs]+sign_ext(Imm16) ] R[rt]; R[rt];
RTLT1: IR Mem[PC] PC PC + 4 T2: A R[rs] B R[rt] (valor a escribir)T3: ALUOut A + sign_ext (imm16) T4: Mem[ALUOut] B
op rs rt Address/inmediate
31 26 21 16 0
11oo Paso: Paso: Tipo I (Store)Tipo I (Store)
Jump PC<31:2> PC<31:28>,(target<25:0> << 2) (Calcula la dirección concatenando los 26 bits del operando)
RTLT1: IR Mem[PC]
PC PC + 4 T2: ¡NADA!T3: PC<31:2> PC<31:28>,(IR<25:0> << 2)
11oo Paso: Paso: Tipo J (jump...)Tipo J (jump...)
op Target Address
31 26 0
Resumen de las etapasResumen de las etapas
Número de CiclosNúmero de Ciclos
Brach y Jump: 3 ciclos (IF,ID,EX)Brach y Jump: 3 ciclos (IF,ID,EX)Las tipo R: 4 ciclos (IF,ID,EX,WB)Las tipo R: 4 ciclos (IF,ID,EX,WB)STORE: 4 ciclos (IF,ID,EX,MEM)STORE: 4 ciclos (IF,ID,EX,MEM)LOAD: 5 (IF,ID,EX,MEM,WB)LOAD: 5 (IF,ID,EX,MEM,WB)
1- Fetch (IF)1- Fetch (IF)
RTLRTL IR Memory[PC]
PC PC + 4
2 - Decode (ID)2 - Decode (ID)
RTLRTLOpción lectura de registrosOpción lectura de registros
A reg[IR[25:21]]
B reg[IR[20:16]]
Opción cálculo de saltoALUOut PC + sign-extend(IR[15:0]) <<2
3 - Execute (Ex)3 - Execute (Ex)
RTLRTLOpción artimética/lógica Opción artimética/lógica
ALUOut A op B, oALUOut A op sign-extend(IR[15:0])
Cálculo de dirección (Load o Store)ALUOut A + sign-extend(IR[15:0])
Salto condicionalSi A = B, PC ALUOut
Jump PC[31:28] PC || IR[25:0] <<2
4 – Memoria (Mem)4 – Memoria (Mem)
Sólo para Load o StoreSólo para Load o StoreRTLRTL
Opción LecturaOpción LecturaMBR Memory[ALUOut]
Opción GrabadoMemory[ALUOut] B
5 - Escritura5 - Escritura
RTLRTLOpción instrucción tipo R o aritmética Opción instrucción tipo R o aritmética
inmediatainmediatareg[ IR[15:11] ] ALUOut
Opción Load (celda de memoria leída en el ciclo anterior)
reg[IR[20:16]] MBR
11erer Paso: Paso: Requerimientos del Conjunto Requerimientos del Conjunto de Instruccionesde Instrucciones
MemoriaMemoria Para instrucciones y datosPara instrucciones y datos
Registros (32x32)Registros (32x32) Leer rs, leer rtLeer rs, leer rt Escribir rt ó rdEscribir rt ó rd
PC, MBRPC, MBR A, B A, B para datos intermedios, para datos intermedios, ALUOutALUOut (retener salida ALU) (retener salida ALU) Extensor de signo Extensor de signo (16 a 32)(16 a 32) Sumar y RestarSumar y Restar registros y/o valores inmediatos registros y/o valores inmediatos Operaciones lógicas Operaciones lógicas (and/or) registros y/o valores (and/or) registros y/o valores
inmediatosinmediatos Sumar Sumar 4 al PC ó 4 + inmediato extendido * 44 al PC ó 4 + inmediato extendido * 4
22oo Paso: Paso: Componentes del Camino de Componentes del Camino de DatosDatos
PC
b. Program counter
b . A LU
R egW rite
R eg is te rsW ritere gister
R e add ata 1
R e add ata 2
R e adre gister 1
R e adre gister 2
W rited ataD ata
D ata
R eg is te rnu m bers
a . R egisters
5
5
5A LU co ntrol
A LUresu lt
A LUZero
3
16 32Sign
extend
b. Sign-extension unit
MemRead
MemWrite
memoryWritedata
Readdata
a. memory unit
Address
22oo Paso: Paso: Componentes del Camino de Componentes del Camino de DatosDatos
Elementos de Almacenamiento: Banco de Elementos de Almacenamiento: Banco de Registro (dos puertos de lectura)Registro (dos puertos de lectura)
Mux
Register 0
Register 1
Register n – 1
Register n
Mux
Read data 1
Read data 2
Read registernumber 1
Read registernumber 2
RegW
CLK
LRA
LRB
ER
BusW
BusA
BusB32 Registros de 32 bits
32
5
5
5
32
32
22oo Paso: Paso: Componentes del Camino de Componentes del Camino de DatosDatos
Elementos de Almacenamiento: Banco de Elementos de Almacenamiento: Banco de Registros (un puerto de escritura)Registros (un puerto de escritura)
n-to-1decoder
Register 0
Register 1
Register n – 1C
C
D
DRegister n
C
C
D
D
Register number
Write
Register data
0
1
n – 1
n
RegW
CLK
LRA
LRB
ER
BusW
BusA
BusB32 Registros de 32 bits
32
5
5
5
32
32
22oo Paso: Paso: Componentes del Camino de Componentes del Camino de DatosDatos
Una sola memoria para instrucciones y datos Una sola memoria para instrucciones y datos
WE
CLK
dirección
Dato In
Dato Out
Memoria
32
32
32
MUX
De la ALU
Del PC
IR
IoD
IRW
33erer Paso: Paso: Reuso de Unidades Reuso de Unidades Funcionales: ALU únicaFuncionales: ALU única
ALU debe realizarALU debe realizar operaciones sobre registrosoperaciones sobre registros base + desplazamiento para loads y storesbase + desplazamiento para loads y stores dirección destino de salto: registro + sign_ext(Imm16) * 4dirección destino de salto: registro + sign_ext(Imm16) * 4 PC=PC+4 PC=PC+4
BusB 32
PC
32
MUX
32
ALUctr
MUXBusA
32
Inm16
SignExt
>>
2
4
32
32
33erer Paso: Paso: Registro ALUout Registro ALUout
BusB 32
PC32
MUX
32
ALUctr
MUXBusA
32
Inm16
SignE
xt
>>
2
4
32
32
ALU
Out
DstW
33erer Paso: Paso: Fetch - IFFetch - IF
Mem[PC]; PC Mem[PC]; PC PC + 4 (código secuencial PC + 4 (código secuencial))
33erer Paso: Paso: Decode - IDDecode - ID
33erer Paso: Paso: Ejecución - EXEjecución - EX
33erer Paso: Paso: Operandos - MemOperandos - Mem
33erer Paso: Paso: Write back- WBWrite back- WB
Señales de controlSeñales de control
Grafo de EstadosGrafo de EstadosIRMEM[PC];
PCPC+4
AR[rs];
BR[rt];
ALUOutPC+(signext(inm16)<<2)
ALUOutAopB
ALUOutA+ signext(inm16)
ZA-B
si (Z) PCALUOut
MBRMEM[ALUOut]
R[rd]ALUOut R[rt] -MBR
MEM[ALUOut]B
Format R BeqPC PC[31:28] || (IR[25:0] <<2)
Jump
LwSw
Grafo de EstadosGrafo de Estados
S0
S1
S6
S2
S8
S3
S7 S4
S5
S9
Control de SeñalesControl de Señales
S0 S1 S2 S3 S4 S5 S6 S7 S8 S9
RegWrite
IRWrite
MemRead
MemWrite
PCWrite
PCWCond
PCSource
ALUsrcA
ALUsrcB
MemToReg
RegDst
IoD
ALUop
Control de SeñalesControl de Señales
S0 S1 S2 S3 S4 S5 S6 S7 S8 S9
RegWrite 0 0 0 0 1 0 0 1 0 0
IRWrite 1 0 0 0 0 0 0 0 0 0
MemRead 1 1
MemWrite 0 0 0 0 0 1 0 0 0 0
PCWrite 1 0 0 0 0 0 0 0 0 1
PCWCond 1
PCSource 00 01 10
ALUsrcA 0 0 1 1 1 1 1 1 1
ALUsrcB 01 11 10 10 10 10 00 00 00 00
MemToReg 1 0
RegDst 0 1
IoD 0 1 1 1
ALUop 00 00 00 10 01
• Implementación:
Máquina de Estados Finitos
PCWrite
PCWriteCond
IorD
MemtoReg
PCSource
ALUOp
ALUSrcB
ALUSrcA
RegWrite
RegDst
NS3NS2NS1NS0
Op5
Op4
Op3
Op2
Op1
Op0
S3
S2
S1
S0
State register
IRWrite
MemRead
MemWrite
Instruction registeropcode field
Outputs
Control logic
Inputs
ROM = "Read Only Memory"ROM = "Read Only Memory" Se graba la memoria con valores fijosSe graba la memoria con valores fijos
Se usa la ROM para implementar la Tabla de VerdadSe usa la ROM para implementar la Tabla de Verdad Con direcciones de Con direcciones de m-bits, m-bits, podemos direccionar podemos direccionar 22mm entr entradasadas en en
la la ROM.ROM. Las salidas son los datos (palabras) direccionadasLas salidas son los datos (palabras) direccionadas
ImplementaImplementacciióónn con ROM con ROM
m n
0 0 0 0 0 1 10 0 1 1 1 0 00 1 0 1 1 0 00 1 1 1 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 11 1 0 0 1 1 01 1 1 0 1 1 1
¿¿Cuantas entradas tenemosCuantas entradas tenemos?? 6 bits 6 bits para el para el opcodeopcode 4 bit4 bits para el estados para el estado = 10 = 10 líneas de direcciones líneas de direcciones (2(21010 = 1024 posibles direcciones) = 1024 posibles direcciones)
¿Cuantas salidas¿Cuantas salidas?? 16 16 señales de control del camino de datosseñales de control del camino de datos 4 bits de estado4 bits de estado = = 20 lineas de salida20 lineas de salida
ROM de 2ROM de 21010 x 20bits = 20Kbits x 20bits = 20Kbits Problema: mucho desperdicio, ya que para Problema: mucho desperdicio, ya que para
muchisimas entradas, las salidas son idénticas.muchisimas entradas, las salidas son idénticas. Por ejemplo, el codígo de operación se ignora muchas Por ejemplo, el codígo de operación se ignora muchas
vecesveces
ImplementaImplementacciióónn con ROM con ROM
ImplementaImplementación con PLAción con PLAOp5
Op4
Op3
Op2
Op1
Op0
S3
S2
S1
S0
IorD
IRWrite
MemReadMemWrite
PCWritePCWriteCond
MemtoRegPCSource1
ALUOp1
ALUSrcB0ALUSrcARegWriteRegDstNS3NS2NS1NS0
ALUSrcB1ALUOp0
PCSource0
Se podrían hacer dos ROM:Se podrían hacer dos ROM:
— — 4 4 bits de estadobits de estado se usan como dirección de las palabras se usan como dirección de las palabras
de salida: de salida: 2 244 x 16 bits= 256bits x 16 bits= 256bits dede ROM ROM
— — 10 bits (6 opcode, 4 estado)10 bits (6 opcode, 4 estado) se usan como dirección para se usan como dirección para
la función de transición (nuevo estado): la función de transición (nuevo estado): 221010 x 4 bits de ROM x 4 bits de ROM
— Total: 4K bits de ROM— Total: 4K bits de ROM
PLA PLA es mas pequeñaes mas pequeña
— — puede compartir términos productopuede compartir términos producto
— — sólo utiliza las entradas que producen valores sólo utiliza las entradas que producen valores
— — puede considerar los “no importa”puede considerar los “no importa”
Tamaño Tamaño (#inputs (#inputs #product-terms) + (#outputs #product-terms) + (#outputs #product-terms) #product-terms) En el ejemploEn el ejemplo = (10x17)+(20x17) = 460 PLA cells = (10x17)+(20x17) = 460 PLA cells
Una celda de PLA es un poco mas grande que una de ROMUna celda de PLA es un poco mas grande que una de ROM
ROM vs PLAROM vs PLA
MicroprograMicroprogramaciónmación
PCWritePCWriteCondIorD
MemtoRegPCSourceALUOpALUSrcBALUSrcARegWrite
AddrCtl
Outputs
Microcode memory
IRWrite
MemReadMemWrite
RegDst
Control unit
Input
Microprogram counter
Address select logic
Op[
5–
0]
Adder
1
Datapath
Instruction registeropcode field
BWrite
• La ROM es la memoria donde se guardan las instrucciones para el camino de datos (microinstrucciones)
• La dirección de la ROM (microPC) es el estado
Es una metodología de especificaciónEs una metodología de especificación Apropiada para arquitecturas con cientos de Apropiada para arquitecturas con cientos de
instrucciones, modos, etc.instrucciones, modos, etc. Las señales se especifican simbólicamente usando Las señales se especifican simbólicamente usando
microinstruccionesmicroinstrucciones Se define el formato de la microinstrucción, Se define el formato de la microinstrucción,
estructurado en campos.estructurado en campos. Luego cada campo se asocia a un conjunto de Luego cada campo se asocia a un conjunto de
señalesseñales
MicroprogramMicroprogramaciónación
Diseño de microinstruccionesDiseño de microinstrucciones
Diferentes señales agrupadas por camposDiferentes señales agrupadas por campos
CampoCampo FunciónFunción
Alu ControlAlu Control Que operación debe hacer la ALU en este cicloQue operación debe hacer la ALU en este ciclo
SRC1SRC1 Especifica el 1º operando de la ALUEspecifica el 1º operando de la ALU
SRC2SRC2 Especifica el 2º operando de la ALUEspecifica el 2º operando de la ALU
Register CtrlRegister Ctrl Especifica Lectura/Grabación de registros, y la fuente Especifica Lectura/Grabación de registros, y la fuente para la grabaciónpara la grabación
MemoriaMemoria Especifica Lectura/Grabación. En lectura el registro de Especifica Lectura/Grabación. En lectura el registro de destino destino
PCWriteCtrlPCWriteCtrl Especifica la grabación del PCEspecifica la grabación del PC
SecuenciaSecuencia Determina como elegir la proxima microinstrucciónDetermina como elegir la proxima microinstrucción
Formato de Formato de MicroinstrucMicroinstruccciióónnField name Value Signals active Comment
Add ALUOp = 00 Cause the ALU to add.ALU control Subt ALUOp = 01 Cause the ALU to subtract; this implements the compare for
branches.Func code ALUOp = 10 Use the instruction's function code to determine ALU control.
SRC1 PC ALUSrcA = 0 Use the PC as the first ALU input.A ALUSrcA = 1 Register A is the first ALU input.B ALUSrcB = 00 Register B is the second ALU input.
SRC2 4 ALUSrcB = 01 Use 4 as the second ALU input.Extend ALUSrcB = 10 Use output of the sign extension unit as the second ALU input.Extshft ALUSrcB = 11 Use the output of the shift-by-two unit as the second ALU input.Read Read two registers using the rs and rt fields of the IR as the register
numbers and putting the data into registers A and B.Write ALU RegWrite, Write a register using the rd field of the IR as the register number and
Register RegDst = 1, the contents of the ALUOut as the data.control MemtoReg = 0
Write MDR RegWrite, Write a register using the rt field of the IR as the register number andRegDst = 0, the contents of the MDR as the data.MemtoReg = 1
Read PC MemRead, Read memory using the PC as address; write result into IR (and lorD = 0 the MDR).
Memory Read ALU MemRead, Read memory using the ALUOut as address; write result into MDR.lorD = 1
Write ALU MemWrite, Write memory using the ALUOut as address, contents of B as thelorD = 1 data.
ALU PCSource = 00 Write the output of the ALU into the PC.PCWrite
PC write control ALUOut-cond PCSource = 01, If the Zero output of the ALU is active, write the PC with the contentsPCWriteCond of the register ALUOut.
jump address PCSource = 10, Write the PC with the jump address from the instruction.PCWrite
Seq AddrCtl = 11 Choose the next microinstruction sequentially.Sequencing Fetch AddrCtl = 00 Go to the first microinstruction to begin a new instruction.
Dispatch 1 AddrCtl = 01 Dispatch using the ROM 1.Dispatch 2 AddrCtl = 10 Dispatch using the ROM 2.
MicroprogramMicroprogramaciónación
Microprogramando!Microprogramando!
LabelALU
control SRC1 SRC2Register control Memory
PCWrite control Sequencing
Fetch Add PC 4 Read PC ALU SeqAdd PC Extshft Read Dispatch 1
Mem1 Add A Extend Dispatch 2LW2 Read ALU Seq
Write MDR FetchSW2 Write ALU FetchRformat1 Func code A B Seq
Write ALU FetchBEQ1 Subt A B ALUOut-cond FetchJUMP1 Jump address Fetch
ReferenciasReferencias
Capitulo 5 - PattersonCapitulo 5 - PattersonVer resumen en sección DownloadVer resumen en sección Download
Capitulo 4 - TanembaunCapitulo 4 - TanembaunCapitulo 16 y 17 - StallingsCapitulo 16 y 17 - StallingsCapitulo 4 - NullCapitulo 4 - Null