aboutsummaryrefslogtreecommitdiff
path: root/etc/n6.lyx
blob: 37bb14427dcb6e6b90496131bc7904202bf189b3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
#LyX 2.3 created this file. For more info see http://www.lyx.org/
\lyxformat 544
\begin_document
\begin_header
\save_transient_properties true
\origin unavailable
\textclass book
\use_default_options true
\maintain_unincluded_children false
\language spanish
\language_package default
\inputencoding auto
\fontencoding global
\font_roman "default" "default"
\font_sans "default" "default"
\font_typewriter "default" "default"
\font_math "auto" "auto"
\font_default_family default
\use_non_tex_fonts false
\font_sc false
\font_osf false
\font_sf_scale 100 100
\font_tt_scale 100 100
\use_microtype false
\use_dash_ligatures true
\graphics default
\default_output_format default
\output_sync 0
\bibtex_command default
\index_command default
\paperfontsize default
\spacing single
\use_hyperref false
\papersize default
\use_geometry false
\use_package amsmath 1
\use_package amssymb 1
\use_package cancel 1
\use_package esint 1
\use_package mathdots 1
\use_package mathtools 1
\use_package mhchem 1
\use_package stackrel 1
\use_package stmaryrd 1
\use_package undertilde 1
\cite_engine basic
\cite_engine_type default
\biblio_style plain
\use_bibtopic false
\use_indices false
\paperorientation portrait
\suppress_date false
\justification true
\use_refstyle 1
\use_minted 0
\index Index
\shortcut idx
\color #008000
\end_index
\secnumdepth 3
\tocdepth 3
\paragraph_separation indent
\paragraph_indentation default
\is_math_indent 0
\math_numbering_side default
\quotes_style swiss
\dynamic_quotes 0
\papercolumns 1
\papersides 1
\paperpagestyle default
\tracking_changes false
\output_changes false
\html_math_output 0
\html_css_as_file 0
\html_be_strict false
\end_header

\begin_body

\begin_layout Standard
Según el 
\series bold
modelo von Neumann
\series default
, un computador está formado por: procesador, memoria y entrada/salida (E/S).
 Podemos clasificar los dispositivos de E/S en dispositivos de 
\series bold
almacenamiento
\series default
, 
\series bold
interfaz con el usuario
\series default
, 
\series bold
visualización y multimedia
\series default
, 
\series bold
comunicaciones
\series default
 y 
\series bold
adquisición de datos
\series default
.
 También podemos clasificarlos según su ancho de banda.
\end_layout

\begin_layout Section
Puertos y buses
\end_layout

\begin_layout Standard
Los periféricos tienen una serie de 
\series bold
puertos
\series default
 de E/S, registros externos a la CPU a través de los cuales se comunican
 la CPU y los dispositivos, integrados en la 
\series bold
controladora
\series default
 del dispositivo.
 Tipos de puertos:
\end_layout

\begin_layout Itemize

\series bold
De datos
\series default
: Lectura o escritura del dato a transferir.
\end_layout

\begin_layout Itemize

\series bold
De control
\series default
: Donde la CPU escribe las órdenes.
\end_layout

\begin_layout Itemize

\series bold
De estado
\series default
: Indica el estado en que se encuentra el dispositivo (por ejemplo, 
\emph on
ready
\emph default
/
\emph on
not ready
\emph default
).
\end_layout

\begin_layout Standard
La comunicación se realiza por 
\series bold
buses
\series default
 o 
\series bold
canales compartidos
\series default
, canales de comunicación en los que existen puntos de acceso en los que
 un dispositivo puede conectarse para formar parte del bus y comunicarse
 con el resto de dispositivos conectados.
 El hecho de ser compartido implica que las señales transmitidas por un
 dispositivo están disponibles para el resto.
\end_layout

\begin_layout Standard
Si se conectan muchos dispositivos a un bus, sus prestaciones disminuyen,
 al aumentar la latencia por el tiempo de coordinación, y se forma un 
\series bold
cuello de botella
\series default
 o 
