segunda unidas open suse
TRANSCRIPT
INGENIERÍA EN COMPUTACIÓN
SISTEMAS OPERATIVOS
6CV1
RESENDIZ COLIN PILAR
MAGAÑA CASTILLO MIGUEL EDUARDO
ORTEGA CORTES LUIS JOEL
MARTINEZ CARRICOSA EDGAR JESUS
RUIZ GARCIA NATALY
INSTITUTO POLITÉCNICO NACIONALescuela superior de ingeniería mecánica y eléctrica
“Culhuacán”
JERARQUIA DE MEMORIA
Se conoce como jerarquía de memoria a la organización piramidal de la memoria en niveles que tienen los ordenadores. Su objetivo es conseguir el rendimiento de una memoria de gran velocidad al coste de una memoria de baja velocidad, basándose en el principio de cercanía de referencias.
Los puntos básicos relacionados con la memoria pueden resumirse en:
• Cantidad
• Velocidad
• Coste
Por qué funciona la jerarquía ?
Principio de Localidad:
Los programas acceden a una porción relativamente pequeña del espacio de direcciones en un determinado
lapso de tiempo.
Localidad temporal
• Si un ítem es referenciado en determinado momento, es común que vuelva a ser referenciado poco tiempo
después
Localidad Espacial
• Cuando un ítem es referenciado en determinado momento, es común que los ítems con direcciones “cercanas“
también sea accedidos poco tiempo después.
Como se maneja la jerarquía?
• Registros <-> Memoria
• por el compilador (programador)
• cache <-> memoria
• por el hardware
• memoria <-> discos
• por el hardware y el sistema operativo (memoria virtual)
• por el programador (archivos)
MEMORIA SECUNDARIA:
almacenamiento secundario (memoria secundaria, memoria auxiliar o memoria externa) es el conjunto de dispositivos (aparatos) y medios (soportes) de almacenamiento, que conforman el subsistema de memoria de una computadora, junto a la memoria principal. También llamado periférico de almacenamiento.
La memoria secundaria es un tipo de almacenamiento masivo y permanente (no volátil), a diferencia de la memoria RAM que es volátil; pero posee mayor capacidad de memoria que la memoria principal, aunque es más lenta que ésta.
El proceso de transferencia de datos a un equipo de cómputo se le llama "procedimiento de lectura". El proceso de transferencia de datos desde la computadora hacia el almacenamiento se denomina "procedimiento de escritura".
MEMORIA REAL
La memoria real o principal es en donde son ejecutados los programas y procesos de una computadora y es el espacio real que existe en memoria para que se ejecuten los procesos. Por lo general esta memoria es de mayor costo que la memoria secundaria, pero el acceso a la información contenida en ella es de más rápido acceso. Solo la memoria cache es más rápida que la principal, pero su costo es a su vez mayor.
Memoria cache
En el caso de Linux, el Sistema Operativo utiliza toda la memoria que no está siendo utilizada con el fin de poder acelerar las lecturas en disco, lo cual es conocido como memoria caché, o buffer. Esta memoria caché es liberada apenas se necesite memoria RAM para algún otro programa, por lo que si bien, no es menoría libre, pasa a serlo apenas se le necesite.
Debido a que la memoria es, desafortunadamente finita, y por lo tanto, un recurso escaso, el "buffer cache" usualmente no puede ser demasiado grande Cuando la "cache" se completa, los datos que no han sido usados por un periodo de tiempo prolongado son descartados y así la memoria es liberada para ser utilizada con nuevos datos.
Asignación de memoria
La asignación de memoria consiste en el proceso de asignar memoria para propósitos específicos, ya sea en tiempo de compilación o de ejecución. Si es en tiempo de compilación es estática, si es en tiempo de ejecución es dinámica y si son variables locales a un grupo de sentencias se denomina automática
El kernel controla la asignación y sobre-asignación de memoria, dejando que un programa reserve mas memoria de la que hay disponible, esto no significa que en realidad esta cantidad de memoria se vaya a usar.
La Asignación estática de memoria consiste en el proceso de asignar memoria en tiempo de compilación antes de que el programa asociado sea ejecutado, a diferencia de la asignación dinámica o la automática donde la memoria se asigna a medida que se necesita en tiempo de ejecución
Asignación automática de memoria
Las variables automáticas son variables locales a un bloque de sentencias. Pueden ser asignadas automáticamente en la pila de datos cuando se entra en el bloque de código . Cuando se sale del bloque, las variables son automáticamente desasignadas.3 Las variables automáticas tendrán un valor sin definir cuando son declaradas, por tanto es buena práctica de programación inicializarlas con un valor válido antes de usarlas.
Asignación dinámica de memoria
La asignación dinámica de la memoria es la asignación de almacenamiento de memoria para utilización por parte de un programa de computador durante el tiempo de ejecución de ese programa
Contigua simple
En este sistema de administración la memoria aparece al programa como una única extensión contigua de direcciones, compartida solo por él y por el sistema operativo. Se hace necesario lograr en este tipo de administración algún mecanismo de protección para el sistema operativo que es residente
• Administración trivial
• No permite multiprogramación
Partición fija
En este esquema se establecen particiones fijas de la memoria de una sola vez y para
siempre (por hardware o por sistema operativo), o en caso contrario esas particiones son
cambiables en tamaño mientras no haya trabajos ejecutándose (normalmente esta tarea
la realizará el operador desde consola).
Necesita guardar en una tabla de particiones:
– Dirección de comienzo de la partición
– Tamaño de la partición
Particionada variable
En este esquema las particiones se establecen según la longitud de los
programas iniciales. Al cabo de un tiempo se produce mucha fragmentación, por tanto existen
diversas políticas para asignar una partición de memoria libre. En principio sea cual fuere el
mecanismo de asignación de una partición libre se hace necesario contar con la información de
cuáles son esas particiones libres de aparece una fragmentación de la memoria debido a que
parte de la partición no es utilizada por el programa.
paginación
Para tener en cuenta arquitecturas de 64 bits, la paginación en Linux tiene 3 niveles de tablas de páginas en lugar de 2
Linux gestiona la memoria central y las tablas de páginas utilizadas para convertir las direcciones lineales
(virtuales) en direcciones físicas. Implementa una gestión de la memoria que es ampliamente independiente del
procesador sobre el que se ejecuta En realidad, la gestión de la memoria implementada por Linux considera
que dispone de una tabla de páginas a tres niveles:
(1) directorio global de tablas de páginas (page global dirertory) cuyas entradas contienen las direcciones de
páginas que contienen tablas intermedias
(2) directorio intermedio de tablas de páginas (page middle directory) cuyas entradas contienen las direcciones
de páginas que contienen tablas de páginas
(3) las tablas de páginas (page table) cuyas entradas contienen las direcciones de páginas de memoria que
contienen el código o los datos utilizados por el kernel o los procesos de usuario.
segmentacion
Se ha preferido la paginación sobre la segmentación porque: (1) La gestión de memoria es más
simple cuando todos los procesos usan los mismos valores de segmentos, es decir, tienen las mismas
direcciones lineales. (2) Un objetivo de Linux es la portabilidad, y muchos procesadores soportan la
segmentación de forma muy limitada.
Para hacer uso de la segmentación, se programa adecuadamente la GDT = Tabla de Descriptores Global.
Esta tabla es implementada por el array gdt_table referenciada por la variable gdt, que se encuentra definido
en el archivo arch/i386/kernel/head.S.
Los segmentos que se definen se superponen en el espacio de direcciones lineal. Como se emplean muy
pocos segmentos, solo es necesaria la GDT. La LDT no se usa por el kernel salvo que lo requiera un
proceso, aunque existe una llamada al sistema que permite crear sus propias LDTs.
Los segmentos empleados en Linux son los siguientes:
· Segmento de código del kernel.
· Base: 0x00000000, Límite (limit): 0xfffff,
· G = 1 (granularidad en páginas),
· S = 1 (Segmento normal de código o datos),
· Type = 0xa (Código, puede ser leído y ejecutado),
· DPL = 0 (Modo kernel para el nivel de privilegio del descriptor),
· D/B = 1 (Offset de 32 bits),
Segmento de datos del kernel:
· Base: 0x00000000, Límite (limit): 0xfffff,
· G = 1 (granularidad en páginas),
· S = 1 (Segmento normal de código o datos),
· Type = 0x2 (Datos, puede ser leído y escrito),
· DPL = 0 (Modo kernel),
· D/B = 1 (Offset de 32 bits),
· Idéntico al descriptor de segmento anterior salvo por el tipo, y se define por la
macro __KERNEL_DS.
Segmento de código de usuario:
· Base: 0x00000000, Límite: 0xfffff
· G = 1 (granularidad en páginas)
· S = 1 (Segmento normal de código o datos)
· Type = 0xa (Código, puede ser leído y ejecutado)
· DPL = 3 (Modo usuario)
· D/B = 1 (Offset de 32 bits)
· El descriptor de segmento se define por la macro __USER_CS.
Segmento de datos de usuario:
· Base: 0x00000000, Límite: 0xfffff,
· G = 1 (granularidad en páginas),
· S = 1 (Segmento normal de código o datos),
· Type = 0x2 (Datos, puede ser leído y escrito),
· DPL = 3 (Modo usuario),
· D/B = 1 (Offset de 32 bits),
· El descriptor de segmento se define por la macro __USER_DS.
Paginación por demanda
Un sistema de paginación por demanda es similar a un sistema de paginación con intercambios. Los
procesos residen en memoria secundaria (en el disco). Cuando queremos ejecutar un proceso, lo
metemos en memoria. Sin embargo, en vez de intercambiar todo el proceso hacia la memoria, utilizamos
un intercambiador perezoso. Un intercambiador perezoso nunca reincorpora una página a memoria a
menos que se necesite. Como ahora consideramos un proceso como una secuencia de páginas, en vez
de un gran espacio contiguo de direcciones, el término intercambio es técnicamente incorrecto. Un
intercambiador manipula procesos enteros, mientras que un paginador trata con las páginas
individualmente de un proceso.
Segmentación por demanda
Si no se dispone de hardware de paginacion, es posible implementar memoria virtual con segmentacion bajo
demanda Para ello es necesario intercambio hardware de segmentacion que indique si el segmento esta
presente en memoria o no de manaera que:
Se referencia un segmento que esta en memoria: se accede
normalmente
Se referencia un segmento que no esta en memoria: se produce una excepción
Los algoritmos de reemplazo son similares a los de la paginacion bajo demanda. Veamos como lo haca OS/2
El sistema mantenia una lista de los segmentos en memoria. Periodicamente el sistema
Colocaba los segmentos accedidos la final de la lista
Limpiaba los bits de acceso
Cuando habia que reemplazar un segmento se reemplazaba, en caso de ser necesario, el primero (o los
primeros) de la lista: se trata de una aproximancion a LRU pues la lista esta \ordenada\ por tiempo de acceso
Servicios POSIX
POSIX es el acrónimo de Portable Operating System Interface; la X viene de UNIX como seña de
identidad de la API.
POSIX es el estándar de interfaz de sistemas operativos portables de IEEE basado en el sistema
operativo UNIX. Aunque UNIX era prácticamente un estándar industrial, había bastantes diferencias entre
las distintas implementaciones de UNIX, lo que provocaba que las aplicaciones no se pudieran
transportar fácilmente entre distintas plataformas UNIX.
El POSIX Se trata de un estándar que intenta asegurar la portabilidad entre diferentes sistemas
operativos. Dentro del estándar se especifica el comportamiento de las expresiones regulares y de las
herramientas más comunes que las usan.
El POSIX es un grupo de estándares en evolución. Cada uno de los estándares que lo componen cubre
diferentes aspectos de los sistemas operativos. Algunos de ellos ya han sido aprobados, mientras que otros
están aún en fase de desarrollo. Los estándares POSIX se pueden agrupar en tres categorías diferentes: