aboutsummaryrefslogtreecommitdiff
path: root/etc/n5.lyx
blob: d673bdf8c4a330ec941d75ab3bc1d6c528b9fe12 (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
#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
La 
\series bold
memoria virtual
\series default
 es una técnica consistente en usar la memoria principal como caché para
 almacenamiento secundario, normalmente discos duros.
 Objetivos:
\end_layout

\begin_layout Itemize

\series bold
Proporcionar un gran espacio de direcciones:
\series default
 Anteriormente, si un programa era demasiado grande, el programador debía
 dividir el programa en segmentos independientes (
\emph on
overlays
\emph default
) cargados y liberados de memoria por el propio programa, lo que dificultaba
 la programación.
 Además, debía haber un hueco de memoria libre contigua para cargar estos
 segmentos, pero esta podía estar fragmentada en varios huecos demasiado
 pequeños.
 Con memoria virtual, el programador trabaja como si hubiera una gran memoria
 sólo para el programa.
\end_layout

\begin_layout Itemize

\series bold
Permitir la compartición segura y eficiente de memoria entre varios programas:
\series default
 La memoria principal sólo tiene que contener lo que se ejecuta en un momento
 dado, por lo que se aprovecha mejor, y consigue que un proceso sólo pueda
 leer y escribir la memoria que tiene asignada.
\end_layout

\begin_layout Standard
El sistema de memoria virtual crea un 
\series bold
espacio de direcciones virtuales
\series default
 para cada proceso, de forma que la CPU produce direcciones virtuales y
 la 
\series bold
MMU
\series default
 (
\emph on
Memory Management Unit
\emph default
) realiza la 
\series bold
traducción de direcciones
\series default
 (
\emph on
address translation
\emph default
) a 
\series bold
direcciones físicas
\series default
.
 Un bloque de memoria virtual es una 
\series bold
página
\series default
, un acierto es un 
\series bold
acierto de página
\series default
 y un fallo es un 
\series bold
fallo de página
\series default
.
\end_layout

\begin_layout Standard
Las páginas deben ser lo bastante grandes para amortizar el tiempo de acceso
 a disco, normalmente 
\begin_inset Formula $\unit[4]{KiB}$
\end_inset

 para páginas pequeñas y tamaños mucho mas grandes (de megabytes) para ciertos
 casos.
 Como la penalización por fallo es muy alta (de millones de ciclos e incluso
 visible al usuario), es muy importante reducir la tasa de fallos, por lo
 que se usa un esquema totalmente asociativo, y como los fallos de página
 los gestiona el sistema operativo (porque la sobrecarga de usar software
 aquí es despreciable) se pueden usar algoritmos de reemplazo más complejos.
 Siempre se usa postescritura.
\end_layout

\begin_layout Section
La tabla de páginas
\end_layout

\begin_layout Standard
Una página virtual puede estar asociada a cualquier página física o a ninguna,
 y esta información se almacena en la 
\series bold
tabla de páginas
\series default
, una tabla multinivel manejada por el sistema operativo, almacenada en
 memoria principal e indexada por el número de página virtual, que en cada
 entrada contiene el número de página física junto con información adicional
 como el bit de validez, el bit de sucio, bits de protección (permisos de
 lectura, escritura y ejecución) y un bit de uso para políticas de reemplazo
 o direcciones de disco, y su tamaño se redondea por exceso al tamaño de
 palabra para facilitar el indexado.
\end_layout

\begin_layout Standard
La MMU incluye una caché especial, el 
\series bold
buffer de traducción adelantada de direcciones
\series default
 o 
\series bold
TLB
\series default
 (
\emph on
Translation Lookaside Buffer
\emph default
) que guarda traducciones de número de página virtual a número de página
 física.
 Suele emplear postescritura (principalmente para actualizar el bit de uso),
 pues se espera una tasa de fallos pequeña.
\end_layout

\begin_layout Section
Tratamiento de los fallos de página
\end_layout

\begin_layout Standard
Al producirse un fallo de página se produce una 
\series bold
excepción por fallo de página
\series default
, transfiriendo el control de la CPU al sistema operativo que, una vez guardado
 el estado del programa en ejecución, debe encontrar la página solicitada
 en memoria secundaria y colocarla en la principal, o notificar de un 
\series bold
fallo de segmentación
\series default
 (
\emph on
segmentation fault
\emph default
) si la página solicitada no se corresponde con ningún dato del proceso.
 El sistema operativo mantiene información de la posición en memoria secundaria
 donde se guarda cada página virtual, bien en la propia tabla de páginas
 o en una estructura aparte.
\end_layout

\begin_layout Standard
Normalmente se usa una política de reemplazo similar a LRU (pseudo-LRU),
 pues se quieren minimizar los fallos de página pero un LRU puro es demasiado
 caro por requerir actualizar la estructura en cada acceso a memoria.
 Por ello algunas MMU proporcionan un 
\series bold
bit de uso
\series default
 o 
\series bold
de referencia
\series default
 que se activa por hardware cuando se accede a la página, y periódicamente
 el sistema operativo desactiva todos los bits de uso, de forma similar
 a como se hacía en las cachés.
 Este esquema se puede perfeccionar más si en vez de tener en cuenta el
 bit de uso en el último periodo se tiene en cuenta el bit de uso en un
 número fijo de periodos anteriores.
\end_layout

\begin_layout Section
Protección
\end_layout

\begin_layout Standard
El sistema operativo mantiene separadas las páginas virtuales de programas
 distintos para que uno no pueda acceder a los datos de otro, y cuando cambia
 de proceso (
\series bold
cambio de contexto
\series default
 o
\series bold
 de proceso
\series default
), cambia el valor del registro de tabla de páginas y, si hay TLB, lo vacía.
\end_layout

\begin_layout Standard
Para que esta protección sea efectiva, la CPU tiene (al menos) dos modos
 de funcionamiento: 
\series bold
modo usuario
\series default
, para programas de usuario, y 
\series bold
modo supervisor
\series default
 o 
\series bold
núcleo
\series default
, para el sistema operativo.
 Desde el modo usuario, la lectura y escritura queda limitada a su espacio
 de direcciones virtuales, puede que con ciertas restricciones adicionales,
 impidiendo además que escriba en la tabla de páginas, la TLB o el registro
 que apunta a la tabla de páginas, o cambie el modo de la CPU.
\end_layout

\begin_layout Standard
La CPU cambia de modo usuario a supervisor si se produce una interrupción,
 una excepción producida por el programa o una llamada al sistema, basada
 en una instrucción especial (
\emph on
syscall
\emph default
) que transfiere el control al sistema operativo.
 El retorno a modo usuario se realiza mediante una 
\series bold
instrucción de retorno de excepción
\series default
 (RFE).
\end_layout

\end_body
\end_document