parte_14.txt
Document Details

Uploaded by AutonomousHeliotrope
Full Transcript
Concepto, evolución y tendencias de los sistemas op erativos TEMARIO OPOSICIONES COIICV | TEMA 26 15 La mayor parte de los algoritmos utilizados se esco gieron primando la sencillez sobre la rapidez o la sofisticación, con la intención de que otras per sonas pudieran construir un sistema más complej...
Concepto, evolución y tendencias de los sistemas op erativos TEMARIO OPOSICIONES COIICV | TEMA 26 15 La mayor parte de los algoritmos utilizados se esco gieron primando la sencillez sobre la rapidez o la sofisticación, con la intención de que otras per sonas pudieran construir un sistema más complejo en caso de necesitarlo. No se estableció un diseño detallado antes de implementar UNIX, lo que le dio una flexibilidad que ha sido clave en su desarr ollo. El sistema UNIX fue diseñado por programadores para programadores, por ello, siempre ha sido interactivo y las funciones para desarrollar progra mas siempre han tenido prioridad. Está escrito principalmente en C, simplificando mucho trasladar UNIX de unas máquinas a otras. Desde el principio han estado todas las fuentes disponibles en lÃnea, facilitando el descubrimiento de deficiencias y su corrección. Esto ha fomentado la abundancia de variantes de UNIX que existen, pero también cada vez que habÃa un avance en la ind ustria -trabajo con redes, ventanas, etc.-, UNIX podÃa absorberlo sin dejar de ser UNIX. La mayor parte de los programas se escriben en C y las llamadas al sistema se presentan como funciones en C, por lo que los detalles de estas só lo las conoce el compilador, ahorrando en la mayorÃa de ocasiones al programador el bajar a este nivel. 2.2. LINUX Al igual que BSD, Linux es otro sistema operativo d e tipo UNIX. Como Linux se diseñó para ejecutar el mayor número posible de aplicaciones UN IX estándar, tiene mucho en común con las implementaciones existentes de UNIX. 2.2.1. Historia de Linux Su desarrollo se inició en 1991, cuando un estudian te finlandés, Linus Torvalds, escribió un pequeño núcleo para el procesador 80386, el primero procesador de 32 bits de Intel. Desde sus inicios, se ofrecÃa gratuitamente su código fuente por Internet, colaborando muchos usuarios de todo el mundo casi exclusivamente a través de Inter net. En sus inicios, el desarrollo de Linux giraba alred edor del núcleo del sistema operativo: el ejecutivo privilegiado que administra todos los recursos del sistema e interactúa directamente con el hardware. Éste núcleo es totalmente original, desar rollado desde cero por la comunidad Linux. El primer núcleo Linux fue liberado el 14 de mayo d e 1991, etiquetada como la versión 0.01. Esta versión no trabajaba con redes, sólo se ejecutaba e n procesadores compatibles con el 80386 de Intel y contaba con un soporte de drivers de dispos itivos muy limitado. El único sistema de archivos que se reconocÃa era el de Minix, ya que los primer os núcleos de Linux se desarrollaron de forma cruzada con Minix. El 14 de marzo de 1994 apareció la versión 1.0 de L inux. La novedad más importante fue el trabajo con redes: incluÃa soporte de los protocolos de red es TCP/IP, asà como una interfaz de sockets o drivers de dispositivos para IP. También incluÃa un sistema de archivos nuevo muy mejorado y Se autoriza el uso exclusivo de este documento a MarÃa Amparo PavÃa GarcÃa, DNI 20013968N, a 26 de julio de 2019Vicente Sancho Guijarro 16 TEMARIO OPOSICIONES COIICV | TEMA 26 reconocÃa controladores SCSI para acceso a disco de alto desempeño. El soporte de hardware habÃa crecido para incluir dispositivos de disco fl exible, CD-ROM o tarjetas de sonidos. A nivel de gestión de procesos, se incluyó un sistema de memor ia compartida, semáforos y colas. Se proporcionó un soporte sencillo para módulos del nú cleo que se podÃan cargar y descargar dinámicamente. Como el desarrollo de nuevas versiones coincidÃa co n la corrección de errores del núcleo actual, se adoptó el siguiente patrón para la numeración de versiones: los núcleos con número de versión menor impar (1.1, 1.3, 1.5, etc.) serán núcleos de desarrollo, mientras que los pares serán núcleos estables, es decir, de producción. En marzo de 1995 se liberó el núcleo 1.2, centrado en ampliar el soporte de hardware, asà como soporte a otros procesadores como Sparc, Alpha o MI PS. La versión 2.0 de Linux, se liberó en junio de 1996 , con dos nuevas capacidades importantes: soporte de múltiples arquitecturas como al sistema Alpha de 64 bits y el soporte a arquitecturas multiprocesador. Por otra parte, se mejoró sustanci almente la gestión de memoria para contar con un caché unificado para datos del sistema de archiv os independiente del uso de cachés con dispositivos por bloques. Con esto mejoró el desemp eño del sistema de archivos y de la memoria virtual. Otras mejoras de esta versión fue la mejora del des empeño de TCP/IP, la capacidad de montar volúmenes de redes SMB o el soporte de hilos intern os del núcleo o la carga automática de módulos por demanda. El 22 de julio de 2011 se lanzó la versión 3.0 del núcleo. El salto en la numeración fue más bien un cambio estético -deberÃa haber sido la versión 2.6. 40 de haber continuado la serie- que un cambio importante en las caracterÃsticas. Aun asÃ, entre l as novedades más importantes se encuentran la defragmentación automática, el soporte para XEN o e l arranque por red. La versión 4.0 de Linux vio la luz el 12 de abril d e 2015. A parte de las tÃpicas mejoras en cuanto a un aumento de dispositivos compatibles y en la mejo ra de los drivers ya implementados y corrección de errores, la principal novedad es la p osibilidad de actualizar el kernel de Linux sin necesidad de reiniciar el equipo. Además del núcleo de Linux, el cual es el corazón d el proyecto, otros componentes constituyen el sistema operativo Linux completo. A diferencia del núcleo, una buena parte del software de soporte que constituye el sistema Linux no es exclusivo de Linux, sino común a varios sistemas operativos tipo UNIX. Utiliza muchas herramientas del sistema operativo BSD de Barkeley, el X Window System de MIT y otras del proyecto GNU de la Free S oftware Foundation. Este compartimento de herramientas ha funcionado en ambas direcciones. El sistema Linux global es mantenido por una red informal de desarrolladore s que colaboran por Internet. Se autoriza el uso exclusivo de este documento a MarÃa Amparo PavÃa GarcÃa, DNI 20013968N, a 26 de julio de 2019Concepto, evolución y tendencias de los sistemas op erativos TEMARIO OPOSICIONES COIICV | TEMA 26 17 2.2.2. CaracterÃsticas de Linux Linux es un sistema multiusuario, multitarea, con u n conjunto de herramientas compatibles con UNIX. Se asemeja a cualquier otra implementación tr adicional de UNIX no basada en microkernel. Se ejecuta en una amplia variedad de plataformas, a unque inicialmente se desarrolló para PC. Por tanto, la velocidad y la eficiencia son metas impor tantes del diseño, pero también se han concentrado los trabajos en la estandarización. Con la estandarización, se hace más fácil soportar una amplia base de aplicaciones, lo cual es importa nte para un sistema operativo. Esto lo hace soportando la norma POSIX básica y algunas extensio nes. Los estándares POSIX son un conjunto de especificac iones de diferentes aspectos del comportamiento de un sistema operativo. Hay documen tos POSIX para la funcionalidad común del sistema operativo y para extensiones como hilos de procesos y operaciones en tiempo real. El sistema Linux está formado por tres cuerpos prin cipales de código: • Kernel. Es responsable de mantener todas las abstra cciones importantes del sistema operativo, incluyendo elementos como la memoria vir tual y los procesos. El kernel del Linux forma la base del sistema operativo. Proporci ona toda la funcionalidad necesaria para ejecutar procesos y también proporciona servic ios del sistema para que las aplicaciones dispongan de acceso arbitrario y prote gido a los recursos hardware. • Bibliotecas del sistema. Definen un conjunto estánd ar de funciones mediante las que las aplicaciones pueden interactuar con el kernel. Esta s funciones implementan buena parte de la funcionalidad del sistema operativo que no ne cesita los privilegios completos del código del kernel. También pueden proporcionar vers iones más complejas de las llamadas al sistema básicas. • Utilidades del sistema. Son programas que realizan tareas individuales y especializadas de gestión. Aquà también se incluyen los demonios que son procesos ejecutados de manera permanente, asà como todos los programas necesarios para iniciar el sistema. Existen utilidades para tareas cotidianas como puede ser li star el contenido de un directorio hasta otras más complejas, como utilidades para procesami ento de textos. El kernel tiene la capacidad de cargar y descargar secciones arbitrarias del código del kernel bajo demanda. Estos módulos cargables se ejecutan en mod o kernel privilegiado, asà que disponen de acceso completo a todas las capacidades hardware de la máquina donde se ejecutan. Como cualquier persona puede modificar el kernel de Linu x, de esta manera se ahorra el tener que recompilar y rearrancar todo el núcleo, teniéndolo que hacer sólo para el módulo que esté modificando. Este soporte de módulos tiene tres componentes: • Componente de gestión de módulos. Permite cargar mó dulos en memoria y que estos se comuniquen con el resto del kernel. Además de carga r el contenido binario del módulo en Se autoriza el uso exclusivo de este documento a MarÃa Amparo PavÃa GarcÃa, DNI 20013968N, a 26 de julio de 2019Vicente Sancho Guijarro 18 TEMARIO OPOSICIONES COIICV | TEMA 26 la memoria del kernel, también debe asegurarse de q ue todas las referencias que el módulo realice a los puntos de entrada se actualice n para apuntar a las ubicaciones correctas dentro del espacio de direcciones del ker nel. • Módulo de registros de controladores. Permite a los módulos informar al resto del kernel de que hay un nuevo controlador. El kernel mantiene un a serie de tablas dinámicas de todos los controladores conocidos y proporciona un conjun to de rutinas para añadir o eliminar controladores de estas tablas, las cuales incluyen controladores de dispositivos, sistemas de archivo, protocolos de red y de formato binario. • Mecanismo de resolución de conflictos. Permite a lo s diferentes controladores de dispositivos reservar recursos hardware y proteger dichos recursos del uso accidental por parte de otro controlador, de forma centralizada. P ara ello, el kernel mantiene listas de los recursos hardware asignados. 2.2.2.1. Gestión de procesos Un proceso es el contexto básico en el que se da se rvicio a todas las actividades dentro del sistema operativo. El principio básico consiste en separar dos operaciones: la creación de un proceso (fork) y la ejecución de un nuevo programa (exec). Linux no distingue entre procesos e hilos, sino que generalmente utiliza el término tar ea. Las propiedades de los procesos pueden clasificarse en los siguientes grupos: • Identidad del proceso. ID del proceso (PID). Es el identificador unÃvoco d e cada proceso. Credenciales. Cada proceso tiene un ID de usuario y un ID o más de grupo asociados que determinan los derechos de un proceso para acce der a archivos y recursos del sistema. Personalidad. Cada proceso tiene asociado un identi ficador de personalidad que puede modificar ligeramente la semántica de ciertas llama das al sistema. Espacio de nombres. Cada proceso está asociado a un a vista especÃfica de la jerarquÃa del sistema de ficheros, también llamado namespace. • Entorno del proceso. Se hereda del proceso padre y está compuesto por dos vectores: Vector de argumentos. Enumera los argumentos de lÃn ea de comandos para invocar al programa. Vector de entorno. Es una lista de parejas nombre=v alor que asocia una serie de variables de entorno con nombre con sus correspondi entes valores. Se autoriza el uso exclusivo de este documento a MarÃa Amparo PavÃa GarcÃa, DNI 20013968N, a 26 de julio de 2019Concepto, evolución y tendencias de los sistemas op erativos TEMARIO OPOSICIONES COIICV | TEMA 26 19 • Contexto del proceso. Se trata del estado del progr ama en ejecución en un momento determinado, por lo que está variando constantement e. Incluye las siguientes partes: Contexto de planificación. Contiene la información que necesita el planificador para suspender y reiniciar el proceso. Incluye copias gu ardadas de todos los registros procesos, asà como información acerca de la priorid ad y de las señales pendientes de ser suministradas al proceso. Contabilidad de recursos. Mantiene información acer ca de los recursos consumidos por cada proceso. Tabla de archivos. Es una matriz de punteros a estr ucturas de archivos del kernel. Contexto del sistema de archivos. Se aplica a las p eticiones para abrir nuevos archivos. Tabla de rutina de tratamiento de señales. Define l as rutinas que hay que invocar cuando lleguen determinadas señales. Contexto de memoria virtual. Describe el contenido completo del espacio de direcciones privado del proceso. 2.2.2.2. Planificador de procesos El planificador de Linux es un algoritmo apropiativ o basado en prioridades. Tiene dos algoritmos separados de planificación de procesos, por rango d e prioridad: uno de tiempo compartido o nice (de 100 a 140), donde el planificador planifica los procesos de forma justa, y el otro para tareas de tiempo real (de 0 a 99), donde las prioridades abso lutas es lo más importante, siendo los valores inferiores las prioridades más altas. Linux mantiene una lista de todas las tareas ejecut ables en una estructura de datos denominada cola de ejecución (runqueue), asignando a las tarea s de mayor prioridad unos tiempos de ejecución más largos. La forma en que el kernel planifica sus propias ope raciones es fundamentalmente distinta a la forma en que planifica los procesos. El problema qu e se le plantea es que sus tareas pueden intentar acceder a las mismas estructuras internas de datos, por lo que se requiere un marco de trabajo que permita a las tareas del kernel ejecuta rse sin violar la integridad de los datos compartidos. Esto lo consigue con cerrojos de bucle sin fin (spinlock) y con semáforos. A partir de la versión 2.6 del núcleo de Linux, el kernel ha pa sado a ser apropiativo, es decir, una tarea puede ser desalojada cuando se está ejecutando en el kern el, lo cual no se permitÃa en las versiones anteriores. Se autoriza el uso exclusivo de este documento a MarÃa Amparo PavÃa GarcÃa, DNI 20013968N, a 26 de julio de 2019Vicente Sancho Guijarro 20 TEMARIO OPOSICIONES COIICV | TEMA 26 2.2.2.3. Gestión de memoria La gestión de memoria en Linux tiene dos componente s: • Gestión de memoria fÃsica. Se encarga de la asignac ión y la liberación de la memoria fÃsica: páginas, grupos de página y pequeños bloque s de memoria. Linux separa la memoria fÃsica en estas cuatro zonas o regiones: ZONE_DMA. Son los primeros 16 MB de la memoria, que son los únicos a los que pueden acceder algunos dispositivos ISA (Industry S tandard Architecture). ZONE_DMA32. Se corresponden con los primeros 4 GB d e memoria, que son los únicos a los que pueden acceder algunos dispositivo s para dar soporte a las direcciones de 64 bits. ZONE_NORMAL. Identifica la memoria fÃsica que se ma pea sobre el espacio de direcciones de la CPU. ZONE_HIGHMEM. Hace referencia a la memoria fÃsica q ue no está mapeada sobre el espacio de direcciones del kernel. Por ejemplo, en la arquitectura de 32 bits de Intel (se proporciona 232=4GB de espacio de direcciones), el kernel se mapea sobre los primeros 896 MB del espacio de direcciones, por lo que el resto de la memoria es lo que se denomina memoria alta. Cada zona tiene su propio asignador de páginas y ut ilizan un sistema de descomposición binaria para controlar las páginas fÃsicas. Este si stema permita combinar o subdividir regiones adyacentes de memoria para satisfacer las necesidades de las solicitudes de memoria. Para asignar memoria del kernel, Linux también empl ea asignación de franjas. Una franja se utiliza para asignar memoria para las estructura s de datos del kernel (descriptores de procesos, objetos de archivos, semáforos, etc.) y e stá compuesta de una o más páginas fÃsicamente contiguas. Una franja tiene tres posibl es estados: llena, vacÃa o parcial. Ante una solicitud de un objeto libre, el asignador inte ntará ubicarlo en una franja parcial. Si no hay ninguna, se ubicará en una franja vacÃa y de no haber, se creará una nueva franja. • Gestión de memoria virtual. Gestiona la memoria map eada sobre el espacio de direcciones de los procesos que se está ejecutando. Crea las pá ginas bajo demanda y gestiona la carga de dichas páginas desde el disco o la escritu ra de las mismas en el espacio de intercambio del disco. En Linux, el gestor de memor ia virtual mantiene dos vistas: Vista lógica. El espacio de direcciones consta de u n conjunto de regiones no solapadas, donde cada región representa un subconju nto continuo del espacio de direcciones con alineación de página. Las regiones están enlazadas en un árbol binario equilibrado para permitir la búsqueda rápida. Se autoriza el uso exclusivo de este documento a MarÃa Amparo PavÃa GarcÃa, DNI 20013968N, a 26 de julio de 2019