A) Semana 1: Sistemas operativos, memoria - natigb/Portafolio-de-Datos-II GitHub Wiki
12/02/2020
Se debe tomar en cuenta la capacidad de memoria y pensamiento del dispositivo
Los sistemas operativos:
Encargados de administrar los recursos. Software que opera sobre el hardware. El sistema operativo:
- Administra los recursos de la máquina. La memoria se accede de forma secuencial, los procesadores si se pueden acceder de forma simultanea dependiendo de la cantidad de núcleos y el SO asigna a cual núcleo le va a asignar el proceso. La computadora no puede operar sin el SO.
- Provee un API para los desarrolladores para abstraer los recursos. El programa llama a una función proporcionada por el API sel SO. Si se quiere construir un driver se necesitan llamar las funciones del sistema operativos.
Las funciones principales del sistema operativo son:
- Process management
- Memory management
- File and Disk management
- I/O management
Administración de memoria
Hay diferentes esquemas. Va desde no administrarla del todo hasta una memoria virtual
14/02/2020
Esquemas de administración de memoria:
- No administrar la memoria el todo
- Un bucket donde se meten todos los procesos
Jerarquía de memoria (De caro a baratos)
- Registros: Rápidos pero limitado
- Caché: Espacio limitado
- Disco magnético: CD-ROM, CD-RW DVD-RW DVD-RAM
- Cintas Magnéticas: No se usan sol en centros mas antiguos, normalmente se utilizan discos duros
CPU: Ejecuta instrucciones almacenadas en el registro. Los registros no tienen datos solo instrucciones. Si no encuentra la instrucción se va a la caché (falla de memoria caché) y si no la encuentra se va a la principal (RAM) y si no lo va a leer del disco duro.
Administradores de memoria:
El primer modelo no permitía varios programas a la vez. Había riesgo de que el usuario podía borrar el SO. No hay separación de la memoria física. No hay abstracción. Para multiprogramación se utiliza la relocación estática (Asignar un espacio de memoria físico a los programas, tiene la desventaja que no se le permite crecer).
Mainframe eran computadores que funcionaban con SO propietarios, eran muy caros pero de poca capacidad.
Driver: Programa de bajo nivel que controla un dispositivo o una tarjeta de la computadora.
Otro esquema cada programa tiene una sección de la memoria asignado al programa.
- La posicion final o el límite es el registro base+ el tamaño del programa y la base es donde inicia.
- Tiene relocalización automática o dinámica.
- Intercambio de programa: Si el tamaño del programa se incrementa va a poder crecer en el área vacía, si se compacta la memoria es tomar los espacios vacíos y juntarlos.
Si los programas crecen o son variables hay otra esquema se le asigna un margen de crecimiento y se debe contemplar la pila del programa y para los datos del programa. Si se llena debe solicitar más espacio.
¿Como puede un programa de 2GB cargar en una RAM de 512MB?
El tiempo que tarda en cargar un programa es lo que tarda buscándolo en el disco duro y liberando memoria. Si un programa está inactivo pasa los datos al disco duro.
Utiliza memoria virtual: Cada programa tiene su espacio de memoria que está separado en páginas del mismo tamaño. El tamaño de página no se puede cambiar pero el tamaño del archivo de paginación si y este archivo es más grande que la memoria física. También hay un archivo de hibernación que toma lo de memoria RAM y lo guarda en ese archivo y cuando la inicia de nuevo lo carga.
El programa solicita datos,primero a la memoria caché (tiene los datos mas utilizados pero es muy pequeña)si no los encuentra los busca en la memoria física , si no lo encuentra (fallo de página) se va al MMU (chip que maneja paginación, hace la conversión de la página de memoria virtual a la de memoria física) y lo busca en el archivo de paginación de memoria virtual y lo guarda en la memoria física. Si no lo encuentra(fallo en la memoria virtual) se va al disco duro. Si la memoria virtual está llena se deben vaciar los datos para cargar los nuevos y los viejos los pasa al disco duro. Sigue la jerarquía anterior y entre más alto en la jerarquía están sale más barato el proceso. El MMU tiene una tabla de pags que le dice en donde se encuentra la info en la memoria física.
A nivel de programación
En la programación las estructuras de datos deben manejar la memoria de forma adecuada.
Manejo de memoria en C (Imagen)
http://crackdinterview.org/memory-management-in-c/
El heap crece hacia arriba y el stack hacia abajo. No se pueden cruzar.
El stack:
-
Se comporta en LIFO (Last In-First Out).
-
Se compone de frames o marcos de pila. Cada frame es una llamada a una función. Cuando se llama a la función ingresa a la pila y cuando se ejecuta se elimina de la pila.
Cada frame contiene:
- Espacio para variables automáticas para una nueva función llamada.
- Número de linea de la función llamada (donde retornar).
- Argumentos o parámetros de la función llamada.
-
La pila administra la memoria.
-
Cuando un frame se saca de la pila, el almacenamiento se libera automáticamente.
-
Tiene un límite de tamaño de variable
El heap:
- Es una sección del layout de memoria
- No se maneja automáticamente.
- El programador interactúa directamente con el heap.
- Distribuir memoria
- Liberar memoria
- Cambiar de tamaño de memoria
- Para interactuar con el heap, el lenguaje de programación tiene un API para lo mismo. Por ejemplo en C:
- malloc
- calloc
- realloc: Mover info de un lado a otro
- free: Liberar memoria
Se puede evitar el uso del heap pero se pierde control y se restringen funciones. Por ejemplo en Java