aboutsummaryrefslogtreecommitdiff
path: root/iso/n5.lyx
blob: 50cbe03deed4abcb34997b53efbc3abab54a3d29 (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
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
#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 french
\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
El 
\series bold
administrador de memoria
\series default
 del sistema operativo se encarga de abstraer y administrar la jerarquía
 de memoria.
\end_layout

\begin_layout Section
Sin memoria virtual
\end_layout

\begin_layout Standard
En la 
\series bold
multiprogramación con particiones fijas
\series default
, se asigna una zona de tamaño fijo al sistema operativo y el resto se dividen
 en 
\series bold
particiones
\series default
 de igual o distinto tamaño.
 Podemos tener una cola por partición y colocar cada trabajo en la cola
 de la partición más pequeña en que quepa, pero si hay pocas particiones
 pequeñas sus colas serán largas porque la mayoría de procesos son pequeños
 y si hay muchas puede no quedar espacio para trabajos grandes.
 También se puede tener una cola para todas las particiones y, cuando queda
 una partición libre, darla a la primera tarea de la cola que quepa, lo
 que hace que las tareas pequeñas desperdicien espacio, o darla a la tarea
 más grande que quepa, lo que discrimina a las tareas pequeñas.
 Soluciones a este último problema son tener una partición pequeña o establecer
 un máximo de veces que se puede excluir una tarea.
\end_layout

\begin_layout Standard
Esto limita el 
\series bold
grado de multiprogramación
\series default
, el total de procesos que puede haber a la vez en memoria compartiendo
 CPU, además de producir fragmentación interna sobre todo en procesos pequeños
 y fragmentación externa si hay particiones libres con tamaño total suficiente
 para un proceso pero ninguna es lo bastante grande.
\end_layout

\begin_layout Standard
La 
\series bold
multiprogramación con particiones variables
\series default
 soluciona el problema asignando a cada proceso una partición del tamaño
 exacto que necesita, con lo que las particiones se crean, desaparecen o
 intercambian según se necesita.
 
\series bold
Políticas de asignación de huecos
\series default
:
\end_layout

\begin_layout Itemize

\series bold
Primero en ajustarse
\series default
: Se busca el primer hueco lo suficientemente grande desde el principio
 de la memoria, dividiendo el hueco en una parte para el proceso y un hueco
 libre (salvo si hay ajuste perfecto), y es rápido.
\end_layout

\begin_layout Itemize

\series bold
Siguiente en ajustarse
\series default
: Igual pero se empieza a buscar por donde se quedó la anterior búsqueda.
\end_layout

\begin_layout Itemize

\series bold
Mejor en ajustarse
\series default
: Busca el hueco más pequeño en el que quepa el proceso, es lenta y desperdicia
 más memoria por fragmentación externa.
\end_layout

\begin_layout Itemize

\series bold
Peor en ajustarse
\series default
: Toma el hueco libre más grande, y es lenta pero aprovecha bien la memoria.
\end_layout

\begin_layout Standard
La 
\series bold
compactación
\series default
 consiste en mover procesos en memoria para juntar los huecos y reducir
 la fragmentación externa.
 No se suele usar porque consume mucho tiempo, proporcional a la cantidad
 de información a mover, si bien ordenadores como el CDC CYBERS tenían hardware
 especial para esto.
 Para la 
\series bold
administración de memoria libre
\series default
:
\end_layout

\begin_layout Itemize

\series bold
Mapas de bits
\series default
: Se divide la memoria en unidades de asignación del mismo tamaño, y a cada
 una le corresponde un bit que indica si está libre o no.
 Si la unidad de asignación es pequeña, el mapa de bits será grande y las
 búsquedas lentas, pero si es grande habrá fragmentación interna.
\end_layout

\begin_layout Itemize

\series bold
Listas ligadas
\series default
: Lista de segmentos de memoria, que pueden ser procesos o huecos.
 Cuando un proceso termina, debe fusionar el hueco con los adyacentes, lo
 que es sencillo si la lista está ordenada por direcciones.
 Si hay una lista para procesos y otra para huecos, las operaciones serán
 más rápidas por no tener que ordenar la lista de procesos.
 Si la de huecos se ordena por tamaño decreciente, la política de peor ajuste
 es 
\begin_inset Formula $O(1)$
\end_inset

, pero la fusión de huecos es cara.
 En general se accede a la información de memoria asignada a un proceso
 desde su bloque de control.
\end_layout

\begin_layout Standard
La asignación de hueco en la zona de intercambio del disco puede hacerse
 cuando el proceso deba intercambiarse o cuando se cree.
 Los algoritmos de asignación y registro de estos huecos son los mismos
 que en memoria principal, salvo que el tamaño de un hueco en disco es múltiplo
 del tamaño de bloque.
\end_layout

\begin_layout Standard
La 
\series bold
reubicación
\series default
 o 
\series bold
relocalización
\series default
 consiste en que, cuando un programa se ejecuta, puede ir a cualquier partición,
 por lo que el programa debe usar 
\series bold
código relocalizable
\series default
, que pueda ejecutarse correctamente independientemente de dónde se sitúe.
\end_layout

\begin_layout Standard
Para la protección de memoria puede haber un 
\series bold
registro base
\series default
 con la dirección de memoria donde comienza la partición de un proceso y
 un 
\series bold
registro límite
\series default
 con su tamaño, de modo que el proceso puede generar cualquier 
\series bold
dirección lógica
\series default
 en un 
\series bold
espacio de direcciones lógicas
\series default
 de 0 a su tamaño menos 1 que se traducen a 
\series bold
direcciones físicas
\series default
, y si genera una dirección mayor se produce una excepción.
\end_layout

\begin_layout Section
Paginación
\end_layout

\begin_layout Standard
El esquema de 
\series bold
memoria virtual
\series default
 permite ejecutar procesos con tamaño total mayor al de la memoria física,
 para lo que guarda en esta sólo las partes del proceso que se están usando
 y el resto lo guarda en disco.
 Cada proceso posee un espacio de direcciones virtuales, de tamaño normalmente
 limitado por CPU, que van a la 
\series bold
unidad de administración de memoria
\series default
 (
\series bold
MMU
\series default
) normalmente integrada en el chip de la CPU para que las traduzca a direcciones
 físicas.
\end_layout

\begin_layout Standard
El espacio de direcciones virtuales se divide en 
\series bold
páginas
\series default
 y el de memoria física en 
\series bold
marcos de página
\series default
, del mismo tamaño, normalmente potencias de 2 entre 
\begin_inset Formula $\unit[512]{B}$
\end_inset

 y 
\begin_inset Formula $\unit[8]{KiB}$
\end_inset

, aunque pueden ser bastante más grandes, y las transferencias entre memoria
 y disco son siempre en unidades de página.
\end_layout

\begin_layout Standard
Una 
\series bold
tabla de páginas
\series default
 tiene tantas entradas como páginas y en cada una indica el marco en que
 se almacena junto a algunos bits:
\end_layout

\begin_layout Itemize

\series bold
Bit presente/ausente
\series default
: Indica si la página está asociada o no.
 Si se accede a una página no asociada, la MMU genera una excepción llamada
 
\series bold
fallo de página
\series default
 a tratar por el sistema operativo.
 Este selecciona un marco, escribe su contenido en disco (si estaba ocupado
 y se había escrito algo), lo marca como ausente en su tabla de páginas
 y asigna el marco a la página que provocó el fallo, que lee del disco si
 es necesario.
\end_layout

\begin_layout Itemize

\series bold
Bits de protección
\series default
: Tipo de acceso permitido (lectura, escritura, ejecución...).
 Las páginas con código suelen tener permisos de lectura y ejecución pero
 no de escritura, mientras que las de datos suelen tener de lectura y escritura.
\end_layout

\begin_layout Itemize

\series bold
Modificado
\series default
: Indica si se ha modificado o no el contenido del marco.
\end_layout

\begin_layout Itemize

\series bold
Referenciado
\series default
: Se establece al hacer referencia a una página, y se usa en algoritmos
 de reemplazo.
\end_layout

\begin_layout Itemize

\series bold
Caché
\series default
: En las máquinas con E/S mapeada a memoria, evita que el contenido de la
 página se almacene en caché.
\end_layout

\begin_layout Itemize

\series bold
Visible en modo núcleo
\series default
: Evita que se pueda acceder a la página en modo usuario.
\end_layout

\begin_layout Standard
Las direcciones virtuales se dividen en un 
\series bold
número de página
\series default
, usado como índice en la tabla de páginas, y un 
\series bold
ajuste
\series default
 o 
\series bold
desplazamiento
\series default
 dentro de ella.
\end_layout

\begin_layout Standard
La traducción de páginas debe ser rápida, por lo que se usa un 
\series bold
TLB
\series default
 (
\emph on
Translation Look-aside Buffer
\emph default
), una caché totalmente asociativa generalmente en la MMU que contiene entradas
 de la tabla de páginas.
 El hardware verifica si el número de página está en el TLB comparando todas
 las entradas en paralelo (por lo que número de entradas suele ser muy pequeño).
 Si coincide alguna, se toma la entrada del TLB (incluyendo bits de protección,
 etc.).
 Si no está, se lee la entrada de memoria principal y, bien se elimina una
 entrada del TLB escribiendo sus bits de modificado y uso en la principal
 y se reemplaza por la nueva, o se produce un fallo de página.
\end_layout

\begin_layout Standard
Al cambiar de proceso se puede invalidar el contenido del TLB, borrando
 todos los bits de validez mediante una instrucción especial, o añadir un
 nuevo campo a cada entrada del TLB con el identificador del proceso y un
 registro con el del proceso activo, requiriendo hardware adicional pero
 ahorrando tiempo en los cambios de proceso y dando lugar a encontrar entradas
 en el TLB del propio proceso tras volver a tomar la CPU.
\end_layout

\begin_layout Standard
Como una tabla de páginas global puede ser muy grande, en la práctica se
 divide el número de página en varias partes y se usan tablas de páginas
 de varios niveles, de modo que la de primer nivel se indexa según la primera
 parte del número de página e indica la dirección de las tablas de segundo
 nivel, etc., y las tablas que no son necesarias no se tienen.
 Los Intel Pentium Pro tienen 3 niveles, los procesadores de Intel y AMD
 de 64 bits tienen 4, y Linux soporta hasta 5 desde la versión 4.14, permitiendo
 gestionar hasta 
\begin_inset Formula $\unit[128]{PiB}$
\end_inset

 de memoria virtual y hasta 
\begin_inset Formula $\unit[4]{PiB}$
\end_inset

 de RAM.
\end_layout

\begin_layout Standard
Una 
\series bold
tabla de páginas invertida
\series default
 contiene una entrada por cada marco de página con el número de la página
 que almacena, el PID, una serie de bits como en una entrada de tabla de
 páginas normal y un puntero para encadenamiento en una tabla de dispersión
 abierta usada para acelerar las traducciones, que usa como clave el PID
 y el número de página y devuelve el número de una entrada de la tabla.
\end_layout

\begin_layout Standard
El 
\series bold
mapa de memoria
\series default
 de un proceso es la estructura de su espacio de direcciones lógicas, en
 zonas contiguas de memoria virtual llamadas 
\series bold
regiones
\series default
 como las de código, datos con valor inicial, datos sin valor inicial y
 pila de cada hilo, con características como:
\end_layout

\begin_layout Itemize

\series bold
Soporte
\series default
: De dónde se obtienen los datos que contiene la región; normalmente un
 fichero o parte de este, como un ejecutable en el caso del código.
 También hay regiones sin soporte como la pila, cuyas páginas, si se modifican
 y son expulsadas, se guardan en la zona de intercambio del disco.
\end_layout

\begin_layout Itemize

\series bold
Tipo de compartición
\series default
: Si las modificaciones que haga un proceso son visibles por otros o no.
\end_layout

\begin_layout Itemize

\series bold
Protección
\series default
: Permisos de lectura, escritura y ejecución.
\end_layout

\begin_layout Itemize

\series bold
Tamaño fijo
\series default
 o 
\series bold
variable
\series default
: Si es variable, se indica si crece hacia direcciones mayores, como la
 memoria montón o 
\emph on
heap
\emph default
 usada para la memoria dinámica, o menores, como la pila.
 En UNIX, la memoria montón no tiene soporte, está inicialmente a 0 y crece
 conforme el proceso necesita memoria mediante las llamadas 
\family typewriter
brk
\family default
 y 
\family typewriter
sbrk
\family default
.
\end_layout

\begin_layout Standard
El sistema operativo suele estar mapeado en todos los procesos, con el bit
 de visible en modo núcleo activado, por eficiencia en las transferencias
 de datos entre usuario y núcleo
\begin_inset Foot
status open

\begin_layout Plain Layout
En procesadores como Intel, esto ya no se hace debido a Meltdown.
\end_layout

\end_inset

.
\end_layout

\begin_layout Standard
En Linux, al hacer la llamada al sistema 
\family typewriter
fork
\family default
, se usa 
\series bold
copia en escritura
\series default
 (
\emph on
copy on write
\emph default
, COW), consistente en desactivar el permiso de escritura de las páginas
 y dar al proceso hijo una copia de la tabla de páginas del padre, de modo
 que si uno de los dos intenta escribir en una región en la que tendría
 permiso, el sistema operativo hace una copia de la página que provocó la
 violación, la asigna a la tabla de páginas del proceso que hace la escritura
 y activa el permiso de escritura en ambas páginas
\begin_inset Foot
status open

\begin_layout Plain Layout
Linux usa conteo de referencias para que, si hay varios 
\family typewriter
fork
\family default
, no se active la escritura en la página original hasta que el resto de
 procesos tenga una copia de la página.
 Ver 
\begin_inset Flex URL
status open

\begin_layout Plain Layout

https://stackoverflow.com/questions/13813636/how-does-copy-on-write-in-fork-handl
e-multiple-fork
\end_layout

\end_inset

 para más detalles.
\end_layout

\end_inset

.
\end_layout

\begin_layout Standard
Algoritmos de reemplazo de páginas:
\end_layout

\begin_layout Itemize

\series bold
Algoritmo óptimo
\series default
: Se elimina la página para la que pasará más tiempo antes de ser utilizada.
 Modelo teórico imposible de implementar.
\end_layout

\begin_layout Itemize

\series bold
NRU
\series default
 (no usada recientemente): Se limpia el bit de referenciado periódicamente
 en todas las páginas, y al reemplazar se prefieren páginas con este bit
 desactivado y, dentro de esto, con el de modificado desactivado.
\end_layout

\begin_layout Itemize

\series bold
FIFO
\series default
 (primera en enterar, primera en salir): Se elimina la primera página de
 una lista y se añade la nueva al final.
 El algoritmo es de bajo coste, pero no tiene en cuenta ningún dato adicional
 y produce demasiados fallos.
\end_layout

\begin_layout Itemize

\series bold
Algoritmo de la segunda oportunidad
\series default
: Como el FIFO pero, si el bit de referenciado de la primera página está
 activo, el bit se limpia, la página pasa al final y se comprueba la siguiente.
\end_layout

\begin_layout Itemize

\series bold
Algoritmo del reloj
\series default
: Equivalente al anterior pero con una lista circular donde una 
\begin_inset Quotes fld
\end_inset

manecilla
\begin_inset Quotes frd
\end_inset

 (un puntero) apunta a la página más antigua.
 Si el bit de referenciado está inactivo, se expulsa y se reemplaza en la
 lista la página apuntada y se avanza la manecilla a la siguiente, y de
 lo contrario se inactiva el bit, se pasa a la siguiente página y se repite
 el proceso.
\end_layout

\begin_layout Itemize

\series bold
LRU
\series default
 (usada menos recientemente): Se elimina la página no usada desde hace más
 tiempo.
 Se podría usar una lista ligada de todas las páginas de memoria, pero tendría
 que actualizarse en cada acceso a memoria.
 También se podría tener un contador hardware que se incrementa en cada
 referencia a memoria y un campo en las entradas de la tabla de páginas
 y la TLB donde copiarlo.
 Otra forma es usar una matriz 
\begin_inset Formula $n\times n$
\end_inset

, siendo 
\begin_inset Formula $n$
\end_inset

 el total de páginas, inicializada a 0, con lo que al referencial el marco
 
\begin_inset Formula $k$
\end_inset

, el hardware activa todos los bits de la fila 
\begin_inset Formula $k$
\end_inset

 y después desactiva todos los de la columna, con lo que la fila cuyo valor
 en binario sea mínimo es la del marco que se usó hace más tiempo, pero
 esto es inviable por el tamaño de la matriz.
\end_layout

\begin_layout Itemize

\series bold
Algoritmo de maduración
\series default
: Aproximación software de LRU.
 En cada interrupción de reloj, se desplaza un contador en cada entrada
 de la tabla de páginas un bit a la derecha y se añade a la izquierda el
 bit de referenciado.
\end_layout

\begin_layout Standard
Se debe decidir también si la página a reemplazar se busca sólo en las del
 proceso (
\series bold
reemplazo local
\series default
) o en todas las de memoria (
\series bold
reemplazo global
\series default
), y si el número de marcos asignados a un proceso varía (
\series bold
asignación dinámica
\series default
) o no (
\series bold
asignación fija
\series default
 o 
\series bold
estática
\series default
).
 No es posible el reemplazo global con asignación fija, pero el reemplazo
 local con asignación dinámica puede evitar que un proceso que empieza a
 producir fallos de página le quite páginas a otros siendo a la vez más
 flexible que una asignación fija.
 Llamamos 
\series bold
algoritmo de frecuencia de fallos de página
\series default
 al consistente en asignar más marcos a los procesos que producen muchos
 fallos de página y quitarlos a los que producen pocos.
 Otros aspectos son el número mínimo de marcos por proceso, que depende
 entre otros del máximo de páginas que puede usar una sola instrucción
\begin_inset Foot
status open

\begin_layout Plain Layout
Si, por ejemplo, una instrucción debe acceder a 5 páginas incluyendo la
 de la propia instrucción pero sólo hay 4 marcos, uno de los accesos provocará
 necesariamente un fallo de página que reemplazará otra de las 4 páginas
 necesarias y reiniciará la instrucción, que nunca llegará a terminar.
\end_layout

\end_inset

, y el reparto de marcos entre distintos procesos (equitativo, proporcional
 al tamaño, etc.).
\end_layout

\begin_layout Standard
Páginas pequeñas producen menos fragmentación interna, pero páginas grandes
 aceleran el reemplazo porque las transferencias entre memoria y disco son
 normalmente de una página y hay poca diferencia entre el tiempo de transferenci
a de una página pequeña y el de una grande.
 Los tamaños más frecuentes son de 4 y 
\begin_inset Formula $\unit[8]{KiB}$
\end_inset

.
\end_layout

\begin_layout Standard
La 
\series bold
hiperpaginación
\series default
 ocurre cuando un proceso emplea más tiempo paginando (esperando a que se
 resuelvan sus fallos de página) que ejecutando código porque necesita muchos
 más marcos de los que tiene.
 En tal caso, aparte de añadir más memoria principal, podemos suspender
 temporalmente algunos procesos para liberar memoria y reanudarlos cuando
 la tasa de fallos de página decaiga.
\end_layout

\begin_layout Standard
Políticas de lectura y escritura de páginas:
\end_layout

\begin_layout Itemize

\series bold
Paginación por demanda
\series default
: Solo se lee la página que produce el fallo.
\end_layout

\begin_layout Itemize

\series bold
Prepaginación
\series default
 o 
\series bold
paginación anticipada
\series default
: Se leen varias páginas más, normalmente las que se encuentran después
 en el espacio de direcciones virtuales.
\end_layout

\begin_layout Itemize

\series bold
Escritura por demanda
\series default
: Una página se escribe en disco cuando se expulsa, aumentando el tiempo
 de resolución de fallos de página.
\end_layout

\begin_layout Itemize

\series bold
Escritura anticipada
\series default
: Un hilo del núcleo, el 
\series bold
demonio de paginación
\series default
, cada cierto tiempo escribe en disco las páginas modificadas, aumentando
 el rendimiento en discos duros al escribir varias páginas a la vez y acelerando
 la resolución de fallos de página.
 Muchas escrituras pueden ser inútiles si la páginas se modifican poco después,
 por lo que el demonio puede buscar páginas que, según el algoritmo de reemplazo
, podrían expulsarse próximamente y escribirlas en disco si han sido modificadas.
 También puede liberar más páginas para tener páginas libres (
\series bold
caché de páginas
\series default
) y resolver rápidamente cualquier futuro fallo de página, de forma que
 si una página liberada se necesita poco después su contenido siga en memoria.
\end_layout

\begin_layout Section
Segmentación
\end_layout

\begin_layout Standard
El espacio de direcciones lógicas de un proceso se compone de 
\series bold
segmentos
\series default
, zonas contiguas dadas por una 
\series bold
base
\series default
 (dirección de comienzo) y un 
\series bold
límite
\series default
 (tamaño), y las direcciones especifican el número de segmento y el desplazamien
to dentro de él, de 0 al tamaño menos 1.
 Esto facilita la protección y compartición de información, y se puede acelerar
 la traducción con un TLB, pero sufre fragmentación externa, los segmentos
 no pueden superar el tamaño de la memoria física y los intercambios con
 el disco se hacen siempre moviendo segmentos enteros.
\end_layout

\begin_layout Standard
En la 
\series bold
segmentación paginada
\series default
 estos segmentos se paginan, por lo que no hay fragmentación externa ni
 hay que buscar un hueco adecuado para cada segmento.
 El TLB es direccionable por el número de segmento a usar y el número de
 la página dentro del segmento.
\end_layout

\end_body
\end_document