[Avanzado] Optimizar programa + teoria de paginación.
Publicado: 24 Feb 2011, 06:18
Bueno, lo que trato aqui es conocer un poco mas sobre como funciona un sistema operativo, para mejorar la programacion, ya que las mismas estan ligadas por mas que algo sea de mas alto nivel y otro de mas bajo.
Que es la paginacion?
la memoria en los sistemas operativos, estaba dividida de manera contigua como indica en la figura:

el problema de este tipo de asignacion de memoria a un proceso era la fragmentacion externa, ( si tengo varios huecos en el medio de 12 k, y viene un proceso de 24k, no puedo atenderlo, aunque cuente con la memoria, no esta contigua)
para solucionar esto se planteo, la paginacion, que se divide la memoria en bloques de igual tamaño y se asigna a un proceso la cantidad de paginas que necesite, y estas no necesarimente tienen que estar juntas

entonces como aplicamos esto bueno:
si tenemos una matriz, esta misma, se asigna cada fila a lo ancho de una pagina y cada columna como un renglon nuevo.
entonces si la recorremos por columna, cuando pasemos una frontera de pagina, el sistema operativo va a tener que cargar en memoria la pagina, si no lo esta (lo que se conoce como page fault) y eso traeria un problema de rendimiento.
Entonces conviene recorrer la matriz fila por columna.
Ejemplo:
Page fault: al usar memoria virtual, no todas las paginas estan en memoria, entonces en la paginacion por demanda solo se usan las paginas cuando son requeridas, el page fault genera una interrupcion del proceso hasta que obtenga del sistema operativo la pagina correspondiente. lo cual genera un retardo de nuestra aplicacion.
bueno espero que les haya servido, y hayan aprendido algo basico de como funciona la gestion en memoria (a grandes rasgos) el que quiera saber mas que lea el silberchantz o el stallin , sistemas operativos, (la tuve que estudiar hace poco :P )
Saludos!
Leos.
Que es la paginacion?
la memoria en los sistemas operativos, estaba dividida de manera contigua como indica en la figura:

el problema de este tipo de asignacion de memoria a un proceso era la fragmentacion externa, ( si tengo varios huecos en el medio de 12 k, y viene un proceso de 24k, no puedo atenderlo, aunque cuente con la memoria, no esta contigua)
para solucionar esto se planteo, la paginacion, que se divide la memoria en bloques de igual tamaño y se asigna a un proceso la cantidad de paginas que necesite, y estas no necesarimente tienen que estar juntas

entonces como aplicamos esto bueno:
si tenemos una matriz, esta misma, se asigna cada fila a lo ancho de una pagina y cada columna como un renglon nuevo.
entonces si la recorremos por columna, cuando pasemos una frontera de pagina, el sistema operativo va a tener que cargar en memoria la pagina, si no lo esta (lo que se conoce como page fault) y eso traeria un problema de rendimiento.
Entonces conviene recorrer la matriz fila por columna.
Ejemplo:
matriz[256][256]
for j=o to 255
{
for i=0 to 255 matriz[j] = 5;
}
Page fault: al usar memoria virtual, no todas las paginas estan en memoria, entonces en la paginacion por demanda solo se usan las paginas cuando son requeridas, el page fault genera una interrupcion del proceso hasta que obtenga del sistema operativo la pagina correspondiente. lo cual genera un retardo de nuestra aplicacion.
bueno espero que les haya servido, y hayan aprendido algo basico de como funciona la gestion en memoria (a grandes rasgos) el que quiera saber mas que lea el silberchantz o el stallin , sistemas operativos, (la tuve que estudiar hace poco :P )
Saludos!
Leos.