\series bold
congestión
\series default
 por estar los dispositivos esperando a su turno para usar el bus.
 Este problema se soluciona usando varios buses de distintas velocidades
 organizados de forma jerárquica, con los dispositivos más exigentes conectados
 a los buses más rápidos y cercanos al procesador.
\end_layout

\begin_layout Standard
El 
\series bold
control de acceso al bus
\series default
 o 
\series bold
arbitraje del bus
\series default
 es un mecanismo para resolver conflictos en el uso del bus, como que varios
 dispositivos intentasen realizar una operación a través del bus a la vez.
 Este mecanismo decide qué dispositivo puede tomar control en cada instante.
\end_layout

\begin_layout Standard
La forma más simple es establecer un 
\series bold
amo
\series default
 del bus (
\emph on
master
\emph default
), normalmente la CPU, que es el único elemento que puede ordenar transferencias
, y el resto de dispositivos deben enviar una señal al amo para realizarlas;
 sin embargo esto no suele ser posible.
\end_layout

\begin_layout Standard
Un bus está formado por:
\end_layout

\begin_layout Itemize

\series bold
Líneas de control
\series default
: para gestionar el acceso y uso de las líneas de información.
\end_layout

\begin_layout Itemize

\series bold
Líneas de información
\series default
\SpecialChar endofsentence

\end_layout

\begin_deeper
\begin_layout Itemize

\series bold
Líneas de datos
\series default
: Para transmitir datos entre dispositivos.
 El conjunto de estas es el 
\series bold
bus de datos
\series default
, y su cardinal es la 
\series bold
anchura del bus de datos
\series default
, factor clave para determinar las prestaciones del sistema.
\end_layout

\begin_layout Itemize

\series bold
Líneas de dirección
\series default
: Para determinar la fuente o destino del dato.
 El conjunto de estas líneas es el 
\series bold
bus de direcciones
\series default
, y su cardinal es la 
\series bold
anchura del bus de direcciones
\series default
, que determina el número de direcciones disponibles y por tanto el máximo
 de memoria y puertos direccionables.
\end_layout

\end_deeper
\begin_layout Standard
Las líneas de información pueden ser 
\series bold
multiplexadas
\series default
, si se usa el mismo conjunto de líneas para direcciones y datos en instantes
 distintos definidos por un protocolo, o 
\series bold
dedicadas
\series default
, en las que cada grupo de líneas tiene una función específica.
\end_layout

\begin_layout Standard
La 
\series bold
anchura del bus
\series default
 es el total de líneas de información, y distinguimos entre 
\series bold
buses en serie
\series default
, con una sola línea de información, y 
\series bold
buses en paralelo
\series default
, con varias líneas transmitiendo bits simultáneamente.
\end_layout

\begin_layout Standard
La 
\series bold
longitud del bus
\series default
 es su longitud física, desde menos de un metro hasta cientos de metros.
 Los eventos en el bus se coordinan con una 
\series bold
temporización
\series default
, que puede ser:
\end_layout

\begin_layout Itemize

\series bold
Síncrona
\series default
: Una de las líneas de control es de reloj, y en esta se transmite una secuencia
 alterna de unos y ceros a intervalos iguales que marcan cuándo suceden
 los eventos.
 El tiempo entre dos flancos del mismo tipo es el 
\series bold
tiempo de ciclo de reloj
\series default
 o 
\series bold
ciclo de bus
\series default
.
\begin_inset Newline newline
\end_inset

Estos protocolos permiten un elevado ancho de banda, pero a cambio todos
 los dispositivos deben funcionar a la misma frecuencia y puede aparecer
 un problema por 
\series bold
sesgo de reloj
\series default
, la diferencia de tiempo entre que dos elementos ven un flanco de reloj,
 por lo que la señal de reloj debe ser encauzada cuidadosamente para minimizar
 el sesgo.
 Por ello el bus tiene un tamaño limitado.
\end_layout

\begin_layout Itemize

\series bold
Asíncrona
\series default
: No hay señal de reloj, por lo que el bus puede ser todo lo largo que que
\begin_inset ERT
status open

\begin_layout Plain Layout


\backslash
-
\end_layout

\end_inset

ra
\begin_inset ERT
status open

\begin_layout Plain Layout


\backslash
-
\end_layout

\end_inset

mos, y podemos conectar dispositivos con distintas frecuencias de funcionameinto
s.
 Sin embargo, son más lentos que los síncronos, necesitan más líneas de
 control y puede haber fallos de sincronización.
 Se usa un 
\series bold
protocolo de presentación
\series default
 (
\emph on
handshaking
\emph default
) con una serie de pasos de modo que emisor y receptor solo proceden al
 siguiente paso si están de acuerdo.
\end_layout

\begin_layout Standard
La 
\series bold
frecuencia de funcionamiento
\series default
 de un bus síncrono es la de la señal de reloj que rige las transferencias.
 El 
\series bold
ancho de banda
\series default
 (
\emph on
bandwidth
\emph default
) 
\series bold
teórico
\series default
 es la cantidad de información que puede ser transmitida por un bus, en
 cantidad de información por unidad de tiempo.
 Su valor en bytes por segundo es 
\begin_inset Formula $\frac{fn}{8}$
\end_inset

, donde 
\begin_inset Formula $n$
\end_inset

 es la anchura del bus de datos y 
\begin_inset Formula $f$
\end_inset

 es la frecuencia de funcionamiento en hercios.
 Por su parte, el 
\series bold
ancho de banda efectivo
\series default
 se refiere a la cantidad de información por unidad de tiempo que realmente
 se transmite, pues puede ser necesario dedicar varios ciclos para el protocolo
 de acceso y el arbitraje del bus.
\end_layout

\begin_layout Section
Direccionamiento
\end_layout

\begin_layout Standard
El acceso a los dispositivos se puede hacer de dos formas, que afectan al
 bus de direcciones y a la forma de programarlos:
\end_layout

\begin_layout Itemize

\series bold
E/S mapeada en memoria
\series default
: Parte del espacio de direcciones de memoria se asocia a los dispositivos
 de E/S.
\end_layout

\begin_layout Itemize

\series bold
E/S aislada
\series default
: Cada puerto de un dispositivo tiene un 
\series bold
número de puerto
\series default
, al que se accede con instrucciones de la ISA específicas, y estos números
 forman un espacio de direcciones de E/S dedicado.
\end_layout

\begin_layout Standard
La E/S aislada no consume parte del espacio de direcciones de memoria, lo
 que era útil en los procesadores de 8 y 16 bits como Intel 8086 que tenían
 un espacio de direcciones limitado.
 Sin embargo, supone mayor complejidad de la CPU por tener que implementar
 instrucciones de E/S adicionales, y resulta en un menor repertorio de instrucci
ones para realizar estas operaciones.
\end_layout

\begin_layout Section
Manejo de la E/S
\end_layout

\begin_layout Standard
La técnica más simple es el 
\series bold
sondeo
\series default
 (
\emph on
polling
\emph default
), 
\series bold
encuesta
\series default
 o 
\series bold
escrutinio
\series default
, en la el procesador 
\begin_inset Quotes cld
\end_inset

sondea
\begin_inset Quotes crd
\end_inset

 los puertos para, una vez detectado un cambio de estado, actuar en consecuencia.
 La encuesta puede ser:
\end_layout

\begin_layout Itemize

\series bold
Continua
\series default
 (
\series bold
espera activa
\series default
): El procesador se dedica exclusivamente a esto para detectar un cambio
 de estado.
 Sólo es permisible en dispositivos dedicados (sistemas empotrados).
\end_layout

\begin_layout Itemize

\series bold
Periódica
\series default
: Se sondea cada cierta cantidad de tiempo.
 Lo habitual es usarla sólo para algunos dispositivos como el ratón.
\end_layout

\begin_layout Standard
El sondeo es la técnica con menor latencia, pero también supone una gran
 pérdida de tiempo de CPU, por lo que en la práctica los dispositivos se
 manejan por 
\series bold
interrupciones
\series default
: La CPU encarga al dispositivo una transferencia y continúa haciendo otras
 cosas, y cuando la tarea termina, el dispositivo avisa a la CPU mediante
 una interrupción externa.
 Entonces la CPU:
\end_layout

\begin_layout Itemize
Deja automáticamente lo que esté haciendo.
\end_layout

\begin_layout Itemize
Identifica qué dispositivo ha enviado la interrupción.
 Para ello, bien existe una línea de interrupción dedicada para cada dispositivo
, como ocurre en MIPS, o se activa una línea de interrupción única y el
 dispositivo se identifica insertando un 
\series bold
número de interrupción
\series default
 en el bus de datos de la CPU, como ocurre en IA32.
\end_layout

\begin_layout Itemize
Salta a la 
\series bold
rutina de servicio de la interrupción
\series default
 (
\series bold
RSI
\series default
) o 
\series bold
manejador
\series default
\SpecialChar endofsentence
 Este puede estar en una dirección de memoria fija, como ocurre en MIPS,
 y contener código para comprobar qué interrupción concreta se ha producido,
 o puede saltar a una dirección variable indicada en una tabla de direcciones
 indexada por el número de interrupción, como ocurre en IA32, lo que se
 conoce como 
\series bold
interrupciones vectorizadas
\series default
.
\begin_inset Newline newline
\end_inset

Antes de saltar a esta rutina es necesario guardar, como mínimo, el contador
 de programa y posiblemente el registro de estado para las condiciones (
\emph on
flags
\emph default
).
 El resto de registros los puede guardar la propia rutina.
\end_layout

\begin_layout Itemize
Una vez ejecutada la RSI, recupera el estado y reanuda el proceso interrumpido.
\end_layout

\begin_layout Standard
Este método, si bien puede mejorar el rendimiento respecto al sondeo, también
 puede incluso empeorarlo, por lo que normalmente se usa junto con DMA.
\end_layout

\begin_layout Standard
El 
\series bold
acceso directo a memoria
\series default
 o 
\series bold
DMA
\series default
 (
\emph on
Direct Memory Access
\emph default
) es un mecanismo que permite la transferencia de datos desde un dispositivo
 a memoria, o viceversa, sin intervención del procesador.
 Para ello se una una 
\series bold
controladora de DMA
\series default
 (normalmente varias), circuito especializado en transferir datos entre
 dispositivos y memoria.
 Esto conlleva que el bus tenga varios amos (CPU y DMA), por lo que es necesario
 un sistema de arbitraje.
 Para realizar una transferencia DMA:
\end_layout

\begin_layout Itemize
La CPU inicializa la controladora de DMA con datos como origen y destino
 de datos, número de bytes a transferir y sentido del desplazamiento (direccione
s crecientes, decrecientes o fijas para origen y destino).
\end_layout

\begin_layout Itemize
La controladora de DMA pide el bus, y cuando lo consigue va realizando las
 operaciones solicitadas.
\end_layout

\begin_layout Itemize
Finalmente, la controladora de DMA genera una interrupción indicando fin
 de trans
\begin_inset ERT
status open

\begin_layout Plain Layout


\backslash
-
\end_layout

\end_inset

fe
\begin_inset ERT
status open

\begin_layout Plain Layout


\backslash
-
\end_layout

\end_inset

ren
\begin_inset ERT
status open

\begin_layout Plain Layout


\backslash
-
\end_layout

\end_inset

cia o error.
\end_layout

\begin_layout Section
El sistema operativo
\end_layout

\begin_layout Standard
Cuando arranca el ordenador, se realizan algunas comprobaciones y operaciones
 iniciales y a continuación se carga el sistema operativo, que a su vez
 carga los 
\emph on
drivers
\emph default
 de los dispositivos, es decir, las rutinas de petición de E/S y las posibles
 RSI asociadas.
 Sólo el sistema operativo tiene conocimiento de los puertos, órdenes, etc.,
 y por seguridad es el único que puede acceder a E/S, mientras que el resto
 de programas deben solicitar sus servicios mediante 
\series bold
llamadas al sistema
\series default
 (
\emph on
syscalls
\emph default
).
\end_layout

\end_body
\end_document